繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM