web-dev-qa-db-ja.com

Ajax呼び出しに対するJSON応答の適切なステータスコード?

私のプロジェクトは、ブラウザーからJSONをAjax呼び出しに返しています。無効な(ただし正常に処理された)データ送信への応答を送り返すための適切なステータスコードは何でしょうか。

たとえば、Ajaxリクエストを行う場合、jQueryには次の2つの特定のコールバックがあります。

success:200/2xxステータスコードが応答とともに配信されたときに発生します。

error:4xx、5xxなどのステータスコードが応答で返されたときに発生します。

ユーザーが新しい「Person」オブジェクトを作成しようとすると、成功時に新しく作成されたオブジェクトのJSON表現が返され、新しいオブジェクトに必要な一意のIDなどへのJavaScriptアクセスが提供されます。これはもちろん送信されます200ステータスコード。

ユーザーが不正な形式または無効なデータ(たとえば、無効/不完全な「名前」フィールド)を送信した場合、JSONを介して検証エラーメッセージを返信します。 (これが悪いことになる理由はわかりません)。

私の質問は:そうすることで、無効なデータを正常に処理したので2ステータスコードを送信する必要がありますか?したがって、私はjQuery successコールバックを使用しますが、エラーを確認するだけです...

または4xxステータスコードを使用する必要があります。おそらく「不良リクエスト」です。送信されたデータが無効であるためです。 (したがって、errorコールバックを使用して、必要なクライアント側通知を実行します)。

29

400 Bad Request応答に同意します。

インスピレーションを得るために、Twitter(広く使用されているJSONサービス)がこれをどのように実行するかを確認できます。 https://dev.Twitter.com/overview/api/response-codes

CodeText説明

  • 200OK-成功しました!
  • 304Not Modified-返す新しいデータはありませんでした。
  • 400Bad Request-リクエストが無効であるか、他の方法で提供できない。付随するエラーメッセージでさらに説明します。認証のない要求は無効と見なされ、この応答が返されます。
  • 401Unauthorized-認証資格情報がないか、正しくありません。他の状況でも返されます(たとえば、API v1エンドポイントへのすべての呼び出しは401を返します)。
  • 403Forbidden-リクエストは理解されましたが、拒否されたか、アクセスが許可されていません。付随するエラーメッセージで理由が説明されます。このコードは、更新の制限によりリクエストが拒否された場合に使用されます。このステータスが返される他の理由は、以下の表の応答コードとともにリストされています。
  • 404Not Found-リクエストされたURIが無効であるか、リクエストされたユーザーなどのリソースが存在しません。また、要求された形式が要求されたメソッドでサポートされていない場合にも返されます。
  • 406Not Acceptable-リクエストで無効な形式が指定された場合に返されます。
  • 410Gone-このリソースはなくなりました。 APIエンドポイントがオフになっていることを示すために使用されます。
  • 420Enhance Your Calmアプリケーションがレート制限されているときに返されます。
  • 422Unprocessable Entity-POST account/update_profile_bannerにアップロードされた画像を処理できない場合に返されます。
  • 429Too Many Requests-リソースのアプリケーションのレート制限を使い果たしたためにリクエストを処理できない場合に返されます。レート制限を参照してください。
  • 500Internal Server Error =何かが壊れています。他のユーザーが同様の問題を抱えている場合に備えて、リクエストの詳細を含めて開発者フォーラムに投稿してください。
  • 502Bad Gateway-Twitterがダウンしているか、アップグレード中です。
  • 503Service Unavailable-Twitterサーバーは稼働していますが、リクエストで過負荷になっています。あとでもう一度試してみてください。
  • 504Gateway Timeout-Twitterサーバーは稼働していますが、スタック内で何らかの障害が発生したため、リクエストを処理できませんでした。あとでもう一度試してみてください。
14
MPV

私はjsonの何が問題だったかについての情報とともに、「400 Bad Request」ヘッダーを返送します。次に、jquerys $ .ajaxError()イベントハンドラーでイベントをキャッチし、返されたエラーメッセージを解析して、エンドユーザーに適切なフィードバックを提供します。

AjaxErrorイベントハンドラの詳細については、 here !を参照してください。

1
Wirde