我们是否应始终在HTTP PUT请求中验证url和body中的资源ID?

时间:2013-04-07 08:59:41

标签: api http put

假设我正在更新员工记录

url - /api/employees/10

身体 -

{ 
  id : 10,
  name : xyz
}

我应该验证url中的员工ID是否与响应相同?因为一个员工可以自己点击网址,但通过在PUT主体中发送另一个值来更新另一个员工的数据。

2 个答案:

答案 0 :(得分:0)

如果您必须验证,则可能需要使用POST。 POST不是幂等的,您应该管理更改。

PUT是幂等的,它只是创造了一种资源。这意味着您实际上并不关心id 10是什么以及它是新ID还是现有ID。您只需将id 10替换为您提供的资源即可。当你知道uri应该是什么时,你只能使用PUT。

答案 1 :(得分:0)

是的,如果正文中对象的表示包含自己的键,则应验证它是否与URL中的键匹配。客户端尝试将/api/employees/10上的对象设置为员工#10记录的有效值是错误的,因此您应该检查并将其作为错误报告,就像检查对象具有正确的语法。

我认为在这种情况下返回的最佳错误代码是422 Unprocessable Entity,但我可能错了。

你可以做的另一件事是不要在身体中包含钥匙。但是我发现保持键是有意义的,因为在API的其他部分(可能嵌入在其他对象中)中表示相同类型的对象的方式是一致的。使用XML时尤其如此(虽然看起来你在这里使用JSON)。