0

私はRESTfulAPIを構築しています。その一部は、ユーザーが有効なサブスクリプションを持っているかどうかをチェックします。私はこのようにすることを考えています:

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。
  • ユーザーのAPIキーが無効な場合は403
  • 無効なユーザーの場合は404
  • クライアントがあまりにも多くのAPIリクエストを行った場合は429

これはRESTfulAPIデザインですか?もっと上手くできますか?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
  • クライアントがあまりにも多くの API リクエストを行った場合は 429
于 2013-01-25T00:05:03.050 に答える
0

任意のユーザーのパスワード ハッシュを任意の認証済みユーザーに送信することは、実際には良い考えではありません。

于 2014-02-18T11:52:32.203 に答える