天天看点

理解REST

REST (Representational State Transfer)的概念2000年时首次在 Roy Fielding的博士论文中被提出。REST是一种分布式系统的架构设计风格。它不是一个标准,而是一组约束,比如它是无状态的,它分为客户端与服务器端,同时,它拥有一个统一的接口。REST与HTTP没有严格的相关性,但它的设计思想与之比较相似。

REST的原则

  • 使用URI标识资源(Resources),URI的定义要容易理解
  • 表示层(Representations)使用JSON或xml呈现数据对象和熟悉
  • 使用HTTP动作标识显示的传递消息(Messages),比如GET、POST、PUT和 DELETE
  • 服务端不会保存客户端请求的上下文状态,它是无状态的(Stateless)。状态的实现取决于其他扩展性的设计,由客户端保持与维护会话状态。

HTTP动作

使用HTTP请求的动作类型(methods),实现对应的CRUD (create, retrieve, update, delete) 操作。

GET

GET用于获取信息,GET请求必须是安全且幂等的,这就意味着,只要请求的参数相同,无论请求多少次,服务端返回的结果都应当是一样的。它可以对系统非幂等的操作,但这不是用户所期望的,所以GET请求不应用于对系统产生关键影响的操作。同时,参数或条件可以作为请求的一部分。

查询一个ID为1的地址

GET /addresses/1
           
POST

POST用于请求特定URI所代表的实体资源完成一些事情,它常用于创建实体,同时也能用于更新实体。

创建一个新地址

POST /addresses
           
PUT

PUT用于在指定的URI存储一个实体。PUT既可以用于新建一个实体,也可以用于更新一个已存在的实体。PUT操作是幂等的。请求结果的幂等性是PUT请求与POST请求间的最大区别。

更新一个ID为1的地址

PUT /addresses/1
           
提示:PUT请求会替换已存在的实体。如果请求参数中只提供了一部分数据,其余的数据会被替换成空或null。
PATCH

PATCH请求用于只更新指定URI实体特定的属性。PATCH请求的结果是幂等的。请求结果的幂等性是PATCH与POST最大的区别。

PATCH /addresses/1
           
DELETE

DELETE用于删除一个资源;然而,欲删除的资源不一定立刻被删除。它可以是异步的或长时间运行的请求。

删除一个ID为1的地址

DELETE /addresses/1
           

HTTP status codes

状态码用于表面HTTP请求的结果

  • 1XX-信息(接收成功)
  • 2XX-成功
  • 3XX-跳转
  • 4XX-客户端请求错误
  • 5XX-服务端错误

媒体资源

HTTP请求头中的

Accept

Content-Type

用于描述HTTP请求中期望接收的数据格式与发送的报文中的数据格式。比如,当客户端请求一个JSON格式返回时,它就会把

Accept

设置成

application/json

。相反的,当客户端发送请求时把

Content-Type

设置成

application/xml

时,则是表明发送报文中的数据格式是xml。

继续阅读