[英]REST API: Should we use PUT or DELETE to update resource partially?
[英]Should we always validate resource id in url and body in HTTP PUT request?
假设我正在更新员工记录
网址- /api/employees/10
身体 -
{
id : 10,
name : xyz
}
我应该验证url中的雇员ID是否与响应中的相同? 因为一个员工可以自己打URL,但可以通过在PUT正文中发送另一个值来更新另一位员工的数据。
如果必须验证,则可能要使用POST。 POST不是幂等的,应该由您来管理更改。
PUT是幂等的,它只是创建资源。 这意味着您实际上并不在乎ID 10是什么,无论它是新ID还是现有ID。 您只需将ID 10替换为您提供的资源即可。 仅当您知道uri应该是什么时,才使用PUT。
是的,如果对象在主体中的表示形式包含其自己的密钥,则应验证其是否与URL中的密钥匹配。 客户端尝试在/api/employees/10
处放置一个对象而不是10号员工记录的有效值是错误的,因此您应该检查该对象并将其报告为错误,就像检查该对象一样。该对象具有正确的语法。
我相信在这种情况下返回的最佳错误代码是422 Unprocessable Entity ,但是我对此可能是错误的。
相反,您可以做的另一件事是根本不包含密钥。 但是,我发现保持键的合理性与API其他部分(可能嵌入其他对象中)表示同一类型对象的方式保持一致。 使用XML时尤其如此(尽管看起来您在这里使用JSON)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.