如何处理 REST 更新中 PUT 正文和 URI 之间的不匹配?

How to handle a mismatch between the PUT body and URI in a REST update?

如果 PUT 请求发送到 URI,例如 http://foo.com/api/employees/123,其中“123”是员工 ID,但消息正文如下所示:

{
  "id" : 444,
  "firstname" : "John",
  "lastname" : "Doe"
}

服务应该如何处理?

是希望将员工“123”更新为员工“444”(有效地移动资源)还是应该return一个 HTTP 错误响应(如果是,应该是什么?)

您可以根据要对 put 资源执行的操作来使用此 ID。通常,资源 uri 中的 id 用于从持久性数据库中按 id 获取项目。你可以通过 uri id 获取项目然后你可以将这个 id 设置到正文中,但这会很奇怪!

我认为应该使用 URI 中的 ID,并且消息正文中没有 ID。您在这里有重复的提示。

您在 PUT 方法中提供的内容包含您要更新的数据,而不是标识符的情况。

以下是我将如何调整你的电话:

PUT http://foo.com/api/employees/123
(some headers like Content-Type: application/json)
{
  "firstname" : "John",
  "lastname" : "Doe"
}

也许这个 link 可以帮助你:http://templth.wordpress.com/2014/12/15/designing-a-web-api/

希望对您有所帮助。 蒂埃里