PUT / PATCH 和权限的 REST 最佳实践是什么?
What is the REST best practice with PUT / PATCH and permissions?
我正在研究 REST API,但找不到对我的问题的任何答复。这是我的问题:
在我的应用程序中,我有多个用户角色 "Admin" 和 "User"。两者都可以 PUT / PATCH 实体 "Agency",但它们不能修改相同的字段:
管理员可以修改所有字段
用户只能修改 "name" 和 "adress" 字段
所以我和我的同事不知道如何在两个选项之间做出选择:
创建两个端点 PATCH /api/agency/{id} 和 PATCH /api/agency/{id}/restricted :第一个只允许管理员,第二个都允许,但只更新 "name" 和 "adress" ? => 这更简单,但它创建了一条通往世界的新路线
只有一点,如果用户尝试更新未经授权的字段,return 403 响应? => 如果权限规则变得更复杂,但只有一个端点暴露,这在未来可能会很复杂...
非常感谢您的回复,请原谅我的英语!
第二个选项是 REST 方式。 URI 不应指示调用它所需的 permissions/authorisation。如果您想指示允许的 API 调用,那么正确的机制是 HATEOAS,这是 REST 的基本原则。
我不确定我是否理解你关于它在未来会变得复杂的论点。我认为第一个选项为增加复杂性提供了更多机会。如果未来出现新角色怎么办?如果权限变得更细化怎么办?在第一个选项中,您的 URI 将更改。
我正在研究 REST API,但找不到对我的问题的任何答复。这是我的问题:
在我的应用程序中,我有多个用户角色 "Admin" 和 "User"。两者都可以 PUT / PATCH 实体 "Agency",但它们不能修改相同的字段:
管理员可以修改所有字段
用户只能修改 "name" 和 "adress" 字段
所以我和我的同事不知道如何在两个选项之间做出选择:
创建两个端点 PATCH /api/agency/{id} 和 PATCH /api/agency/{id}/restricted :第一个只允许管理员,第二个都允许,但只更新 "name" 和 "adress" ? => 这更简单,但它创建了一条通往世界的新路线
只有一点,如果用户尝试更新未经授权的字段,return 403 响应? => 如果权限规则变得更复杂,但只有一个端点暴露,这在未来可能会很复杂...
非常感谢您的回复,请原谅我的英语!
第二个选项是 REST 方式。 URI 不应指示调用它所需的 permissions/authorisation。如果您想指示允许的 API 调用,那么正确的机制是 HATEOAS,这是 REST 的基本原则。
我不确定我是否理解你关于它在未来会变得复杂的论点。我认为第一个选项为增加复杂性提供了更多机会。如果未来出现新角色怎么办?如果权限变得更细化怎么办?在第一个选项中,您的 URI 将更改。