Rest api - 更新资源的单个字段

use*_*466 23 java rest spring http

假设我的驱动程序资源有休息端点.我有像这样的PUT方法

myapi/drivers/{id}

{body of put method}
Run Code Online (Sandbox Code Playgroud)

我需要添加允许"启用"和"禁用"驱动程序的功能

为此创建新端点是个好主意吗?

PUT myapi/drivers/{id}/enable/false
Run Code Online (Sandbox Code Playgroud)

或者最好使用现有的端点?使用现有端点的一个问题是驱动程序有很多字段(差不多30个),而发送所有这些字段只是为了更新'启用'或'禁用'驱动程序是有点过分.

你怎么看?

Syn*_*ync 15

这正是HTTP方法的PATCH目的.它用于资源包含许多字段但您只想更新一些字段的情况.

就像你一样PUT,你发送请求myapi/drivers/{id}.但是,与之不同的是PUT,您只需在请求正文中发送要更改的字段.

创建端点myapi/drivers/{id}/enable并不是非常RESTful,因为"enable"本身不能真正称为资源.

有关Spring PATCH端点的示例实现,请参阅此链接.

  • @Synch 你对 `myapi/drivers/{id}/is_enabled` 和 PATCH is_enabled 有何看法?我想告诉我的 API 用户,PATCH 仅设计用于“切换”驱动程序资源上下文中的某些状态。如果他们想更新任何其他字段,只需将其放入“myapi/drivers/{id}”即可。是否有意义? (2认同)
  • 您可以做两件事。您可以创建一个 PATCH 端点并将其限制为仅“状态”。如果客户端尝试更新任何其他内容,您将抛出“406”。在文档中,您需要解释端点仅适用于一种属性。另一种方法是创建一个“子资源”`myapi/drivers/{id}/status`。请参阅[链接](/sf/answers/2628126651/)以获得更详细的答案。 (2认同)