REST API解析

REST API

第一次接触REST API时有些迷惑,后来查阅了一些相关的文章并结合上自己的一些总结,总算对其有粗略的了解。

1. 起源

​ REST这个词,是Roy Thomas Fielding在他2000年的博士论文中提出的。关于他,这里简单介绍一下:他是HTTP协议(1.0版和1.1版)的主要设计者、Apache服务器软件的作者之一、Apache基金会的第一任主席。这样也不难理解,为什么他的这篇论文一经发表,就引起了关注,并且立即对互联网开发产生了深远的影响。(毕竟是大佬)。

​ REST,即Representational State Transfer的缩写,中文翻译叫:“表现层状态转化”。从其名字来看的确难以读懂这是个什么东西。而我是这么理解的:对服务器端的API操作等能从URI(统一资源定位符)中体现出来就叫做REST。简单地说:就是能从URI的字段中体现对后端发起何种请求就叫做"表现层状态转化"。也就是实现某URL所代表资源的状态转移。(听起来可能别扭)

2. REST是什么?

对于REST我更愿意把他理解为是一种对HTTP API的一种规范和约束,或者说是一种API设计思想,事实上它本质上也体现了这点。

RESTful 的核心思想就是,客户端发出的数据操作指令都是"动词 + 宾语"的结构。

根据 HTTP 标准,HTTP 请求可以使用多种请求方法:

  • HTTP1.0 定义了三种请求方法: GET, POST 和 HEAD方法。
  • HTTP1.1 新增了六种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法。

而REST核心就是能使用HTTP中其中定义的5种HTTP请求方法对应上CRUD 操作。

2.1 对应上CRUD操作

以下是5种HTTP请求方法对应上CRUD 操作:

GET:读取(Read)
POST:新建(Create)
PUT:更新(Update)
PATCH:部分更新(Update)
DELETE:删除(Delete)

也就是说服务程序中的特定操作被映射成为标准的 HTTP 方法——为了消除歧义,而非直接通过GET,POST的方式直接调用后端某些CRUD的数据操作接口。

就像下面这种图一样:

在这里插入图片描述

这样约束地话的确可以通过URL和请求方式就能大概知道我们想干什么了。

2.2举例

我想查找ID为1的订单,我就可以通过:

GET	http://example.com/order/1

创建一个新订单可以:

POST http://example.com/order
#在HTTP请求体中发送要添加的订单的信息
{
	id:1,
	order:"MIX 8",
	num:2,
	...
}

修改数量

PUT http://example.com/order
#PUT为全跟新,所以HTTP请求体中发送要订单全部信息,
#达到覆盖修改
{
	id:1,
	order:"MIX 8",
	num:1,
	...
}

删除第一条订单:

DELETE http://example.com/order/1

这里只是简单地举个例子,具体看实际情况而定。所以说,REST我更愿意把他理解为是一种对HTTP API的一种规范和约束,或者说是一种API设计思想。

2.3 应该遵循关键原则

当然这些原则其实是来自一篇文章https://www.infoq.cn/article/rest-introduction/,在文章中作者对REST作了总结并对其5条关键原则了做解析。

五条关键原则列举如下:

  • 为所有“事物”定义 ID
  • 将所有事物链接在一起
  • 使用标准方法
  • 资源多重表述
  • 无状态通信

3. 覆盖GET和POST

有些客户端只能使用GETPOST这两种方法。服务器必须接受POST模拟其他三个方法(PUTPATCHDELETE)。这时,客户端发出的 HTTP 请求,要加上X-HTTP-Method-Override属性,从而告知服务器应该使用哪一个HTTP请求方式解析该请求,覆盖POST方法。

POST http://example.com/order/
#在请求体头部添加
X-HTTP-Method-Override: PUT

猜你喜欢

转载自blog.csdn.net/qq_43203949/article/details/114380364