RESTful Web API中的Http协议语义
术语
在讲Http协议语义之前,我们先讲两个术语:资源和资源表述。
资源(Resource)
在REST的世界中,每种事物,比如一个产品、一个用户或是一个网页都被视为资源(Resource)。
资源表述(Representation of the resource)
当浏览器为一个资源发送了HTTP请求后,服务器会发送一个文档作为回应,通常会是一个HTML文档,又或是图片、视频等。不论服务器返回了什么文档,我们都将这个文档称为资源表述(representation of the resource)。
Http语义协义
Http定义了8种不同的类型消息,在RESTful中常用到的有以下几种:
POST
基于给定的表述信息,在当前资源的下一级创建新的资源。
服务器对POST请求最常见的响应码是201(created),告之客户端资源创建成功;或是202(accepted),这表示服务打算按照提供的表述信息来创建一个资源,但是现在还没有真正的创建完成。
DELETE
销毁一个资源。
当客户端想要删除一个资源时,可以发送一个DELETE请求。服务器返回的响应码是204(no content),表示删除成功。如果试图GET一个不存在的资源,服务器会返回错误的响应码404(not found)。
DELETE请求有一个重要的属性:它是幂等的。所谓幂等,就是发送多次请求对资源状态的影响和发送一次请的影响是一样的。
幂等性是一个很有用的特性,因为互联网不是一个可靠的网络,假设我们发送了一个DELETE请求,然后连接超时了,我们没有收到响应信息,所以我们无法得知资源是否被正确地删除了,但是我们可以利用DELETE请求的幂等性特性,再次发送DELETE请求并不断重试直到收到服务器响应为止。因为多次执行DELETE请求并不比只执行一次DELETE请求造成多的影响。
PUT
用给定的表述信息替换资源的当前状态。
客户端一般通过GET请求获取资源表述,然后对其进行修改,最后将修改后的表述作为PUT请求的负载数据发送回服务器,修改完成后,服务器返回200或是204响应码。
PUT请求也是幂等的。
GET
获取资源的某个表述(一个资源可以有多个表述)。
客户端通过发送GET请求来获取某个URL所标识的资源表述。服务器以application/vnd.collection+json格式返回资源表述。GET请法语最常见的响应码是200(OK)。
GET被定义为安全的HTTP方法,这是因为向服务器发送一条或是多条GET请求对资源的影响和没有发GET请求一样,不会对既有资源有作何影响。安全方法都是幂等的。
以上四个协议对应着数据库中的增(Insert)删(delete)改(update)查(select)操作。
下面两个方法是客户端在分析研究API的时候经常使用到的
HEAD
获取服务器发送过来的头信息(不含资源表述信息)。
HEAD请求和GET请求一样,是安全方法,对HEAD请求最简单的理解就是轻量级别的GET请求,因为服务器只返回头信息,不需要返回资源表述信息。
用HEAD请求来代替GET请求,不会节约作何时间,但可以节省带宽的使用。
OPTIONS
获取这个资源所能响应的HTTP方法列表。
OPTIONS请求是HTTP的原生探索机制。一个OPTIONS请求的返回结果包含这个资源所支持的所有HTTP方法,如GET/PUT/DELETE/POST等。
推荐阅读
-
使用HTTP-REPL工具测试ASP.NET Core 2.2中的WEB API项目
-
go 原生http web 服务跨域restful api的写法介绍
-
RESTful Web API中的Http协议语义
-
RESTful Web API中的Http协议语义
-
Http协议中关于Content-Length的解读_html/css_WEB-ITnose
-
Http协议中关于Content-Length的解读_html/css_WEB-ITnose
-
使用HTTP-REPL工具测试ASP.NET Core 2.2中的WEB API项目
-
go 原生http web 服务跨域restful api的写法介绍