我有一个角度应用程序。当用户登录时,应用程序将用户名/令牌对发送到.NET后端上的API路由。
如果用户名/令牌对不存在,.NET应用程序会将其添加到数据库并返回Created()
响应。
但是,如果 对存在(并且可能会存在),则不需要任何操作,也不需要Created()
。在这种情况下,我应该回复什么样的反应?
替代解决方案:我可以针对API运行两个请求,一个GET
以查看用户/ tokan对是否存在,然后是POST
请求(如果不存在),但不是高效,需要嵌套的承诺,通常不那么漂亮。反正可能更好吗?
答案 0 :(得分:2)
您想要的响应将是您作为API设计者的选择。只要响应不是错误响应,我可能会做一个Ok()响应或NoContent()。
答案 1 :(得分:1)
按照我之前的回答(现在删除),但我想我会分享如何处理这种情况。
如果您想要始终开始新的用户会话,则应发送POST
。如果可以启动新会话,则服务器将生成201 created
。如果使用重复令牌存在约束,则取决于您。这意味着,当前端知道它将成为新会话时,前端仅发送POST
。
如果您有用户/令牌对,并且可以用于标识服务器上的用户会话资源。您只需PATCH
即可继续会话。如果补丁成功,服务器可以发送204
。
如果会话不再有效。服务器应该产生401 unauthorized
响应。
这些请求产生403 forbidden
,因为前端无法修改用户会话。
不要将用户注册和用户登录与用户会话混淆。这些是具有不同URL端点的不同RESTfull资源。