RESTAPI—客户端应如何向其用户资源的请求URL提供用户ID?

RESTAPI—客户端应如何向其用户资源的请求URL提供用户ID?,rest,web,webserver,token,jwt,Rest,Web,Webserver,Token,Jwt,客户端第一次需要使用用户名/密码登录。为将来的请求返回JWT令牌。令牌将具有用户ID,以便服务器可以从数据库中获取用户的资源 我遇到的问题是客户端需要形成请求URL来更新其资源,比如POST/users/{userid}。如何获取客户端的用户ID?我无法访问存储在httpOnly安全cookie中的JWT令牌。我是否应该以某种方式将用户ID存储在客户端上?这样它就可以使用它作为URL了?我现在明白你的问题了。您担心失去RESTFUL api的一些优势,一个独特的资源定位器 我通常有一组URI,它

客户端第一次需要使用用户名/密码登录。为将来的请求返回JWT令牌。令牌将具有用户ID,以便服务器可以从数据库中获取用户的资源


我遇到的问题是客户端需要形成请求URL来更新其资源,比如POST/users/{userid}。如何获取客户端的用户ID?我无法访问存储在httpOnly安全cookie中的JWT令牌。我是否应该以某种方式将用户ID存储在客户端上?这样它就可以使用它作为URL了?

我现在明白你的问题了。您担心失去RESTFUL api的一些优势,一个独特的资源定位器

我通常有一组URI,它们以指示操作在当前已验证用户上的路径开头

/current/profile
/current/blog_posts
在这种情况下,我将用户从服务器上的请求上下文中拉出来,这可以通过解析JWT令牌获得

当我想对其他用户进行操作时,我会使用标识符

/{{user_id}}/profile
/{{user_id}}/blog_posts
我不确定这是否是严格的RESTFUL,但它确实为我的API用户提供了一个稳定且可发现的URI。我在许多项目和团队中使用了这种模式,没有任何抱怨

如果您真的必须获得用户标识符,您会想到两个想法:

  • 返回用户id以及jwt令牌
  • 进行额外的API调用 从服务器获取用户id,然后将其用于所有 随后的电话

哦,我想到了另一个选择。改变你对用户id的概念,改用用户名(你已经有了用户名)。

如果你负责api,为什么你不能从令牌中获取服务器端的用户信息?我可以这样做,但是如果我想遵循REST,URL应该是什么样子?我最初想发布到/users,但URL不应该专门针对我想要更改的资源吗?也许是POST/用户/自我?