REST我们应该将空更新视为SUCCESS吗?

时间:2015-03-17 20:26:17

标签: rest http

构建RESTful服务时出于好奇心的问题,如何处理更新中的空差异?

假设我们有一个对象' Person'如下所示:

人{ id:123, 名字:" Foo", 姓氏:" Bar", 年龄:" Bar" }

在更新Person的详细信息时,如果客户端传递空params以更新ID为123的人,那么服务器是否应该将其视为

  1. 成功(因为没有更新)?或
  2. 返回SUCCESS(但表示用户没有要更新的内容)或
  3. 投掷BadRequest
  4. 最喜欢的方式是什么?

2 个答案:

答案 0 :(得分:1)

我会选择422。在执行实际更新之前检查请求。如果没有更新参数,请退出并返回422。

  

422无法处理的实体

     

请求格式正确,但由于语义错误而无法遵循。

找到资源,网址存在,更新成功(虽然它没有做任何事情)并且请求没有格式错误,因此404或400都不对。

您可以使用200 OK,但我个人使用422 because 4xx status codes have an extra indication that the client made a 'mistake'。我认为没有params的更新请求是错误的。

答案 1 :(得分:0)

这取决于您为此人提供空提示的方式。

如果您使用方法PUT的内容,则提供的内容希望完全替换资源状态。所以我认为这不是正确的事情,因为你预计什么都不会发生。在这种情况下,应在状态代码和内容中返回错误。我同意Tim的意见,应该使用错误422(它通常在Web API中使用,如来自Github的那个;-))。但请注意,此代码是WebDAV规范的一部分,而某些REST纯粹主义者更喜欢通用错误400以及有效负载内的详细信息。

如果使用方法PATCH,则它对应于资源状态的部分更新。我认为在这种情况下,不会返回任何错误,但资源状态不会更新。

也许这个链接可以为您提供额外的提示:https://templth.wordpress.com/2014/12/15/designing-a-web-api/

希望它可以帮到你, 亨利