SpringBoot教程-Richardson 成熟度模型
Richardson 成熟度模型
Richardson 成熟度模型按照其RESTful成熟度对API进行评分。由Leonard Richardson提出。Richardson 成熟度模型是一种根据REST的约束来评估您的API的方法。它将REST方法的主要元素分解为四个级别(从0到3)。
共有四个级别:
- Level 0: POX的沼泽
- Level 1: 资源
- Level 2: HTTP动词
- Level 3: 超媒体控制
例如,较高级别的API与较低级别的API相比,更符合REST。只有当API达到级别4时,我们才认为它是一个符合REST的API。
Level 0: POX的沼泽
Level 0 也被称为POX(Plain Old XML,普通旧XML)。在Level 0中,HTTP仅被用作远程交互的传输协议。它不利用HTTP的优势,比如不使用不同的HTTP方法和HTTP缓存。为了获取和发布数据,我们向相同的URI发送请求,只能使用POST方法。这些API仅使用一个URI和一个名为POST的HTTP方法。简而言之,它以REST风格公开SOAP web服务。
例如,一个特定公司可以有许多客户。对于所有不同的客户,我们只有一个端点。要执行获取、删除、更新等操作,我们使用相同的POST方法。
获取数据:http://localhost:8080/customer
发布数据:http://localhost:8080/customer
在上述两个URI中,我们使用相同的URI和方法来获取和发布客户信息。
Level 1: 资源
当API能够区分不同的资源时,可能达到Level 1。它使用多个URI,每个URI都是特定资源的入口点。它以适当的URI公开资源。Level 1通过将庞大的服务端点分解为多个不同的端点来解决复杂性问题。它还仅使用一个HTTP方法POST来检索和创建数据。
例如,如果我们想要特定产品的列表,我们会通过URI http://localhost:8080/products
进行访问。如果我们想要特定的产品,我们会通过URI http://localhost:8080/products/mobile
进行访问。
在构建URI时请记住以下要点:
- 使用域名和子域名对资源进行逻辑分组或分区。
- 使用 / 表示层次关系。
- 使用 , 和 ; 表示非层次关系。
- 使用 - 和 _ 来提高可读性。
- 使用 & 分隔参数。
- 避免包含 文件扩展名。
Level 2: HTTP动词
Level 2 表示API必须使用协议属性来处理可扩展性和故障。在Level 2中,每个请求都使用了正确的HTTP动词。它建议为了真正符合REST,API必须使用HTTP动词。对于这些请求的每一个,都提供了正确的HTTP响应代码。
我们不会对所有请求使用单一的POST方法。我们在请求资源时使用GET方法,在要删除资源时使用DELETE方法。同时,使用应用程序协议的响应代码。
例如,要获取客户信息,我们发送一个带有URI http://localhost:8080/customers
的请求,服务器会返回适当的响应 200 OK。
以下表格显示了HTTP动词及其使用情况:
动词 | 安全性和幂等性 | 用途 |
---|---|---|
GET | Y/Y | 用于检索信息。 |
POST | N/N | 用于在服务器上执行各种操作,例如创建新资源、更新现有资源,或对一个或多个资源进行混合更改。 |
DELETE | N/Y | 用于删除资源。 |
PUT | N/Y | 用于更新或替换现有资源,或使用客户端指定的URI创建新资源。 |
HEAD | Y/Y | 用于检索与GET响应中的相同标头,但响应中没有正文。 |
OPTIONS | Y/Y | 用于查找任何资源支持的HTTP方法列表,或者用于向服务器发送ping请求。 |
TRACE | Y/Y | 用于调试,回显它收到的标头。 |
Level 3: 超媒体控制
Level 3 是最高级别。它结合了Level 2和HATEOAS。它还支持HATEOAS。它有助于自我文档化。
例如,如果我们发送一个GET请求以获取客户信息,我们将获得以JSON格式呈现的客户响应,带有自我文档化的超媒体。
以下图示显示了该模型的概述: