Richardson 成熟度模型

2025年1月17日 | 阅读时长:4分钟

Richardson 成熟度模型根据 API 的 RESTful 成熟度对其进行评分。它由Leonard Richardson提出。 Richardson 成熟度模型是一种根据 REST 约束对 API 进行评分的方法。它将 REST 方法的主要元素分解为四个级别(0 到 3)。

有四个级别

  • 级别 0:POX 的沼泽
  • 级别 1:资源
  • 级别 2:HTTP 动词
  • 级别 3:超媒体控制

例如,一个级别越高,与一个较低的级别相比,就越符合 RESTful。只有当 API 达到第 4 级时,我们才将其视为 RESTful API。

Richardson Maturity Model

级别 0:POX 的沼泽

级别 0 也称为 POX(Plain Old XML,纯旧 XML)。在级别 0,HTTP 仅用作远程交互的传输协议。它没有利用 HTTP 的优势,如不同的 HTTP 方法和 HTTP 缓存。要获取和发布数据,我们向同一个 URI 发送请求,并且仅使用 POST 方法。这些 API 仅使用一个 URI 和一个名为 POST 的 HTTP 方法。简而言之,它以 REST 风格公开 SOAP Web 服务。

例如, 对于特定公司,可以有很多客户。对于所有不同的客户,我们只有一个端点。为了执行任何操作,如获取、删除、更新,我们使用相同的 POST 方法。

获取数据:https://:8080/customer

发布数据:https://:8080/customer

在以上两个 URI 中,我们使用相同的 URI 和方法来获取和发布客户。

级别 1:资源

当一个 API 可以区分不同的资源时,它可能处于级别 1。它使用多个 URI。其中每个 URI 都是指向特定资源的入口点。它使用适当的 URI 公开资源。级别 1 通过将巨大的服务端点分解成多个不同的端点来解决复杂性。它还仅使用一个 HTTP 方法 POST 来检索和创建数据。

例如,如果我们想要特定产品的列表,我们通过 URI https://:8080/products。如果我们想要一个特定产品,我们通过 URI https://:8080/products/mobile。

构建 URI 时请记住以下几点

  • 使用域和子域对资源进行逻辑分组或分区。
  • 使用/ 表示分层关系。
  • 使用,; 表示非分层关系。
  • 使用-_ 提高可读性。
  • 使用& 分隔参数。
  • 避免包含文件扩展名

级别 2:HTTP 动词

级别 2 表明 API 必须使用协议属性来处理可伸缩性和故障。在级别 2,正确的HTTP 动词与每个请求一起使用。它建议为了真正 RESTful,API 中必须使用 HTTP 动词。对于每个请求,都会提供正确的 HTTP 响应代码。

我们不会对所有请求使用单个 POST 方法。我们使用GET方法来请求资源,并使用DELETE方法来删除资源。此外,请使用应用程序协议的响应代码。

例如,要获取客户,我们发送一个带有 URI https://:8080/customers 的请求,服务器发送正确的响应200 OK

下表显示了 HTTP 动词及其用法

动词安全性与幂等性用途
GET是/是它检索信息。
POST否/否它用于在服务器上执行各种操作,如创建新资源和更新现有资源,或对一个或多个资源进行混合更改。
DELETE否/是它用于删除资源。
PUT否/是它用于更新或替换现有资源,或使用客户端指定的 URI 创建新资源。
HEAD是/是它用于检索与 GET 响应相同的标头,但响应中没有任何正文。
OPTIONS是/是它用于查找任何资源支持的 HTTP 方法列表或 ping 服务器。
TRACE是/是它用于调试,它回显它接收到的标头。

级别 3:超媒体控制

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

例如,如果我们发送 GET 请求获取客户,我们将获得客户的 JSON 格式响应以及自文档化的超媒体。

下图显示了模型的概述

Richardson Maturity Model