【发布时间】:2019-11-05 14:10:28
【问题描述】:
我有一个 API 设计/版本控制难题。
假设我有一个端点/api/customers,它获取所有客户(忽略分页)。但是有一个转折点:如果一个普通的user 访问这个端点,他们只会得到该用户创建的客户,而没有其他人(我可以检查访问令牌和子字段来确定谁发送了请求)。其他用例:如果admin 访问此端点,他们应该获得所有客户,无论是谁获得的。
现在我的问题是从 API 设计的角度来看:在 API 控制器本身内进行if/else 角色检查是否更好,以确定我是返回所有(管理员)客户还是特定(用户)客户,或者我应该区分在用户和管理员的端点之间? IE。所有客户的管理员唯一端点是/api/admin/customers,普通用户仍然可以访问他们的/api/customers?
【问题讨论】:
-
后者,如指定一个仅限管理员的端点,在我看来是要走的路
-
@binjamin 感谢您的评论,您介意告诉我您的理由吗?
-
您使用什么语言来构建您的 API?
-
Java 和 Spring,但这个问题应该并且与语言/框架无关。
-
当您希望保护管理资源免受“用户”访问时,您不会从拥有两个资源中获得任何收益,只需将“if”拆分为两个不同的方法。另一方面,拥有一个单独的“我的用户”端点使管理员可以将他们创建的用户与“所有”用户分开查看。
标签: rest api design-patterns hateoas