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。

restful-web-services-richardson-maturity-model.png

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动词及其使用情况:

动词安全性和幂等性用途
GETY/Y用于检索信息。
POSTN/N用于在服务器上执行各种操作,例如创建新资源、更新现有资源,或对一个或多个资源进行混合更改。
DELETEN/Y用于删除资源。
PUTN/Y用于更新或替换现有资源,或使用客户端指定的URI创建新资源。
HEADY/Y用于检索与GET响应中的相同标头,但响应中没有正文。
OPTIONSY/Y用于查找任何资源支持的HTTP方法列表,或者用于向服务器发送ping请求。
TRACEY/Y用于调试,回显它收到的标头。

Level 3: 超媒体控制

Level 3 是最高级别。它结合了Level 2和HATEOAS。它还支持HATEOAS。它有助于自我文档化。

例如,如果我们发送一个GET请求以获取客户信息,我们将获得以JSON格式呈现的客户响应,带有自我文档化的超媒体。

以下图示显示了该模型的概述:

restful-web-services-richardson-maturity-model2.png

标签: spring, Spring教程, Spring语言学习, Spring框架, Spring框架教程, Spring框架高级教程, spring boot, spring boot入门教程, spring boot学习教程, spring boot下载, spring boot框架入门, spring boot面试题, spring boot笔试题, spring boot学习指南, spring boot技术