我正在构建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"
}
系统将返回以下状态代码:
这是一个RESTful API设计吗?可以做得更好吗? HTTP 403是无效API密钥的良好响应吗?
答案 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"
}
状态代码:
答案 1 :(得分:0)
向任何经过身份验证的用户发送任意用户密码哈希值并不是一个好主意。