第6章 构建 RESTful 服务
6.1 RESTful 简介
6.2 构建 RESTful 应用接口
6.3 使用 Swagger 生成 Web API 文档
6.4 实战:实现 Web API 版本控制
6.1 RESTful 简介
本节内容大纲:
- 什么是 RESTful?RESTful 的特点?RESTful 中的资源?
- HTTP Method?HTTP Status?
- RESTful 和 SOAP 的区别?
6.1.1 什么是 RESTful
1、什么是 RESTful?
答:
- RESTful 是目前流行的互联网软件服务架构设计风格。
- REST(Representational State Transfer,表述性状态转移)定义了互联网软件服务的架构原则,如果一个架构符合REST原则,那么称之为RESTful架构。
- REST 并不是一个标准,它更像一组客户端和服务端交互时的架构理念和设计原则,基于这种架构理念和设计原则的 Web API 更加简洁,更有层次。
2、RESTful 的特点?
答:
(1)每一个 URI 代表一种资源。
(2)客户端使用 GET、POST、PUT、DELETE 四种表示操作方式的动词对服务端资源进行操作:
GET用于获取资源,POST用于新建资源(也可以用于更新资源),PUT用于更新资源,DELETE用于删除资源。
(3)通过操作资源的表现形式来实现服务端请求操作。
(4)资源的表现形式是 JSON 或者 HTML。
(5)客户端与服务端之间的交互在请求之间是无状态的,从客户端到服务端的每个请求都包含必需的信息。
符合 RESTful 规范的 Web API 需要具备如下两个关键特性:
- 安全性
- 幂等性
3、RESTful中的资源?
答: RESTful 中的资源通过 JSON 或者 HTML 的形式表现。
6.1.2 HTTP Method
什么是 HTTP Method?
答: HTTP 提供了 POST、GET、PUT、DELETE 等操作类型对某个 Web 资源进行 Create、Read、Update 和 Delete 操作。 一个 HTTP 请求除了利用 URI 标志目标资源之外,还需要通过 HTTP Method 指定针对该资源的操作类型。
常见的 HTTP Method:POST、GET、PUT、PATCH、DELETE。
对应的 CURD 操作:Create、Read、Update、Delete。
6.1.3 HTTP 状态码
1、什么是 HTTP 状态码?
答:HTTP 状态码就是服务向用户返回的状态码和提示信息,客户端的每一次请求,服务都必须给出回应,回应包括 HTTP 状态码和数据两部分。
2、HTTP 状态码有哪5类?
答: HTTP 定义了40个标准状态码,可用于传达客户端请求的结果。状态码分为以下5个类别:
- 1xx:信息,通信传输协议级信息。
- 2xx:成功,表示客户端的请求已成功接受。
- 3xx:重定向,表示客户端必须执行一些其他操作才能完成其请求。
- 4xx:客户端错误,此类错误状态码指向客户端。
- 5xx:服务器错误,服务器负责这些错误状态代码。
RESTful API 中使用 HTTP 状态码来表示请求执行的结果,适用于 REST API 设计的代码以及对应的 HTTP 方法,如表所示:
HTTP 状态码
HTTP 状态码 | 返回值 | HTTP Mehod | 特定返回值 |
---|---|---|---|
200 | OK | GET | 服务器成功返回用户请求的数据,该操作是幂等的 |
201 | Created | POST/PUT/PATCH | 用户新建或修改数据成功 |
202 | Accepted | * | 表示一个请求已经进入后台排队(异步任务) |
204 | NO CONTENT | DELETE | 用户删除数据成功 |
400 | INVALID REQUEST | POST/PUT/PATCH | 用户发出的请求有错误,服务器没有进行新建或修改数据的操作,该操作是幂等的 |
401 | Unauthorized | * | 表示用户没有权限(令牌、用户名、密码错误) |
403 | Forbidden | * | 表示用户得到授权(与401错误相对),但是访问是被禁止的 |
404 | NOT FOUND | * | 用户发出的请求针对的是不存在的记录,服务器没有进行操作,该操作是幂等的 |
406 | Not Acceptable | GET | 用户请求的格式不可得(比如用户请求JSON格式,但是只有XML格式) |
410 | Gone | GET | 用户请求的资源被永久删除,且不会再得到 |
422 | Unprocesable entity | POST/PUT/PATCH | 当创建一个对象时,发生一个验证错误 |
500 | INTERNAL SERVER ERROR | * | 服务器发生错误,用户将无法判断发出的请求是否成功 |
上表是 HTTP 协议提供的状态码和 HTTP Method。通过 RESTful API 返回给客户端的状态码和提示信息可以判断出 Web API 的请求和执行情况。
除了以上基本的 HTTP 请求状态码外,Web API 服务端还需要定义业务相关的状态,如 1000 订单提交成功、1002 订单修改成功等。每种状态码都有标准的解释,客户端只需查看状态码字典就知道相应业务的执行结果,所以服务端应该返回尽可能精确的状态码。
6.1.4 REST 和 SOAP 的区别
1、RESTful 和 SOAP 到底有哪些区别?
答:
(1)SOAP
SOAP(Simple Object Access Protocol,简单对象访问协议)是一种标准化的通信规范,主要用于 Web 服务。它有着严格的规范和标准,包括安全、事务等各个方面的内容,同时 SOAP 强调操作方法和操作对象的分离,使用 WSDL 文件规范和 XSD 分别对其定义。
(2)RESTful
RESTful 简化了 WebService 的设计,它不再需要 WSDL,而是通过最简单的 HTTP 协议传输数据(包括 XML 和 JSON)。既简化了设计,也减少了网络传输量(因为只传输代表数据的 XML 或 JSON,没有额外的 XML 包装)。REST 强制所有的操作都必须是无状态的,没有上下文的约束,不需要考虑上下文和会话保持的问题,极大地提高系统的可伸缩性。
(3)区别
RESTful
相对于 SOAP 更加简单明了,它并没有一个明确的架构标准,更像是一种设计风格,其核心是面向资源
;而WebService
基于 SOAP 协议,主要核心是面向活动
。
2、设计Web服务时,选择目前最流行的 RESTful 还是选择老牌的 WebService?
答: 移动互联网飞速发张的今天,业务随时都在变化,天然拥抱变化的 RESTful 架构无疑是当前互联网行业 Web 服务架构开发的首选。
来源:《Spring Boot 从入门到实战》学习笔记