假设我有一个简单的"员工" REST API中的资源:
{
"employee_id": "1234ABCD",
"name": "John Doe",
"title": "Developer",
"salary": 50000
}
员工和经理都有权阅读整个资源。经理有权更新所有资源的属性,但员工只有权更新name
属性。
API支持通过PATCH或POST或其他任何方式对资源进行部分更新(对问题不重要)。如果员工尝试更新salary
(他没有权限),那么适当的回复是什么?我看到了几个选项,我不确定最合理的方法是什么:
忽略更新中他无权修改并返回200响应的任何字段。 这似乎不太正确,因为API说'#34;好吧,我做到了"事实上,它并没有更新所有被告知更新的内容。
回复403 Forbidden。 这似乎不太正确,因为员工确实有权修改资源,而不是他试图修改的所有字段。
回复400错误请求。 这似乎不太正确,因为请求实际上并不坏,只是"坏"对于这个用户。
我没有考虑过其他一些回应?
在这种情况下,最好的回应是什么?
答案 0 :(得分:0)
1)请记住,员工只是按下按钮"在您的软件中。所以你必须根据适合你的(客户端)软件的业务逻辑来做出决定。例如,您可以返回403 + body,其中包含每个字段的错误列表。
2)您的客户端软件不应该允许员工做事,员工不应该这样做。这意味着,如果员工没有权威,那么员工将永远不会有机会编辑薪水。
所以403是最合乎逻辑的决定,因为从本质上讲它是一个软件错误,而不是用户的错误。
答案 1 :(得分:0)
403 Forbidden
状态代码表示服务器理解请求,授权凭据有效,但不足。情况似乎如此。
这样的更新不应该被允许部分成功,所以最好的回复是403 Forbidden
,并解释原因,如果这不是安全问题。