10.REST
REST原则
是 Roy Thomas Fielding 在 2000年博士论文中提出的。他对互联网软件架构原则命名为 REST [表现层状态转化]
。如果一个架构符合 REST原则
,就称它为 RESTful 架构
。
关于 RESTful 架构
,最好的方法是去理解 Representational State Transfer 的意义。
-
资源 [Resources]
REST 的名称 “表现层状态转化”,其实省略掉了主语。 表现层 其实指的是 资源
所谓 资源,就是网络上一个实体(具体信息),可以是文本、图片、音视频、服务等。标识资源实体的识别符为:
URI
。 每种资源均对应一个特定的URI
,要获取这个资源,访问它的URI
即可。 -
表现层 [Representation]
资源
是一种信息实体,他可以用多种表现形式。表现层
是资源
具体呈现的形式。比如:文本可以用 txt 、HTML、XML、JSON、二进制格式进行表现。URI
只代表信息实体的位置,无关乎表现形式。 信息实体的表现形式应该在 HTTP 请求头部信息中采用 Accept 和 Content-Type 字段指定。 -
状态转换 [State Transfer]
用户通过浏览器访问网站,就代表了 [客户端] 和 [服务端] 的一个互动过程。在这个过程中,势必涉及到数据和状态的变化。 HTTP协议是一个无状态的互联网通信协议,这意味着所有的状态信息均保存在 [服务端]。因此,如果 [客户端] 想要操作 [服务端] ,必须通过某种手段,让 [服务端] 发生
状态变化
。而这种转化是建立在 表现层 之上的。因此称为: 资源表现层状态转化。 -
HTTP 协议里存在七个常用表示操作方式的动词
- GET [获取资源]
- POST [新建资源、更新资源]
- PUT [更新资源,客户端需要提供完整的资源属性]
- DELETE [删除资源,在业务系统中删除并不是指的物理删除,而是逻辑删除。资源通常仍然在数据库中,只是状态设置为删除状态]
- PATCH [更新资源的部分属性]
- HEAD [类似 GET,但仅仅有 HTTP 头信息,头信息包含了需要查找的信息]
- OPTIONS [用于获取 URI 所支持的方法,响应信息会在 HTTP 头中包含一个名为
Allow
的key,value是所支持的方法]
-
Web框架中 REST风格架构要求:
-
使用
api
作为 web 上下文,比如: -
增加版本标识,比如:
-
标识资源,将资源名称放到URL中,比如:
-
REST 中的 HTTP Method,采用上述的操作动词举例:
- POST – http://192.168.0.1/api/v1.1/system/user [增加系统用户]
- GET – http://192.168.0.1/api/v1.1/system/user/7 [查询ID为7的用户]
- DELETE – http://192.168.0.1/api/v1.1/system/user/17 [删除ID为17的用户]
-
REST 中的 HTTP Status
[服务端] 向 [客户端] 返回 HTTP Status 以表示操作是否成功,常用举例如下:
- 200 [OK 用户请求成功,数据成功返回]
- 400 [错误的请求,请求参数匹配错误]
- 404 [NOT Found 用户发出的请求针对的资源不存在]
- 405 [用来访问本页面的 HTTP Method 不被允许]
- 406 [表示无法使用请求的内容特性来响应请求的资源]
- 500 [服务器内部错误,无法完成请求]
-
-
@RestController
Spring Boot 应用引入基础web开发相关依赖,即可自动支持REST。
为了简化开发,针对REST架构风格,会有一些便捷注解进行声明。(原生注解也可实现REST,这里只是为了简化开发) 比如:
@RestController
=@Controller
+@ResponseBody
可以使用请求模拟工具:Postman,进行请求的模拟测试。
-
Swagger UI [Restful风格接口的文档在线自动生成和测试的框架]
Swagger是个前后端协作的利器,解析代码里的注解生成JSON文件,通过Swagger UI生成网页版的接口文档,可以在上面做简单的接口调试。详情可以查看我博客之前提到的Spring Boot整合Swagger的文章。链接如下: