RESTful API 设计中的常见误区分析

在现代的 web 应用开发中,RESTful API 已经成为了一种非常流行的 API 设计风格。虽然它的设计原则和优点已经被广泛的认识和理解,但是在实践中还是存在许多的误区和不当的设计选择。本文将为大家详细分析 RESTful API 设计中的常见误区,帮助开发人员避免这些错误,保证开发出优秀的 RESTful API。

本文将从以下几个方面进行讨论:

  1. GET, POST, PUT 和 DELETE 操作的定义和用处
  2. 响应状态码以及错误处理
  3. URL 的设计
  4. 资源的设计和命名
  5. Hypermedia 和 HATEOAS

GET, POST, PUT 和 DELETE 操作的定义和用处

在 RESTful API 中,HTTP 协议提供了四个常用的操作:GET、POST、PUT 和 DELETE。正确理解和使用这些操作是设计 RESTful API 的基础。

GET

GET 方法用于获取某个资源的信息。在设计 API 时,GET 方法应该只用于查询数据,而不应该对数据库产生影响,也不应该产生副作用。

例如,查询用户列表的 API 可以这样设计:

--- ------

POST

POST 方法用于创建新的资源。在设计 API 时,POST 方法应该只用于新增数据,而不应该用于更新数据。且应该在请求体中包含新资源的信息。

例如,新增用户的 API 可以这样设计:

---- ------

PUT

PUT 方法用于更新指定的资源。在设计 API 时,PUT 方法应该只用于更新整个资源,而不应该用于部分更新。且应该在请求体中包含更新后的整个资源。

例如,更新用户信息的 API 可以这样设计:

--- -----------

DELETE

DELETE 方法用于删除指定的资源。在设计 API 时,DELETE 方法应该只用于删除数据,而不应该用于查询或更新数据。

例如,删除用户的 API 可以这样设计:

------ -----------

响应状态码以及错误处理

HTTP 协议提供了丰富的状态码用以描述响应的状态。在 RESTful API 设计中,正确使用状态码是十分重要的。HTTP 响应码 200 表示请求成功,而 HTTP 响应码 404 则表示找不到资源等等,具体可以参考 HTTP 协议说明。

在错误处理中,应该使用适当的状态码来表示错误的类型,而不仅仅是返回一个字符串。例如,当请求的参数缺失或不合法时,可以使用状态码 400。当请求需要认证或授权时,可以使用状态码 401 或 403。在服务器端出现内部错误时,可以使用状态码 500。

错误响应应该包含错误的描述和可能的解决方案。

例如,缺失必须参数的请求,可以返回如下的错误响应:

-------- --- --- -------
------------- ----------------

-
    ------------- --------------------
    ---------- ---- ------ --------- -- ----------
    ----------- ------- ------- --- ------ --------- --- --- -------
-

URL 的设计

URL 是 RESTful API 中的一个核心元素,它应该被设计为简洁可读且易于理解。URL 应该描述资源的层次结构,并避免在 URL 中包含任何业务逻辑。

URL 可以采用两种方式来描述资源层次结构:层级式 URL 和 平铺式 URL。

在层级式 URL 中,URL 的层次结构反映了资源之间的层次关系。例如,一个博客网站的 URL 可以这样设计:

--- ------          - -------
---- ------         - ------
--- -----------     - ---- -- ---
--- -----------     - ---- -- ---
------ -----------  - ---- -- ---

在平铺式 URL 中,URL 的结构更扁平化,每个资源都是独立的。例如:

--- ------          - -------
---- ----------     - ------- -- ---
------ ----------   - ---- -- ---

无论使用哪种方式描述资源,URL 都应该保证可读性。

资源的设计和命名

在 RESTful API 中,资源是指数据或服务的一个唯一表示。资源应该按照信息建模的方法进行设计,而不是按照数据库模式进行设计。

资源应该拥有一个唯一的 ID,并在 URL 中使用该 ID 进行标识。资源的属性或数据应该作为 JSON 或 XML 输出。在设计资源属性时,应该避免使用与 HTTP 查询参数相同的名称,以免引起混淆。

资源的命名应该尽可能地简洁明了,同时表达出其所代表的业务含义。例如:

------      - ----
----------  - -- -- ---

资源的设计和命名应该遵循以下原则:

  1. 避免使用单数和复数的混合。
  2. 使用小写字母,并用破折号分隔不同的单词。
  3. 避免使用动词,除非在表示操作时。

Hypermedia 和 HATEOAS

Hypermedia 和 HATEOAS 是 RESTful API 设计的两个关键元素。

Hypermedia 是指提供超文本链接来引导用户浏览资源的方式。Hypermedia 可以被视为浏览网页的一种方式,也就是说每个资源都应该有相关联的链接,从而使得 API 的使用更加灵活友好。

HATEOAS 全称为 Hypermedia As The Engine Of Application State,即超媒体即应用状态的引擎,是 RESTful API 设计的另一个核心概念。它的主要思想是,客户端不应该先预设和后台的通信流程和协议,而是应该按照资源模型的方式动态浏览资源的结构和关系。

一个 HATEOAS 的 API 应该将具有不同关系的资源通过超媒体相关性链接起来。这允许客户端在不事先定义 API 全貌的前提下从服务端发现和构建出自己的工作流程。通过动态构建访问路径和资源标识符,HATEOAS 可以极大地简化 API 的使用方式,使其具有更大的可复用性和扩展性。

总结

本文详细分析了 RESTful API 设计中的常见误区。在进行 API 设计时应该遵循这些原则,以保证 API 的可读性、可维护性和可扩展性。如果你遵循了这些原则,你将会自如地设计出优秀的 RESTful API,充分利用它带来的优势和便利。下面的示例代码可以帮助你更好地理解这些概念。

示例代码:

-- ------
--- ------

-- ----
---- ------
-
    ------- ----- -----
    -------- ----------------------
    ----------- -------------
-

-- ------
--- -----------
-
    ------- ----- -----
    -------- ----------------------
    ----------- -------------
-

-- ----
------ -----------

-- ----
-------- --- --- -------
------------- ----------------

-
    ------------- --------------------
    ---------- ---- ------ --------- -- ----------
    ----------- ------- ------- --- ------ --------- --- --- -------
-

-- ----
--- ------

-- -- -- ---
--- ----------

-- ---- -- ---
------ ----------

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6643b174d3423812e41a998f