假设我有一个带有3种不同资源的REST服务:/libraries
,/books
和/users
。用户属于库,书籍属于库。用户应该无法从他们不属于的图书馆中看到书籍。认证后,对服务的每个请求都包含一个带有用户ID的令牌。
如果我想获得所有可以访问的书,我的请求应该是什么样的?
1(GET /books
- (auth endpoint中用户的API端点范围(
2( GET /users/:id/libraries
=> GET /library/:id/books
- 使用我的用户ID
- 对用户属于 的每个库做一个单独的请求
- 用户调用
GET /books
时返回
401
3( GET /users/current/libraries
=> GET /library/:id/books
- 请勿使用我的用户ID
- 对用户属于 的每个库做一个单独的请求
- 用户调用
GET /books
时返回
401
好吧,这个替代方案怎么样?
GET /users/{id}/libraries/all/books
它将为特定用户(/users/{id}
(的所有库(/libraries/all
(提供所有书籍(/books
(,这或多或少是您的要求。
有些人更喜欢捷径特定资源标识all
(或类似(,在这种情况下,呼叫看起来像这样(删除其余指南(:
GET /users/{id}/libraries/books
关于401(或可能是403(的情况:如果{id}
是与您的授权令牌相关的情况,则只需提供请求的信息即可。如果ID不同,则提供401(或可能是403(,而GET /users/{id}/libraries
这样的呼叫仍会导致正常的200 OK响应,除非您也禁止查询库信息。