一、答案
一种使用 HTTP 协议的规范,用 URL 定位资源,用 HTTP 描述操作 。
本质来讲,就是客户端通过 HTTP 协议,向服务器发送请求,服务器做出响应,通过 HTTP 向客户端返回数据。从理念上讲知道输入,知道输出,但是不清楚内部操作,故称为“接口”。
二、诞生原因
转自:https://blog.csdn.net/weixin_38087538/article/details/82838762
既然用普通的 HTTP 协议即可实现的功能,为什么要称为 REST 接口呢?实际上 REST 接口是在 HTTP 协议基础上,定义了一种适用于当前前后端分离的 HTTP 协议使用规范。没有该规范之前,前后端分离时面临的问题如下:
- 很多人在错误的使用 http 协议定义接口,比如各种各样的命名,什么 getUserInfoById, deleteById 之类的、有状态和无状态请求混用。
- 对于 http 协议本身提供的规则并没有很好的利用。
所以,为了更好的解决这些问题,干脆就定义一套规范,这套规则并没有引入新的东西,无非就是对 http 协议本身的使用做了一些约束,比如说
- REST 是面向资源,每一个 URI 代表一个资源。
- 强调无状态化,服务器端不能存储来自某个客户的某个请求中的信息,并在该客户的其他请求中使用。
- 强调 URL 暴露资源时,不要在 URI 中出现动词。
- 合理的利用 http 状态码、请求方法。
三、详细说明
转自:https://www.cnblogs.com/Sandy-1128/p/REST-SANDY-0413.html
知乎大神 Ivony 有句话说的好:
URL 定位资源,用 HTTP 动词(GET、POST、DELETE、PUT)描述操作。
咱们不解释 REST 是哪几个单词的首字母,说了也不知道,翻译成中文就是表现层状态转移,我是弄不懂。
在设计 web 接口的时候,REST 主要是用于定义接口名,接口名一般是用名次写,不用动词,那怎么表达“获取”或者“删除”或者“更新”这样的操作呢 ? 用请求类型来区分。
比如,我们有一个 friends 接口,对于“朋友”我们有增删改查四种操作,怎么定义REST接口?
-
增加一个朋友,uri: generalcode.cn/v1/friends 接口类型:POST
-
删除一个朋友,uri: generalcode.cn/va/friends 接口类型:DELETE
-
修改一个朋友,uri: generalcode.cn/va/friends 接口类型:PUT
-
查找朋友,uri: generalcode.cn/va/friends 接口类型:GET
上面我们定义的四个接口就是符合 REST 协议的,请注意,这几个接口都没有动词,只有名词 friends,都是通过 Http 请求的接口类型来判断是什么业务操作。
举个反例:generalcode.cn/ va / deleteFriends 该接口用来表示删除朋友,这就是不符合 REST 协议的接口。
一般接口的返回值是 JSON 或者 XML 类型的,大多是 JSON 格式。
用 HTTP Status Code 传递 Server 的状态信息。比如最常用的 200 表示成功,500 表示 Server 内部错误,403 表示 Bad Request 等。(反例:传统web开发返回的状态码一律都是200,其实不可取。)
那这种风格的接口有什么好处呢?前后端分离。前端拿到数据只负责展示和渲染,不对数据做任何处理。后端处理数据并以 JSON 格式传输出去,定义这样一套统一的接口,在 web,ios,android 三端都可以用相同的接口,是不是很爽?!
(SAW:Game Over!)