2015-04-07 155 views
0

我有一个REST API,我想创建一个方法来接受用户名和密码,确保它们是有效的并返回用户资源。用于验证凭据的REST方法

这不是验证REST API的用户。用户是独立系统的一部分,并由API管理它们。

什么方法和URL适合这个?

GET似乎不是一个好主意,因为它会将密码放在查询字符串中。此外,此方法可能会更新用户的最后登录日期,所以它不是幂等的。

我可以使用PUT,但我用它来更新用户。所以我可以把它放到一个不同的URL上,但是这个URL是什么?类似/user/credentials可能意味着您正在更新凭据,而不是验证它们。

回答

2

我通常处理这个问题的方法是通过执行一个POST请求,例如, /user/login或简单地/login

您基本上正在创建登录尝试,因此POST听起来很合理,就像您可以使用POST a search request一样。

通过这样做,您允许自己将登录凭据放在POST正文中,所以它们不会在URL中公开。而且你没有更新用户资源,所以你不必使用PUT。

POST http://example.com/login HTTP/1.1 
{ 
    "username": "Jon Skeet", 
    "password": "SOiscool" 
} 
+0

好的,我可以购买“登录”作为名词。 –

1

您是POST荷兰国际集团用户需要一个“用户资源”使用“独立系统”的事实。 POST是唯一的动词是appropriate when a method isn't idempotent

如果“独立系统”是用户将永远登录的唯一可以想象的系统,我会选择一个简单的URL,如/user/login。否则,我会为“用户与'单独系统'的关系”添加一个路径段,如/user/theSeperateSystem/login