REST部分更新包含多个字段

时间:2015-11-13 18:45:56

标签: rest resteasy

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

URI:/ users
HTTP方法:POST

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

在第一个POST上创建User对象并返回用户ID

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

URI:/ user / 1 / last-email

HTTP方法:POST

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

让我们假设为了带宽发送,完整的User对象不是此更新调用的选项。

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

修改 我知道正确地执行此操作的正确方法是将更新作为子资源发布到每个字段,但是为了带宽/业务要求,可以说这个更新必须在一次调用中完成。这是正确的方法吗?

编辑2:

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

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

1 个答案:

答案 0 :(得分:1)

使用动词“update-”突然让它感觉它是一个RPC调用。如果要删除此电子邮件,您会怎么做?对此URI执行DELETE操作看起来有点傻。

URI:/ user / 1 / email and 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可用于更新部分资源。例如,当您只需要更新资源的一个字段时, PUTting完整的资源表示可能很麻烦并且利用更多带宽