【问题标题】:REST Partial update with several fields具有多个字段的 REST 部分更新
【发布时间】:2016-02-15 10:47:40
【问题描述】:

假设我有一个允许应用程序创建用户对象的休息服务

URI:/用户
HTTP方法:POST

{
   "firstName":"Edward",
   "lastName": "Nygma",
   "dob": "01011981",
   "email": "en@gc.com",
   "phone": "0123456789"
}

在第一次 POST 时创建用户对象并返回用户 ID

假设有第二项服务允许用户更新姓氏和电子邮件字段。

URI:/user/1/last-email

HTTP 方法:POST

{
   "lastName": "scissorhands",
   "email": "ec@bc.com"
}

假设为了带宽,发送完整的用户对象不是这个更新调用的选项。

这是进行涉及多个字段的部分更新的正确方法吗?也不可能使用 PATCH。

编辑: 我知道正确的做法是将每个字段的更新作为子资源发布,但为了带宽/业务需求,必须在一次调用中完成此更新。这是正确的做法吗?

编辑 2:

我们的实现不支持 HTTP PATCH 方法,因此我在最初的问题中指出使用补丁是不可能的。话虽如此,也许我应该重新提出这个问题。

由于系统/业务需求阻止我们在 RESTful 庄园中正确实现这一点。处理这种情况的最佳方法是什么。

【问题讨论】:

  • 我不知道上下文,但有道理。另一方面,如果您的数据太长,也许您应该考虑压缩要发送的数据
  • 我不同意,请使用 PATCH 动词

标签: rest resteasy


【解决方案1】:

突然加上动词“update-”,感觉就像是一个 RPC 调用。当您想删除此电子邮件时,您会怎么做?对这个 URI 执行 DELETE 操作看起来有点傻。

URI:/user/1/email 和 URI: user/1/lastname 更有意义,因为 EMAIL 只是一个子资源,您可以在这些资源上使用所有动词。

是的,如果您想更新 2 个资源而不是 1 个,这将需要 2 个调用。

对于资源的部分更新,请在资源上使用“PATCH”动词。这样,您根本不需要新的 URI。 (Best practice for partial updates in a RESTful service)

参考:http://restcookbook.com/HTTP%20Methods/patch/

引用:

什么时候应该使用 PATCH HTTP 方法?

HTTP 方法 PATCH 可用于更新部分资源。例如,当您只需要更新资源的一个字段时,PUT 完整的资源表示可能会很麻烦并且会占用更多带宽

【讨论】:

  • 我知道正确的做法是将每个字段的更新作为子资源发布,但为了带宽/业务需求,必须在其中完成此更新一个电话。这是正确的做法吗?
  • 另外,我删除了“update-”,并让http post方法表明正在发生一些动作
  • 如果你想做RESTful,那么它是“不正确的”。请参阅我的更新答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-29
  • 2013-03-31
  • 2019-09-15
  • 2019-07-26
  • 2021-04-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多