【问题标题】:Why use the PUT method in a REST API used for CRUD?为什么在用于 CRUD 的 REST API 中使用 PUT 方法?
【发布时间】:2021-01-30 18:57:29
【问题描述】:

我知道,在 REST API 的设计中,应该使用 PUT 方法来替换整个资源,而应该使用 PATCH 方法来部分更新它。

我设计了一个简单的 REST API 来在资源中执行 CRUD 操作:

  • URL /resource ,方法 POST(创建)
  • URL/resource/id,方法 GET(读取)
  • URL/resource/id,方法 PATCH(更新)
  • URL/resource/id,方法DELETE(删除)

使用 PUT 添加端点有什么好处,如果它所做的一切都可以通过 PATCH 完成?

【问题讨论】:

  • PATCH 在某种程度上有点模糊,它可以做很多事情,而不仅仅是update(例如参见JSON Patch)。另一个区别是 PUT 幂等的,而 PATCH 可以是(但不需要)。最后,只需选择最适合您的情况并简化 API 的使用(同时遵循 HTTP 规范)。

标签: rest


【解决方案1】:

围绕 HTTP 方法有多种语义。

  • POST - 创建
  • PUT - 更新(发送整个资源描述)(与 GET 返回相同)
  • PATCH - 更新(发送部分资源描述.. 例如,仅单个字段) - 例如,如果表示非常大,当仅更改单个字段时,我们可能会浪费大量网络资源来更新整个表示)。如果我们构建一个在根级别接受单个字段表示的 PATCH 端点,我们可以使用比 PUT 可能需要的小得多的请求来更新大对象。
  • 获取 - 读取
  • 删除 - 删除

如果您使用的是 JSON/XML/YAML/其他方式,使用 PATCH 通常可以更快地处理数据,但它很少使用(根据我的经验)。在企业开发过程中,我想我已经看到它使用过一次,也许两次。

编辑:这应该澄清https://www.rfc-editor.org/rfc/rfc5789#section-2

【讨论】:

  • 这不能回答我的问题。如果我使用 PATCH 更新资源的一部分(即一组资源属性),为什么我需要 PUT 到 CRUD 操作端点?
  • 因为您可以更新资源的多个字段,并且更容易发出 1 个请求,而不是几个较小的请求可能会更慢
  • 可以在一个 PATCH 请求中更新多个字段。
  • 你是对的,但是想象一下你试图更新一个 LARGE 对象(几个 100kb)——也许经常进行编辑。您有一个更新整个资源的 PUT 端点,一个只处理更新该资源的一小部分的 PATCH 请求。如果许多补丁比一个 PUT 慢,则使用 PUT(批量更新)。您也可以只处理资源的一小部分而不是所有单独的部分(因为它可能需要更多的开发时间)。
  • 同一个 PATCH 请求可以只更新一个字段或所有字段。 API 用户将决定如何使用它并根据需要批量 API 调用。与 PATCH 请求相比,PUT 请求没有任何性能提升。
猜你喜欢
  • 2013-05-15
  • 1970-01-01
  • 2022-12-24
  • 2017-08-20
  • 2021-12-16
  • 1970-01-01
  • 2021-03-01
  • 2021-01-17
  • 1970-01-01
相关资源
最近更新 更多