クライアントのJavaScript SPAとHTTPS上のRESTful APIに取り組んでいます。
特定のトークンをSPAアプリケーション内で以前に有効(GET)にするには、クライアントアプリケーションがパブリックエンドポイント(トークンは不要)を呼び出す必要があります。
APIは次を返します:
{"isValid": "true"}
:{"isValid": "false"}
:{"isValid": "false"}
私が知りたいのですが:
注:この質問はステータスコードに関するものだけではなく、エンドポイントがトークンを使用した認証を必要としないクライアントアプリケーションに情報を提供するパブリックエンドポイントの設計に関するものです。
これは、APIの目的によって異なります。
目的がトークンの検証である場合、成功したリクエストに対して200 OKを返すことは賢明なようです。 4xxエラーは、トークンが無効であることではなく、検証APIのsageが正しくないことを意味します。
トークンがこのAPIへのアクセスを管理する場合、状況は異なります。その場合、トークンが有効かどうかを確認するためのエンドポイントは必要ありません。バックエンドはeveryリクエストでアクセストークンを確認する必要があります。次に、トークンが無効であるためにリクエストが失敗すると、Not Authorizedレスポンスが返されます。
REST APIはHTTPをtransportとして使用します。APIの実際のデータはHTTPレベルではなく、要求と応答の本文で表現されます。 HTTPヘッダーとステータスコードは、メタデータ、認証、および帯域外エラーメッセージングに使用できます。
ここでプログラミング言語に類似しています:API呼び出しはメソッド呼び出しに似ています。応答には戻り値(応答本文)が含まれます。ただし、HTTP応答のステータスが4xxまたは5xxの場合、つまり、メソッドが例外をスローし、正常に返されなかったかのようになります。
したがって、トークンの検証:結果としてtrue/falseを返す必要があります(そのデータを含む本文を含む200応答)、または何も返さないか、例外をスローする必要がありますか(2xx応答と4xx応答)?
あなたはステータスコードを持っています、あなたはそれらを使うべきです:)
私が開発者がAPIを正しく設計していないのは、提案どおりにステータスコードを使用しているはずだからです。
したがって、リクエストに次のものが含まれる場合:
200
;400
;{"errno": X, "error": "<error-message>"}
;401
;JSONボディは必ずしも必要ではないことがわかるので、REST APIはJSONボディだけに依存するのではなく、HTTP(s)プロトコル全体のセマンティクスを使用する必要があります。
ステータスコードについては、 ここ および ここ を参照してください。
@AilurusFulgensが提案 このRFC 。 4xx
ステータスコードでJSON本文を使用する方法を明確にすることは非常に役立ちます。
要約すれば: