原文地址:http://www.cnblogs.com/artech/p/restful-web-api-01.html
REST不是一个标准,而是一种软件应用架构风格。
如果说RPC是一种面向操作的架构风格,那么REST便是一种面向资源的架构风格。
web
我们所熟悉的web(World Wide Web、WWW、W3或者万维网)其实是一种利用HTTP协议获取和操作网络资源的方式。
我们获取的资源包括:传统信息(文字图片),多媒体信息(音频视频)
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报文的主体部分了。
- 客户端提交给服务器的数据一般置于请求报头的主体,而响应报头的主体也承载着服务器返回给客户端的数据。
- 不论是请求报文还是响应报文,其主体部分均是可以缺省的。