1

假设我正在更新员工记录

网址 -/api/employees/10

身体 -

{ 
  id : 10,
  name : xyz
}

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

4

2 回答 2

0

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

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

您可以做的另一件事是根本不将密钥包含在正文中。但是,我发现保留密钥对于与 API 的其他部分(可能嵌入在其他对象中)中表示相同类型对象的方式保持一致是有意义的。在使用 XML 时尤其如此(尽管看起来您在这里使用的是 JSON)。

于 2013-05-11T11:08:20.597 回答
0

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

PUT 是幂等的,它只是创建一个资源。这意味着您实际上并不关心 id 10 是什么以及它是新的 id 还是现有的 id。您只需将 id 10 替换为您提供的资源。只有在知道 uri 应该是什么时才使用 PUT。

于 2013-05-11T10:22:56.800 回答