让你的 RESTful API 具有幂等性的 4 种方法

阅读时长 4 分钟读完

RESTful API 是现代应用程序开发中的一项核心技术。它们提供了一种标准方式来访问和操作资源。但是,开发 RESTful API 时,必须遵守一些最佳实践,例如保持幂等性。在本文中,我们将学习什么是幂等性,并介绍 4 种让你的 RESTful API 具有幂等性的方法。

什么是幂等性?

幂等性是指,无论调用 RESTful API 的次数是多少,结果都是相同的。简单地说,如果你调用一个幂等的 API 两次或以上,得到的响应结果应该是一样的,并且不应该出现副作用。

例如,假设你有一个添加文章的 API,如果每次成功调用后都会在数据库中创建一条新的记录,那么它就不是幂等的。但是,如果该 API 只创建一条记录并且在后续调用中不会创建重复的记录,那么它就是幂等的。

下面我们将介绍 4 种让你的 RESTful API 具有幂等性的方法。

1. 使用 HTTP 方法

HTTP 方法中有几个是幂等的,例如 GET 和 DELETE。这是因为这些方法只是查询和删除资源,不会对资源状态进行改变。在写有副作用的 RESTful API 时,应该尽可能地使用 PUT 和 POST 方法,这两个方法可以在相同的 URI 上进行多次调用,而不会引入副作用。

例如,假设你有一个更新文章的 API,可以使用 PUT 方法:

这个 API 可以将 HTTP 请求体中的数据用于更新 ID 为 :id 的文章。无论调用它多少次,结果都应该是相同的。

2. 添加幂等标识符

在许多情况下,使用 HTTP 方法来确保幂等性并不是可行的解决方案。例如,创建新资源时,需要使用 POST 方法。在这种情况下,可以在请求头或请求体中添加一个唯一的幂等标识符来保证幂等性。

例如,你可以在请求头中添加一个名为 X-Idempotency-Key 的标识符:

如果相同的 X-Idempotency-Key 被使用多次,API 将只执行一次操作,并返回相同的响应结果。

3. 使用版本号来表示状态

另一个保持幂等性的方法是使用版本号来表示状态。在进行更新或修改时,向 URI 添加版本号作为参数。更新版本号以及更新所有与之关联的资源。如果客户端不发送相同的请求体和版本号,则服务器将拒绝请求并返回错误响应。

例如,你可以在 URI 中添加版本号:

这里版本号为 1。如果客户端发送带有版本号为 2 的请求体,服务器会拒绝该请求,并返回错误响应。

4. 在服务器端实现乐观并发控制

最后一个保持幂等性的方法是在服务器端实现乐观并发控制。乐观并发控制最常用的方法是使用版本控制,当客户端尝试更新资源时,它将检查资源的版本是否与服务器版本匹配。如果等于,则更新该资源并将版本号加 1。否则,将返回错误响应,要求客户端重新获取更新后的资源。

例如,你可以将版本号添加到资源模型中,并在更新时进行检查:

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

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

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

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

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

结论

保持 RESTful API 的幂等性非常重要,可以确保对资源进行正确的修改并避免出现数据损失。在写有副作用的 API 时,应该根据实际情况选择适当的方法。本文介绍了 4 种实现幂等性的方法,它们将有助于确保你的 API 具有幂等性。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/671c11a99babaf620faedbf3

纠错
反馈