2016-08-19 4 views
3

オブジェクトを受け取り、そのオブジェクトが特定のパラメータで処理される資格があるかどうかを返すレストサービスを実装したいと思います。問題は、オブジェクトが適格であるかどうかに応じて、の応答の構造が非常に異なるかによって、になります。一例として、オブジェクトが処理されるべきである場合には、処理タイプおよび優先順位に関連付けられる。適格でない場合は、その理由が返されます。同じリクエストに対して異なる構造を返す最もきれいな方法はです。私が考えることができる3つのオプションがありますが、追加オプションを自由に追加することができます。同じリクエストに対して異なる構造を返す最もきれいな方法

オプションA:

{ 
    "eligible": bool, 
    "data": { 
     // Data depending on whether elbile or not 
    } 
} 

オプションBが構成されているフィールドとを含むエンベロープとして
リターンデータ:したがって
使用異なったHTTPステータスコードと構造JSON。それは本当に要求の誤りではなく有効な応答であるので、何とか汚れています。

オプションC:
適格である場合とそうでない場合のデータ送信には異なるフィールドを使用し、1つのフィールドをnullにします。

{ 
    "eligible": bool, 
    "dataEligible": { 
     "processingType": "", 
     "priority": 0 
    } 
    "dataNonEligible": { 
     "reason": "", 
    } 
} 

答えて

1

これは422 Status Codeの場合に適していると思います。それは公式のISOではないが、多くの企業(Twitterなど)がそれを使用している。

基本的にはあなたのために起こります。リソースは処理できません。サーバーがリクエストを理解していて、正しい構文であるとします。


オプションCも妥当と見なされるため、必要に応じて最適なものを使用してください。静的型の言語(Javaなど)を使用するコンシューマにとって、同じリクエストのさまざまな形式が大きな問題になるため、Aをおすすめしません。

+0

ありがとうございました。もし私が間違っていれば私は422も正しいと考えました。センドリクエストにセマンティックエラーがあることを意味していませんか? – PKuhn

+0

いいえ、422にはエラーはありませんが、サーバーは何らかの理由でクライアントに知られていないのにそれを処理できません – libik

関連する問題