Ich entwickle eine RESTful-API, in der http://server/thingyapi/thingyblob/1234
die mit dem Ding # 1234 verknüpfte Datei (auch bekannt als "blob") zum Herunterladen zurückgegeben wird. Aber es kann sein , dass der Antrag zu einem Zeitpunkt, wird die Datei nicht in dem Server vorhanden ist, aber auf jeden Fall wird zu einem späteren Zeitpunkt zur Verfügung steht. Es gibt einen Batch-Prozess auf dem Server, der alle Blobs für alle Dinger generiert. Thingy 1234 existiert bereits und seine Daten, außer dem Blob, sind bereits verfügbar. Der Server muss den Blob des Dings 1234 noch nicht generieren.
Ich möchte nicht 404 zurückgeben; Das ist für Dinge, die es nicht gibt. Dies ist ein Ding, das existiert, aber sein Blob wurde noch nicht generiert. Ein bisschen wie ein YouTube-Video, das "verarbeitet". Ich denke auch nicht, dass Umleitungscodes richtig wären. Es gibt keine "andere" URL zum Ausprobieren.
Was ist der richtige HTTP-Statuscode, der in einem solchen Fall zurückgegeben wird?
204
"No Content"? Is zeigt an, dass der Server die Anforderung erfolgreich verarbeitet hat und [zu diesem Zeitpunkt] keinen Inhalt zurückgibt.Antworten:
Ich schlage vor
202 - Accepted
. Aus der Dokumentation :quelle
Das "Problem", so wie es ist, liegt auf der Serverseite: Der Client hat eine wohlgeformte Anfrage gestellt, aber der Server kann sie nicht erfüllen. Ich neige also zu einem "Server Error", 5xx Statuscode.
Quoth RFC 7231 (der aktuelle HTTP-Standard, Hervorhebung hinzugefügt):
Hinweis
Von den verfügbaren Codes würde ich sagen, 503 "Service nicht verfügbar" passte am besten:
Hinweis:
Retry-After
Wert enthalten. Sie können als Wert die geschätzte Abschlusszeit der nächsten Ausführung des Stapelprozesses oder das Ausführungsintervall des Stapelprozesses angeben.Das Definieren Ihres eigenen 5xx-Statuscodes (z. B. 591) hätte, obwohl zulässig , die falsche Semantik:
Clients würden Ihren eigenen Statuscode als 500 "Interner Serverfehler" behandeln , was nicht richtig wäre.
quelle
307 - TEMPORARY REDIRECT
was gut ist, wenn Sie die Client-Seite zwingen möchten, anderswo zu warten, während Ihre Ressource "fertig gemacht" wirdIch denke, dass 423 - Locked für diesen Zweck verwendet werden kann:
quelle
Die URL entspricht nicht einer Anfrage nach einem Ding.
http://server/thingyapi/thingyblob/1234
Der Client fordert einen Dingblob an, der nicht existiert. Wenn es existieren würde, würden Sie es ihnen geben.
404.
quelle
503
gibt, die eine angemessene Antwort finden. Ganz zu schweigen von einigen anderen seltsamen Vorschlägen.Eine weitere Option :
503 - Service Unavailable
.quelle
Da Ihre Ressource nicht bereit ist, wissen Sie wahrscheinlich, wann (ungefähr) sie verfügbar sein wird und wann der Client seine Anfrage erneut versuchen kann. Dies bedeutet, dass Sie möglicherweise den Retry-After-Header verwenden möchten . Dieser Header ist gültig mit 503 (Service nicht verfügbar), was bedeutet, dass die gesamte Site wegen Wartungsarbeiten nicht verfügbar ist, und 3xx (Umleitung) Antworten.
Meiner Meinung nach wäre 302 (gefunden) mit Retry-After-Header die beste Option, aber ich bin nicht sicher, ob das Feld Standort des Antwortheaders gleich der Anforderungs-URL sein kann. Es ist sowieso eine kreisförmige Weiterleitung.
quelle
409 Konflikt
Gibt an, dass die Anforderung aufgrund eines Konflikts in der Anforderung nicht verarbeitet werden konnte, z. B. aufgrund eines Bearbeitungskonflikts bei mehreren Aktualisierungen. [Quelle Wikipedia.]
Dies könnte angemessen sein.
Wenn Sie die Anfrage nicht durch Rücksendung der Daten erfüllen können, ist dies kein Erfolg. Ich denke, 202 schlägt vor, dass der Server die Anfrage in die Warteschlange gestellt hat und sie später erfüllen wird. In Ihrem Fall ist die Anforderung jetzt Daten und ist fehlgeschlagen. Wenn Sie es später erneut versuchen, handelt es sich um eine andere Anforderung.
Ich denke, Sie haben einen Konflikt. Sie möchten die Daten. Aber sie werden bearbeitet / aktualisiert. Dies wäre auch der Fall, wenn Thingy1234 bereits vorhanden wäre und zuvor erfolgreich heruntergeladen worden wäre, jetzt aber bearbeitet wurde und während der Bearbeitung nicht verfügbar war.
quelle
501 - Nicht implementiert
Genau so, wie es sich anhört. Eine Funktion, die noch nicht implementiert ist, aber zukünftige Verfügbarkeit impliziert.
Hier ist ein Link zu einer Zusammenfassung von 5xx Fehlern .
quelle