原文地址:http://www.cnblogs.com/artech/p/restful-web-api-01.htmlhtml
REST不是一个标准,而是一种软件应用架构风格。web
若是说RPC是一种面向操做的架构风格,那么REST即是一种面向资源的架构风格。json
web
咱们所熟悉的web(World Wide Web、WWW、W3或者万维网)实际上是一种利用HTTP协议获取和操做网络资源的方式。api
咱们获取的资源包括:传统信息(文字图片),多媒体信息(音频视频)缓存
Web的核心:HTTP、超文本(Hypertext)和超媒体(Hypermedia)安全
超文本和超媒体规范了网络信息的表现形式,而HTTP则提供了网络访问的标准协议。服务器
HTTP
TCP/IP与HTTP

-
- TCP/IP是以IP和TCP协议为核心的一整套网络协议的总称,因此有时候咱们也称其为TCP/IP协议簇。
- TCP/IP协议簇划分为如上图所示的4个层次(应用层、传输层、网络层和链路层),构成整个协议簇的各个子协议处于相应层次中。
- IP协议是一个无链接(Connectionless)的网络协议,每次数据报的处理对它来讲均是独立的,所以IP协议也不能提供针对有序传输(数据接收的顺序与发送的顺序一致)的保证。
- TCP是一个基于链接的协议,数据交换双方在进行报文传输以前须要创建链接,报文传输结束以后须要关闭链接。这是一个双工(Duplex)链接,数据交换的双工都可以利用它向对方发送数据。
- TCP利用“接收确认”和“超时重传”机制确保了数据可以成功抵达目的地。
- 每一个TCP报文段都具备一个16位的检验和(Checksum),因此接收方能够根据它确认数据在传输过程当中是否被篡改。
- TCP还提供了“流量控制”功能避免了双方因缓存区大小不一致而致使报文丢失。
- HTTP(Hypertext Transfer Protocol),全称为“超文本传输协议”,是TCP/IP协议簇的一部分。
- 因为TCP协议是一个“可靠”的协议,HTTP天然也能提供可靠数据传输功能。
- IP协议利用IP地址来定位数据报发送的目的地,而利用域名系统(DNS)能够实现域名与IP地址之间的转换。
- TCP协议利用端口号标识应用程序,因此某个应用程序在使用TCP协议进行通讯的时候必须指定目标应用的IP地址(或者域名)和端口号。
- HTTP默认采用的端口号为80,而HTTPS(利用TLS/SSL为HTTP提供传输安全保障)的默认端口号则为443
Web资源
媒体类型
-
- 不管是经过HTTP请求从Web服务器上获取资源,仍是利用请求向服务器提交资源,响应或者请求的主体(Body)除了包含承载资源自己的数据以外,其报头(Header)部分还应该包含表示数据形态的媒体类型。
- 媒体类型又被称为MIME(Multipurpose Internet Mail Extension)类型,MIME是一个互联网标准,它扩展了电子邮件标准,使其可以支持非ASCII字符、二进制格式附件等多种格式的邮件消息。
- text/html:HTML格式的文档。
- text/xml(application/xml):XML格式的文本。
- text/json(application/json): JSON格式的文本。
- image/gif(image/jpeg、image/png):GIF(JPEG、PNG)格式的图片。
- audio/mp4(audio/mpeg、audio/vnd.wave):MP4(MPEG、WAVE)格式的音频文件。
- video/mp4(video/mpeg、video/quicktime):MP4(MPEG、QUICKTIME)格式的视频文件。
URI、URL和URN
-
- 采用URI来标识Web资源已经成为了一种共识,实际上URI的全称为“统一资源标志符(Uniform Resource Identifier)”。
- 一个URL确定是一个URI,可是一个URI并不必定是一个URL,URL仅仅是URI的一种表现形式而已。
- URI是Web资源的标志符,因此只要求它具备“标识性”便可;
- URL全称为“统一资源定位符(Uniform Resource Locator)”,因此除了标识性以外,它还具备定位的功能,用于描述Web资源所在的位置。
- 一个完整的URL包含协议名称、主机名称(IP地址或者域名)、端口号、路径和查询字符串5个部分。
HTTP事务
-
- HTTP是一种无状态的网络协议。
- HTTP采用简单的“请求/响应”消息交换模式,一次HTTP事务(Transaction)始于请求的发送,止于响应的接收。
- 针对客户端和Web服务器的屡次消息交换来讲,每一个HTTP事务均是相互独立的。
http方法
-
- HTTP采用简单的请求/响应模式的消息交换旨在实现针对某个Web资源的某种操做。
- 针对资源的操做类型,不外乎CRUD(Create、Retrieve、Update和Delete)
- 一个HTTP请求除了利用URI标志目标资源以外,还须要经过HTTP方法(HTTP Method或者HTTP Verb)指名针对资源的操做类型。
- 经常使用的HTTP方法 包括GET、POST、PUT、DELETE、HEAD、OPTIONS、TRACE、CONNECTION和PATCH等
响应状态码
-
- 100~199:信息状态码,表明请求已被接受,须要继续处理。
- 200~299:成功状态码,表明请求已成功被服务器接收、理解、并接受。
- 300~399:重定向状态码,表明须要客户端采起进一步的操做才能完成请求。
- 400~499:客户端错误状态码,表明了客户端看起来可能发生了错误,妨碍了服务器的处理。
- 500~599:服务器错误状态码,表明了服务器在处理请求的过程当中有错误或者异常状态发生,也有多是服务器意识到以当前的软硬件资源没法完成对请求的处理。
HTTP报文
-
- 客户端和Web服务器在一次HTTP事务中交换的消息被称为HTTP报头
- 客户端发送给服务器的请求消息被称为请求报文
- 服务器返回给客户端的响应消息被称为响应报头
- 请求报文和响应报头采用纯文本编码,由一行行简单的字符串组成
- 一个完整的HTTP报文包括:起始行,报头集合,主体内容
- 起始行:表明HTTP报文的第一行文字,请求报文利用起始行表示采用的HTTP方法、请求URI和采用的HTTP版本,而响应报文的起始行在承载着HTTP版本和响应状态码等信息。
- 报头集合:HTTP报文的起始行后面能够包含零个或者多个报头字段。每一个报头表现为一个键/值对,键和值分别表示报头名称和报头的值,二者经过冒号(“:”)进行分割。HTTP报文采用一个空行做为报头集合结束的标志。
- 主体内容:表明报头集合结束标志的空行以后就是HTTP报文的主体部分了。
- 客户端提交给服务器的数据通常置于请求报头的主体,而响应报头的主体也承载着服务器返回给客户端的数据。
- 不管是请求报文仍是响应报文,其主体部分均是能够缺省的。