RESTful API检查用户是否具有有效订阅

时间:2013-01-24 23:50:11

标签: http rest

我正在构建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密钥的良好响应吗?

2 个答案:

答案 0 :(得分:3)

我个人会基于用户的一切。用户有订阅。

我建议不要在GET请求中传递密码。没有人喜欢在他们的历史中存储明文密码。您应该执行POST /登录并设置适当的会话,以便每次请求都不需要进行身份验证。如果您希望它完全无状态,请使用基本的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请求

答案 1 :(得分:0)

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