RESTful API介绍
RESTful API介绍
概要
在传统上,软件和网络是两个不同的领域,很少有交集;软件开发主要针对单机环境,网络则主要研究系统之间的通信。互联网的兴起,使得这两个领域开始融合,现在我们必须考虑,如何开发在互联网环境中使用的软件。
一、理解RESTful架构
RESTful架构是目前最流行的一种互联网软件架构。它结构清晰、符合标准、易于理解、扩展方便,所以正得到越来越多网站的采用。如果一个架构符合REST(Representational State Transfer)原则,就称它为RESTful架构。
1. 资源(Resources)
REST的名称"表现层状态转化"中,省略了主语。"表现层"其实指的是"资源"(Resources)的"表现层"。
所谓"资源",就是网络上的一个实体,或者说是网络上的一个具体信息。每种资源对应一个特定的URI。要获取这个资源,访问它的URI就可以,因此URI就成了每一个资源的地址或独一无二的识别符。
2. 表现层(Representation)
"资源"是一种信息实体,它可以有多种外在表现形式。我们把"资源"具体呈现出来的形式,叫做它的"表现层"(Representation)。
比如,文本可以用txt格式表现,也可以用HTML格式、XML格式、JSON格式表现,甚至可以采用二进制格式;图片可以用JPG格式表现,也可以用PNG格式表现。URI只代表资源的实体,不代表它的形式。
3. 状态转化(State Transfer)
访问一个网站,就代表了客户端和服务器的一个互动过程。在这个过程中,势必涉及到数据和状态的变化。
互联网通信协议HTTP协议,是一个无状态协议。这意味着,所有的状态都保存在服务器端。因此,如果客户端想要操作服务器,必须通过某种手段,让服务器端发生"状态转化"(State Transfer)。而这种转化是建立在表现层之上的,所以就是"表现层状态转化"。
客户端用到的手段,只能是HTTP协议。具体来说,就是HTTP协议里面,四个表示操作方式的动词:GET、POST、PUT、DELETE。它们分别对应四种基本操作:GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源。
4. 总结
什么是RESTful架构?
1)每一个URI代表一种资源;
2)客户端和服务器之间,传递这种资源的某种表现层;
3)客户端通过四个HTTP动词,对服务器端资源进行操作,实现"表现层状态转化"。
二、什么是RESTful风格的API
对于各种客户端设备与服务端的通信,我们往往都通过API为客户端提供数据,提供某种资源。
RESTful 风格的 API 是一种基于 REST(Representational State Transfer)架构原则设计的网络服务接口。它通常用于创建 web 服务,使得客户端与服务器之间的通信更加简洁和高效。
三、常用的HTTP请求方法
HTTP请求方法为 RESTful API 提供了丰富的交互能力,帮助开发者有效管理资源。
1. GET 获取资源
在RESTful API中,一般用来获取数据,例如列表,详情等。对应CRUD中的R,即查找操作。请求参数通常在 URL 中传递(如查询字符串)。
2. POST
新建资源或者更新资源。可以提交数据到服务器进行处理,通常会改变服务器的状态或数据。
例如提交表单信息,在RESTful API中,一般用来提交数据,例如表单等。对应CRUD中的C,即创建操作。数据通常放在请求体中。
3. PUT
更新现有资源。通常是对指定资源的完整替换。如果资源不存在,可能会创建新资源(取决于实现)。数据放在请求体中。
4. PATCH
部分更新现有资源。只发送需要更新的数据,效率更高。与 PUT 不同,不要求完整替换。
5. DELETE
删除指定资源。会改变服务器状态。删除后,通常不再能访问该资源。
6. OPTIONS
获取支持的HTTP方法和其他选项信息。主要用于了解服务器支持的功能。
简单来说,OPTIONS 方法主要用于获取信息,而不是执行操作。
如果浏览器主动发送了一个OPTIONS的询问请求,有两个作用:
1)获取服务器支持的HTTP请求方法。会在首部字段中返回,例如Allow: GET,POST,HEAD,OPTIONS。
说明:服务器会告诉客户端可以对特定资源使用哪些HTTP方法(如 GET、POST、PUT、DELETE 等)。
2)用来检查服务器的性能。这也正是AJAX中的预检功能。什么时候会发出预检请求呢?当具有下述情况之一时,就会发出预检:
- 使用了PUT、DELETE、CONNECT、OPTIONS、TRACE、PATCH。
- 人为的设置了除了对CORS安全的首部字段之外的其他首部字段。Accept、Accept-Language、Content-Language、Content-Type(注意第3条)、DPR、Downlink、Save-Data、Viewport-Width、Width。
- Content-Type不属于application/x-www-form-urlencoded、multipart/form-data、text/plain中的一类。
说明:CORS 预检请求是指在跨域请求中,浏览器会先发送一个 OPTIONS 请求,以确认目标服务器允许特定的请求方式和头部信息。
7. HEAD
用途:获取资源的元信息(如头部信息)。类似于 GET,但不返回资源的主体内容。常用于检查资源是否存在或获取其最新状态。
参考链接:https://segmentfault.com/a/1190000022955509