如何设计URL以从REST API中返回当前用户的数据?

ADr*_*ger 8 rest restful-authentication

我有一个基于REST的服务,用户可以返回自己的书籍列表(这是一个私人列表).

该URL目前是 ../api/users/{userId}/books

每次调用时,他们还将提供先前提供的身份验证令牌.

我的问题是:

  1. 提供userIdURL冗余?当我们通过每个呼叫获得令牌时,我们可以找出正在执行呼叫的用户并返回他们的书籍列表.这userId不是严格要求的.

  2. 删除userId破解REST原则/users/books/看起来应该返回所有用户的所有书籍?

  3. 我是否应该咬住子弹并根据令牌对它们进行身份验证,然后检查令牌是否属于同一个userId

cas*_*lin 9

简短的回答

您可以me在URL中使用以引用当前用户.通过这种方法,你将有一个网址为:/users/me/books.

每个问题的答案

提供userIdURL冗余?当我们通过每个呼叫获得令牌时,我们可以找出正在执行呼叫的用户并返回他们的书籍列表.这userId不是严格要求的.

你可以考虑这样做:/users/me/books.其中me当前用户.它更容易理解/users/books,可以用来返回用户的所有书籍.

为了一些灵活性,/users/me/books你可以支持/users/{userId}/books.

URL /users/me可用于从当前用户返回数据.许多API,例如StackExchange,Facebook,SpotifyGoogle+都采用这种方法.

删除userId破解REST原则/users/books/看起来应该返回所有用户的所有书籍?

我认为它不会破坏任何REST原则,但我认为您的资源不会被正确地限制.正如我上面回答的那样,我会使用/users/me/books并支持/users/{userId}/books.

我是否应该咬住子弹并根据令牌对它们进行身份验证,然后检查令牌是否属于同一个userId

当使用userIdURL来请求来自用户的私人信息时,检查令牌是否属于userIdURL中包含的用户是没有害处的.