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 方法:
PUT /api/articles/:id
这个 API 可以将 HTTP 请求体中的数据用于更新 ID 为 :id
的文章。无论调用它多少次,结果都应该是相同的。
2. 添加幂等标识符
在许多情况下,使用 HTTP 方法来确保幂等性并不是可行的解决方案。例如,创建新资源时,需要使用 POST 方法。在这种情况下,可以在请求头或请求体中添加一个唯一的幂等标识符来保证幂等性。
例如,你可以在请求头中添加一个名为 X-Idempotency-Key
的标识符:
POST /api/articles X-Idempotency-Key: abc123
如果相同的 X-Idempotency-Key
被使用多次,API 将只执行一次操作,并返回相同的响应结果。
3. 使用版本号来表示状态
另一个保持幂等性的方法是使用版本号来表示状态。在进行更新或修改时,向 URI 添加版本号作为参数。更新版本号以及更新所有与之关联的资源。如果客户端不发送相同的请求体和版本号,则服务器将拒绝请求并返回错误响应。
例如,你可以在 URI 中添加版本号:
PUT /api/articles/:id?v=1
这里版本号为 1。如果客户端发送带有版本号为 2 的请求体,服务器会拒绝该请求,并返回错误响应。
4. 在服务器端实现乐观并发控制
最后一个保持幂等性的方法是在服务器端实现乐观并发控制。乐观并发控制最常用的方法是使用版本控制,当客户端尝试更新资源时,它将检查资源的版本是否与服务器版本匹配。如果等于,则更新该资源并将版本号加 1。否则,将返回错误响应,要求客户端重新获取更新后的资源。
例如,你可以将版本号添加到资源模型中,并在更新时进行检查:
-- -------------------- ---- ------- -- ---- ----- ------- - - --- -- ------ -------- -------- - - -- -- --- ---------------------------- ----- ---- -- - ----- - -- - - ---------- ----- - ------ ------- - - -------- -- -------- --- ---------------- - ------ ---------------------- ------ ---------- -- - ------------- - ----- ----------------- ----------------- --
结论
保持 RESTful API 的幂等性非常重要,可以确保对资源进行正确的修改并避免出现数据损失。在写有副作用的 API 时,应该根据实际情况选择适当的方法。本文介绍了 4 种实现幂等性的方法,它们将有助于确保你的 API 具有幂等性。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/671c11a99babaf620faedbf3