REST使用多个字段进行部分更新

REST使用多个字段进行部分更新,rest,resteasy,Rest,Resteasy,假设我有一个rest服务,它允许应用程序创建用户对象 URI:/users HTTP方法:POST { "firstName":"Edward", "lastName": "Nygma", "dob": "01011981", "email": "en@gc.com", "phone": "0123456789" } 在第一次发布时,将创建用户对象并返回用户ID 假设有第二个服务允许用户更新lastName和email字段 URI:/user/1/最后一封电子邮件

假设我有一个rest服务,它允许应用程序创建用户对象

URI:/users
HTTP方法:POST

{
   "firstName":"Edward",
   "lastName": "Nygma",
   "dob": "01011981",
   "email": "en@gc.com",
   "phone": "0123456789"
}
在第一次发布时,将创建用户对象并返回用户ID

假设有第二个服务允许用户更新lastName和email字段

URI:/user/1/最后一封电子邮件

HTTP方法:POST

{
   "lastName": "scissorhands",
   "email": "ec@bc.com"
}
假设为了带宽,发送完整用户对象不是此更新调用的选项

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

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

编辑2:

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

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

使用动词“update-”会突然让人觉得这是一个RPC调用。当你想删除此电子邮件时,你会怎么做?对此URI执行删除操作看起来有点愚蠢

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

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

对于资源的部分更新,请在资源上使用“补丁”动词。这样,您根本不需要新的URI。()

参考:

引述:

什么时候应该使用补丁HTTP方法

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

  • 更多信息,请访问:

我不知道上下文,但有道理。另一方面,如果你有太长的数据,也许你应该考虑压缩数据是SENDI不同意,请使用补丁VBI知道正确的方式来做这个休息将是一个更新的子字段作为一个子资源,但让我们说,为了带宽/业务要求,这个更新必须在一个单一的呼叫。这是正确的方法吗?另外,我删除了“update-”并让HTTPPOST方法指示发生了某些操作。如果您希望以RESTful方式执行,那么它是“不正确的”。请参阅我的最新答案。