我们假设我有3种不同资源的休息服务:/libraries
,/books
和/users
。用户属于图书馆,图书属于图书馆。用户不应该看到他们不属于的图书馆的书籍。在进行身份验证后,对服务的每个请求都包含一个具有用户ID的令牌。
如果我想获得我可以访问的所有图书,我的请求应该是什么样的?
1)GET /books
2)GET /users/:id/libraries
=> GET /library/:id/books
401
GET /books
3)GET /users/current/libraries
=> GET /library/:id/books
401
GET /books
答案 0 :(得分:0)
嗯,这个替代方案怎么样?
GET /users/{id}/libraries/all/books
它会为特定用户(/books
)的所有图书馆(/libraries/all
)提供所有图书(/users/{id}
),这或多或少与您的要求完全相符。
有些人更喜欢快捷方式特定资源标识all
(或类似),在这种情况下,调用看起来像这样(脱离REST准则):
GET /users/{id}/libraries/books
关于401(或可能是403)情况:如果{id}
是与您的授权令牌相关的那个,您只需提供所请求的信息。如果ID不同,则传递401(或可能是403),而GET /users/{id}/libraries
之类的呼叫仍然会产生正常的200 OK响应,除非您也禁止查询库信息。