人が霊獣を選択したかどうかを識別するAPIを想像してください。彼らはゼロまたは1つのスピリット動物しか持つことができません。
現在:
/person/{id}/selectedSpiritAnimal
動物が選択されると、http 200が返され、 {selectedAnimal:mole}
ただし、選択がない場合は、http 404が返されます。
これは、HTTPエラーとして、まだスピリット動物を選択していない有効なドメインの懸念を表しているため、スピリット動物を不幸にします。
さらに、ビジネスとして-erm Sprit-Animal-Hampers-R-us-誰かに選択がないときを知りたいので、それらを促すことができます。
ここでより良い応答は何ですか:
HTTP 200および {selectedAnimal:null}
またはさらに明示的に
HTTP 200および {selectedAnimal:null, spiritAnimalSelected: false}
それとも、404を返す方が良いでしょうか?this image has not yet been uploaded
オンラインで画像を表示するときは404によく似ているのでthis person has not selected a spirit animal
、
この質問は重複として提案されていますが、その質問は、URLが表す変更を許可しないようにアプリケーションが構成されている場合に要求される有効なURLに対処します。
一方、ここでは、リソースが存在しないことが意味のあるリソースをどのように表すかを検討しています。つまり、クライアントがURLを要求することは有効であり、応答は、モノの不在を表すリソースを正常に要求したということです。
だから、これは「ビジネスロジック」ではなく、物の不在が意味を持っている状況です(404がまだ正しいと主張している多くの同僚がいるかもしれません)が、それをどのようにマッピングするのかわかりませんスペック
答えを選ぶのは非常に難しい。ここでの会話と職場で進行中の会話について、何度も考えを変えました。
ここで落ち着いているのは、仕様書には4xxはクライアントが間違っているときだと言われているということです。この例では、クライアントはselectedSpiritAnimal URLからの応答を予期するように指示されているため、エラーはありません。
私の同僚の間のコンセンサスは、これは悪いAPI設計の症状であるということです
おそらく/ person / {id}をリクエストし、その人のリンク関係のセットを返す方が良いでしょう...もし/ selectedSpiritAnimalリンクが与えられていない場合(人に選択がない場合)とにかくそれを呼び出すと、404が理にかなっています。または、クライアントがデータのサブセットを要求しない限り、部分応答を実装し、/ person / {id}がより完全なドキュメントを返すようにすること