0

我正在构建一个 RESTful API,其中一部分将检查用户是否有有效的订阅。我正在考虑这样做:

GET https://api.example.org/subscriptions/me?username=johndoe&password=abc123&apikey=somekey HTTP/1.1
Host: api.example.org
Accept: application/json

HTTP/1.1 200 OK
Content-Type: application/json

{
    "username": "johndoe",
    "id": 5152,
    "valid": true,
    "valid_until": "2013-01-01 00:00:00",
    "account_level": "basic"
}

系统将返回以下状态代码:

  • 如果用户有有效的订阅,则为 200
  • 如果省略了用户名或密码参数,则为 400
  • 如果用户凭据无效,则为 401
  • 如果用户没有有效的订阅,则为 402。
  • 403 如果用户的 API 密钥无效
  • 404 如果是无效用户
  • 429 如果客户端发出了太多的 API 请求

这是 RESTful API 设计吗?能不能做得更好?HTTP 403 是对无效 API 密钥的良好响应吗?

4

2 回答 2

3

我个人会以用户为基础。用户有订阅。

我建议不要在 GET 请求中传递密码。没有人喜欢将明文密码存储在他们的历史记录中。您应该执行 POST /login 并设置适当的会话,这样就不需要对每个请求进行身份验证。如果您希望它完全无状态,请使用基本 HTTP 身份验证。

要求:

GET /users/5152
Accept: application/json
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

回复正文:

{
    "username": "johndoe",
    "password": "9b71d224bd62f3785d96d46ad3ea3d73319bfbc2890c"
    "id": 5152,
    "valid": true,
    "valid_until": "2013-01-01 00:00:00",
    "account_level": "basic"
} 

状态码:

  • 如果用户存在,则为 200。检查下标状态客户端。
  • 如果省略了用户名或密码参数,则为 401
  • 如果用户凭据无效,则为 401
  • --- 如果用户没有有效的订阅。客户端错误
  • 404如果用户不存在
  • 429 如果客户端发出了太多的 API 请求
于 2013-01-25T00:05:03.050 回答
0

向任何经过身份验证的用户发送任意用户密码哈希并不是一个好主意。

于 2014-02-18T11:52:32.203 回答