当前位置: 首页 > 知识库问答 >
问题:

为REST应用程序中当前登录的用户设计URI

石博艺
2023-03-14

我需要REST API中的URI来检索当前登录的用户。通常我在ID为的资源上使用GET,但客户端不知道用户的ID。

我找到了以下解决方案:

>

  • 按用户名

    此解决方案使用用户名而不是用户ID。

    示例:

    • 比特桶REST API:GET /user/{userSlug}

    拥有自己的资源

    此解决方案为用户提供一个资源,为登录用户提供一个附加资源。

    例子:

    >

  • JIRA REST API:GET /myself

    GitHub REST API:GET/user

    堆栈交换REST API:GET/me

    带符号链接

    此解决方案具有用户ID的符号链接。

    示例:

    • ConfluenceREST API:GET /user/current

    带过滤器

    此解决方案对用户名使用筛选器。

    示例

    • JIRA REST API:GET /user? username={username}

    哪一个最安静?利与弊是什么?


  • 共有3个答案

    司空宣
    2023-03-14

    所有这些都是同样RESTful的。REST与URI无关,而是以REST方式使用它们。

    REST是关于客户端导航应用程序状态的。此状态的一部分可能是当前用户。所有URL都可以用来获取应用程序状态的这一部分。

    谷彦君
    2023-03-14

    我认为REST URI应该唯一地标识资源,无论它是使用用户ID/电子邮件/ssn还是用户名,无论哪个属性唯一地标识系统中的用户。

    因此,资源可以是用户(复数),为了使其成为单数,我们有以下选项,

    如果客户端具有用户ID,则资源应该类似于,

    GET - /users/{user-id}
    

    如果客户端没有用户ID,但有用户名,则

    GET - /users/{username}
    

    所以,只要uri唯一标识用户,我们就可以将上述uri模式用作REST资源。

    如果客户端没有userIdusernameemail或任何其他唯一标识系统中用户的属性,那么,我们可以有资源uri之类的,

    GET- /users/current
    

    GET- /users/me
    

    但是,在这种情况下,客户端需要启用用户特定的TOKEN或会话,以便html" target="_blank">服务器可以从活动会话或传入标头的令牌中找到用户。注意,我们应该将此视为最后一个选项。

    端木朝
    2023-03-14

    这取决于你。从REST的角度来看,所有这些方法都非常好。

    根据Roy Thomas Fielding的论文*,任何可以命名的信息都可以是一种资源:

    5.2.1.1资源和资源标识符

    REST中信息的关键抽象是资源。任何可以命名的信息都可以是资源:文档或图像、临时服务(例如“今天的洛杉矶天气”)、其他资源的集合、非虚拟对象(例如人)等等。换句话说,任何可能成为作者超文本引用目标的概念都必须符合资源的定义。资源是到一组实体的概念映射,而不是在任何特定时间点对应于映射的实体。[...]

    当使用/me/user/me/user/我自己/用户/当前和类似物时,您有一个经过身份验证的用户的定位器,它将始终识别经过身份验证的用户的概念,无论哪个用户经过身份验证。

    为了获得更大的灵活性,您还可以支持/用户/{用户名}

    顺便说一句,在Is中也遇到了类似的情况,使用魔法(自我/自我)资源标识符违背了REST原则?

    如果你对REST感兴趣,菲尔丁的论文第5章是必读的

     类似资料:
    • X1.0新增 sp_update_current_user($user) 功能: 更新session里当前登录用户的信息 参数: $user:当前登录用户的最新信息 返回: 无

    • 环境: Spring4座 Spring MVC Spring REST web服务将为客户机公开API,客户机将在UI(ASP.NET)上显示它。响应是在JSON中发送的。 请考虑以下方案: 客户端调用REST api以获取具有ID的用户。dao层获取用户实体并传送给客户端。 考虑到上图,通过Spring REST将用户对象(或响应)发送到客户端的最佳设计方法是什么? > 创建模仿实体对象的对象(

    • 我应该使用RESTful@GET请求来登录我的用户吗?有人能推荐一个更好的方法来做用户登录吗?

    • 接口说明 获取当前登录用户的ID 如需调用,请访问 开发者文档 来查看详细的接口使用说明 该接口仅开放给已获取SDK的开发者 API地址 GET /usercenter/api/userinfo/v1.0.0/getLoginUserId 是否需要登录 是 请求字段说明 参数 类型 请求类型 是否必须 说明 token string header 是 当前登录用户的TOKEN 响应字段说明 参数

    • 接口说明 获取当前登录用户的ID 如需调用,请访问 开发者文档 来查看详细的接口使用说明 该接口仅开放给已获取SDK的开发者 如开启https功能,请求地址的协议应改为https,如:https://www.example.com/wish3dearth/api/access/v1.0.0/getLicenseInfo API地址 GET /usercenter/api/userinfo/v1.0

    • sp_get_current_userid() 功能: 获取当前登录用户ID 参数: 无 返回: int,当前登录的用户id,如果未登录返回0