我有一个REST API,我想创建一个接受用户名和密码的方法,确保它们有效,并返回用户资源。
这不是为了验证REST API的用户。用户是单独系统的一部分,API管理它们。
哪种方法和网址适用于此?
GET 似乎不是一个好主意,因为它会将密码放在查询字符串中。此外,此方法可能会更新用户的上次登录日期,因此它不是幂等的。
我可以使用 PUT ,但我用它来更新用户。所以我可以PUT到一个不同的URL,但是这个适当的URL是什么?类似/user/credentials
之类的内容可能意味着您正在更新凭据,而不是验证凭据。
答案 0 :(得分: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"
}
答案 1 :(得分:1)
您 POST 这样一个事实,即用户需要“用户资源”来使用“单独的系统”。 POST 是唯一的appropriate when a method isn't idempotent动词。
如果“单独的系统”是用户将登录的唯一可想象的系统,我会选择一个简单的网址,如/user/login
。否则,我会为/user/theSeperateSystem/login
添加“用户与'单独系统'的关系”的路径段。