限制对资源子集的访问的最佳、REST 方法是什么?



假设我有一个带有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响应,除非您也禁止查询库信息。

相关内容

  • 没有找到相关文章

最新更新