2

ログインRESTサービスがあります:

POST /sessions

ユーザーのパスワードの有効期限が切れると、次に発生する必要があるのは、クライアントアプリケーションが変更ダイアログウィンドウを表示し、次の方法でユーザーのパスワードを変更することです。

PUT /users/_ID_/password

この意図をクライアントに伝えるための最良の方法は何ですか?POST /sessions最初は帰りたいと思いましたSee Other (303)。しかし、これはGETオンを引き起こし/users/_ID_/passwordます。Multiple Choices (300)クライアントが自動的に取得しない応答を返すか、返さOK (200)れたJSONセッションオブジェクトでタグを返すことができます。

4

2 に答える 2

4

HTTPステータスコードの定義を見て、次のことが最適だと思います。

409競合

リソースの現在の状態と競合しているため、リクエストを完了できませんでした。このコードは、ユーザーが競合を解決してリクエストを再送信できると予想される状況でのみ許可されます。応答本文には、ユーザーが競合の原因を認識するのに十分な情報を含める必要があります。理想的には、応答エンティティには、ユーザーまたはユーザーエージェントが問題を修正するのに十分な情報が含まれます。

ユーザーがセッションを作成する前にパスワードを変更する必要があるため、セッションリソースの現在の状態と競合しています。この応答でURLをパスワードの変更画面に戻すと、クライアントは競合を修正するためにどこに行けばよいかを知ることができます。

于 2012-04-25T10:53:27.187 に答える
1

POST /sessions最初は帰りたいと思いましたSee Other (303)

これは正しくありません。それは本質的に「ここでのセッションではなく、あちらでのセッション」と言っているでしょう。POSTPOST 帯域外情報とハードコードされた動作に依存して、これが当てはまらないことを認識し、代わりに実際にPOSTは新しいパスワードを使用する必要があります。

Multiple Choices (300)クライアントが自動乗車しない応答を返すことができます

しかし、あなたは複数の選択肢を提供していません。

または、OK (200)返されたJSONセッションオブジェクトでタグを返すことができます。

POSTは成功しなかったため、で応答しないでください200

あなたは本当に「正しいREST応答」を求めていますか、それともHTTPで特定の効果を達成する方法を求めていますか?適切なデザインではなく抜け穴を探しているように見えるからです。

401 Unauthorizedリクエストが届き、承認が失敗した場合は、WWW-Authenticateヘッダーを付けて応答します。次に、ユーザーがパスワードを変更する必要があることを示すカスタム認証スキームを使用します。

于 2012-04-25T11:17:10.007 に答える