Stellen Sie sich eine API vor, um festzustellen, ob eine Person ihr Geistestier ausgewählt hat. Sie können nur null oder ein Geister-Tier haben.
Zur Zeit:
/person/{id}/selectedSpiritAnimal
Wenn sie ein Tier ausgewählt haben, wird http 200 und zurückgegeben {selectedAnimal:mole}
Wenn sie jedoch keine Auswahl haben, wird http 404 zurückgegeben.
Dies macht mein Geister-Tier unglücklich, da wir ein gültiges Domain-Anliegen - das noch kein Geister-Tier ausgewählt hat - als HTTP-Fehler darstellen.
Außerdem möchten wir als Unternehmen - ähm Sprit-Animal-Hampers-R-us - wissen, wenn jemand keine Auswahl hat, damit wir ihn dazu auffordern können.
Was ist eine bessere Antwort hier:
HTTP 200 und {selectedAnimal:null}
oder noch expliziter
HTTP 200 und {selectedAnimal:null, spiritAnimalSelected: false}
Oder ist es besser, einen 404 zurückzugeben? Da ähnlich wie this image has not yet been uploadedbeim Betrachten eines Bildes online ein 404 this person has not selected a spirit animalsein würde, könnte ein 404 sein
Diese Frage wurde als Duplikat vorgeschlagen, adressiert jedoch eine ansonsten gültige URL, die angefordert wird, wenn die Anwendung so konfiguriert wurde, dass die von dieser URL dargestellte Änderung nicht zulässig ist.
Während ich hier sehe, wie man eine Ressource darstellt, bei der das Fehlen der Ressource von Bedeutung ist. Dh es ist für den Kunden gültig, die URL anzufordern, und die Antwort lautet, dass Sie die Ressource erfolgreich angefordert haben, die das Fehlen einer Sache darstellt.
Das ist also keine "Geschäftslogik", sondern ein Umstand, in dem das Fehlen einer Sache eine Bedeutung hat (es kann sein, dass viele meiner Kollegen argumentieren, dass 404 immer noch korrekt ist), aber ich bin nicht sicher, wie ich das dem zuordnen soll spez.
Es ist sehr schwierig, eine Antwort zu finden. Ich habe es mir im Laufe des Gesprächs hier und auf der Arbeit mehrmals anders überlegt.
Die Sache, die es für mich hier regelt, ist, dass die Spezifikation sagt, dass ein 4xx ist, wenn der Kunde geirrt hat . In diesem Fall wurde der Client angewiesen, eine Antwort von der URL selectedSpiritAnimal zu erwarten, sodass kein Fehler aufgetreten ist.
Meine Kollegen sind sich einig, dass dies ein Symptom für ein schlechtes API-Design ist
Es ist wahrscheinlich besser, wenn wir einfach / person / {id} anfordern und eine Reihe von Verknüpfungsbeziehungen für die Person zurückgeben nenne es trotzdem dann macht ein 404 sinn. Oder Sie implementieren Teilantworten und lassen / person / {id} ein vollständigeres Dokument zurückgeben, sofern der Client keine Teilmenge der Daten anfordert