3

REST API でどのように応答すればよいか知りたいと思っていました。

有効な例:

http://blah.com/api/v1/dosomething/123

上記は有効なリクエストで、現在、HTTP ステータスは 200 で、JSON レスポンスがあります

{
    "dosomething": {
        "status": "OK",
        "results": "123"
    }
}

ここで私の質問は、渡されたパラメーターが有効でない場合 (整数の文字列を期待している)、200 の HTTP 応答を返し、JSON 応答でエラー ステータスを返すか、または HTTP のようなものを渡す必要があるかどうかです。 400 応答 ( Bad request ) を確認し、JSON 応答で要求に関するエラー/問題をリストしますか?

エラーの例:

http://blah.com/api/v1/dosomething/123a

JSON レスポンス:

{
    "dosomething": {
        "status": "ERROR",
        "errors": [
            "Value passed: |123a| must be a integer."
        ]
    }
}

繰り返しますが、私の質問は、渡されたパラメーターが期待したものではないリクエストで 200 または 400 の HTTP ステータスを渡す必要があるかどうかです。または、リクエストが機能しているため、これは常に 200 レスポンスである必要がありますか?

ベストプラクティスと見なされるものは何ですか?

4

3 に答える 3

5

404を使用してください。常に。404. そうしないと、URI とリソースの性質を誤解することになります。http://blah.com/api/v1/dosomething/リソースを識別し、それ123aが単なるパラメーターである場合、他のコードが意味を持つ可能性があります。しかし、そうではありません:http://blah.com/api/v1/dosomething/123リソースを識別します。そのようなリソースが存在しない場合は、 を返し404 Not Foundます。

リソースとの両方を処理する実装の詳細を持っているかもしれませんが、それはリソースではありません。ロイ・フィールディングの論文から:http://blah.com/api/v1/dosomething/123http://blah.com/api/v1/dosomething/123a

「リソースはストレージオブジェクトではありません。リソースは、サーバーがストレージオブジェクトを処理するために使用するメカニズムではありません。リソースは概念的なマッピングです-サーバーは識別子(マッピングを識別する)を受け取り、それを現在のマッピングの実装 (通常は、コレクション固有のディープ ツリー トラバーサルおよび/またはハッシュ テーブルの組み合わせ) を使用して、現在担当しているハンドラーの実装を見つけ、ハンドラーの実装は、要求の内容に基づいて適切なアクションと応答を選択します。 Web インターフェースの背後に隠されているため、Web インターフェースからしかアクセスできないクライアントは、それらの性質を推測することはできません。」

于 2012-06-08T20:34:27.890 に答える
4

著者による編集: 422 は間違った答えです。最初の質問を誤解して、無効な回答をしました。@fumanchu による応答を参照してください: https://stackoverflow.com/a/10955717/441250以下の私の答えは間違っています。

「422 Unprocessable Entity」を使用し、応答の本文に失敗情報を含めることをお勧めします。

422 (Unprocessable Entity) ステータス コードは、サーバー
がリクエスト エンティティのコンテンツ タイプを理解していることを意味し (したがって、
415 (Unsupported Media Type) ステータス コードは不適切です)、
リクエスト エンティティの構文は正しい (したがって 400 (Bad Request) )
ステータス コードが不適切です) が、含まれている命令を処理できませんでした。たとえば、このエラー状態は、XML
要求本文に整形式 (つまり、構文的に正しい) が含まれているが、
意味的に誤った XML 命令が含まれている場合に発生する可能性があります。

エラーを処理するときに「200 Ok」やその他のステータス コードを使用することはできません。

PS ステータス コードのリスト: http://www.iana.org/assignments/http-status-codes/http-status-codes.xml

于 2012-06-08T15:02:18.070 に答える
-2

HTTP 400 は、HTTP 要求自体の問題 (無効な HTTP ヘッダーなど) を示すために使用されます。期待するパラメータを受け取っていませんが、リクエストは有効な HTTP リクエストであるため、200 レスポンスを返しますが、不足しているパラメータの詳細を JSON に含めます。

于 2012-06-08T14:50:32.770 に答える