什么是限制对资源子集的访问的最佳,REST-ful方式?

时间:2018-02-12 21:08:20

标签: rest web-services api-design

我们假设我有3种不同资源的休息服务:/libraries/books/users。用户属于图书馆,图书属于图书馆。用户不应该看到他们不属于的图书馆的书籍。在进行身份验证后,对服务的每个请求都包含一个具有用户ID的令牌。

如果我想获得我可以访问的所有图书,我的请求应该是什么样的?

1)GET /books

  • (用户在auth端点中的Api端点范围)

2)GET /users/:id/libraries => GET /library/:id/books

  • 使用我的用户ID
  • 为用户所属的每个库单独请求
  • 当用户拨打401
  • 时,返回GET /books

3)GET /users/current/libraries => GET /library/:id/books

  • 请勿使用我的用户ID
  • 为用户所属的每个库单独请求
  • 当用户拨打401
  • 时,返回GET /books

1 个答案:

答案 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响应,除非您也禁止查询库信息。