没有用户登录的REST API更简单,但是它是正确的

时间:2014-01-21 00:12:54

标签: api rest login

我在这里学到了很多关于REST API的知识。我刚刚意识到休息api中不应该包含“登录”。请记住,我不是在谈论API登录,程序员可能会包含对api的请求。我说的是最终用户。例如,没有

https://api.mysite.com/users/login

https://api.mysite.com/users/authenticate

之所以如此,是因为其余的api不应该关心用户的状态,这与其他数据库表或资源中的任何其他记录没有什么不同。构建在api之上的任何人都可以处理他们认为合适的身份验证。因此,在您的用户表中,您可能拥有用户名,密码和hair_color。所以你可以像

那样进行api调用
method: GET
url: https://api.mysite.com/users
http body: {"username":"foo","password":"bar"}

检查“登录”,api不会与此请求区别对待

method: GET
url: https://api.mysite.com/users
http body: {"hair_color":"red"}

他们都会以完全相同的结构返回响应。然后,在其他程序员上确定他们想要对信息做什么,他们可以将其视为登录的身份验证,或者只是检索信息。简而言之,api不服务最终用户登录,或者至少不知道它正在扮演一个角色。因此,如果最终用户的用户名/密码组合无效并且假设程序员正在尝试执行登录流程,则不应返回401。

我的主要问题是:我的假设和逻辑是否正确?

我的第二个问题(非常次要的)是:如果是这样,返回401响应的唯一合适时间是“api user”(其他程序员)认证falis吗?

修改

我使用http basic auth验证api用户,方法是通过标头传递用户名和密码。我的问题仅针对最终用户“登录”。

1 个答案:

答案 0 :(得分:1)

我正在使用rest API购买我的方法有点不同。

我做了什么我将用户名和密码作为标题参数而不是每个请求的数据传递。使用时我每次请求时都会对用户进行身份验证。

当然,由于我的要求,我必须这样做,但我认为这是一个很好的方法,因为你并不担心某个级别的安全部分。

希望这有帮助。