假设我正在更新员工记录
url - /api/employees/10
身体 -
{
id : 10,
name : xyz
}
我应该验证url中的员工ID是否与响应相同?因为一个员工可以自己点击网址,但通过在PUT主体中发送另一个值来更新另一个员工的数据。
答案 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)。