価値があることについては、これを別の方法で行います。呼び出しが成功すると、JSONオブジェクトのみが含まれます。trueを示す成功フィールドと、JSONオブジェクトを含むペイロードフィールドを含む、より高いレベルのJSONオブジェクトは必要ありません。ヘッダーのHTTPステータスに対して、200または200の範囲で適切なものを含む適切なJSONオブジェクトを返すだけです。
ただし、エラー(400ファミリーの何か)がある場合は、整形式のJSONエラーオブジェクトを返します。たとえば、クライアントがメールアドレスと電話番号を使用してユーザーをPOSTし、これらの1つが不正な形式である(つまり、基になるデータベースに挿入できない)場合、次のような結果を返します。
{
"description" : "Validation Failed"
"errors" : [ {
"field" : "phoneNumber",
"message" : "Invalid phone number."
} ],
}
ここで重要なのは、「フィールド」プロパティは、検証できなかったJSONフィールドと正確に一致する必要があるということです。これにより、クライアントはリクエストの何が問題であったかを正確に知ることができます。また、「メッセージ」はリクエストのロケールにあります。「emailAddress」と「phoneNumber」の両方が無効な場合、「errors」配列には両方のエントリが含まれます。409(競合)JSON応答本文は次のようになります。
{
"description" : "Already Exists"
"errors" : [ {
"field" : "phoneNumber",
"message" : "Phone number already exists for another user."
} ],
}
HTTPステータスコードとこのJSONを使用すると、クライアントは決定論的な方法でエラーに応答するために必要なすべてを備え、HTTPステータスコードを完全に置き換えようとする新しいエラー標準を作成しません。これらは400エラーの範囲でのみ発生することに注意してください。200の範囲にあるものについては、適切なものを返すだけです。私にとっては、HALのようなJSONオブジェクトであることがよくありますが、ここでは特に問題になりません。
追加について考えたのは、 "errors"配列のエントリまたはJSONオブジェクト自体のルートにある数値エラーコードです。しかし、今のところ必要はありません。