【发布时间】:2022-01-06 08:59:19
【问题描述】:
我正在构建一个 API,用户和管理员可以在其中与相同的数据进行交互,但有不同的需求。 如果用户具有“管理员”角色,他也可以访问管理面板。
例如,让我们看看我们有一个像 Badges 这样的资源。徽章只是您在应用中完成某些操作时的奖励。
GET http://localhost/api/v1/badges
经过身份验证的用户可以调用此端点,它会返回所有徽章的列表(无论是否有徽章)以及进度详细信息。
GET http://localhost/api/v1/badges?user_id=2
使用user_id 参数,我们可以看到其他用户的这些详细信息(如果他允许的话)。
但从管理员范围内,我只需要查看所有徽章的列表,没有成就详细信息(CRUD 操作)。
所以我有两个选择:
- 创建“管理员”端点:
GET http://localhost/api/v1/admin/badges。 - 添加自定义标题“X-App-Scope”以识别我是管理员还是用户。
我不喜欢第二个,因为我认为我会在同一个端点有很多 if 语句和行为,具体取决于范围。
因为我有很多这样的用例,所以我想确保我的 API 架构能够很好地处理用户/管理员的需求。
你们有什么想法/例子来管理这样的事情吗?
谢谢!
【问题讨论】:
-
如果你有 X-App-Scope 为什么在 url 中有相同的信息?
-
这是 2 个不同的想法:url 中的“admin”表示列出徽章的第二个端点,而 X-App-Scope 可用于同一端点 (/v1/badges) 以区分我是否想要简单的徽章列表或包含用户成就详细信息的列表
-
这是一个公共 API 吗?用户很可能需要经过身份验证才能访问端点,检查经过身份验证的用户是否是管理员,提供不同的结果
-
我不能这样做,因为用户也可以是管理员,并且在这两种情况下都使用此端点。
-
对没有成就的版本使用
http://localhost/api/v1/badges/simple?
标签: laravel api rest restful-url