我需要在REST API中使用URI来检索当前登录的用户。通常我在带有ID的资源上使用GET
,但客户端不知道用户的ID。
我找到了以下解决方案:
按用户名
此解决方案使用用户名而不是用户的ID。
示例:
GET /user/{userSlug}
使用自有资源
此解决方案为用户提供了一个资源,为登录用户提供了一个额外资源。
示例:
JIRA REST API:GET /myself
GitHub REST API:GET /user
Stack Exchange REST API:GET /me
带符号链接
此解决方案具有用户ID的符号链接。
示例:
GET /user/current
使用过滤器
此解决方案使用过滤器作为用户名。
示例:
GET /user?username={username}
哪一个最RESTful?有什么优点和缺点?
答案 0 :(得分:3)
我认为REST URI应该唯一标识资源,无论使用userId/email/ssn or username
,无论哪个属性唯一标识系统中的用户。
因此,资源可以是users
(复数/users
),为了使它唯一,我们有以下选择,
如果客户拥有userId
,则资源应类似于
GET - /users/{user-id}
如果客户没有userId
,但是有username
,那么
GET - /users/{username}
因此,只要uri唯一标识用户,我们就可以将上述uri模式用作REST资源。
如果客户端没有userId
,username
或email
或任何其他可以唯一标识您系统中用户的属性,那么我们可以拥有类似以下内容的资源uri,< / p>
GET- /users/current
OR
GET- /users/me
但是,在这种情况下,客户端需要启用特定于用户的令牌或会话,以便服务器可以从传递到标头的活动会话或令牌中找到用户。 请注意,我们应该将此视为最后一个选择。