【问题标题】:Rest api - update single field of resourceRest api - 更新资源的单个字段
【发布时间】:2018-06-03 22:43:17
【问题描述】:

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

myapi/drivers/{id}

{body of put method}

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

这样创建新端点是个好主意吗?

PUT myapi/drivers/{id}/enable/false

还是使用现有端点更好?使用现有端点的一个问题是驱动程序有很多字段(几乎 30 个)并且发送所有这些字段只是为了仅更新“启用”或“禁用”驱动程序是多余的。

你怎么看?

【问题讨论】:

  • myapi/drivers/{id}?enable=false URL参数怎么样
  • 您可以创建新端点 myapi/drivers/{id}/enable/myapi/drivers/{id}/disable/ ,这对于使用您的 API 的人来说有时更容易。
  • 这是基于意见的,但我可能会做类似于@Nirekin 建议的事情。

标签: java spring rest http


【解决方案1】:

这正是 HTTP 方法 PATCH 的用途。它用于资源有很多字段但您只想更新几个字段的情况。

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

创建像myapi/drivers/{id}/enable 这样的端点并不是很 RESTful,因为“启用”本身并不能真正称为资源。

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

【讨论】:

  • 同意!很多人认为GETPOST 只是......加上一个
  • @Synch 您如何看待myapi/drivers/{id}/is_enabled 和 PATCH is_enabled?我想与我的 API 用户沟通,PATCH 仅用于在驱动程序资源的上下文中“切换”某些状态。如果他们想更新任何其他字段,只需 PUT 到myapi/drivers/{id}。有意义吗?
  • 您可以做两件事。您可以创建一个 PATCH 端点并将其限制为仅status。如果客户端尝试更新任何其他内容,则抛出 406。在文档中,您需要解释端点仅适用于一个属性。另一种方法是创建一个“子资源”myapi/drivers/{id}/status。有关更详细的答案,请参阅 link
【解决方案2】:

使用 PATCH Http 方法更新一个字段

PATCH myapi/drivers/{id}/enable

【讨论】:

  • 不好的设计。 RFC 提到补丁应该包含一个请求正文。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多