2017-06-11 1 views
1

Welche Antwort (Code + Inhalt) soll ich zurückgeben, wenn meine JsonAPI aufgefordert wird, eine Operation auszuführen, die bereits durchgeführt wurde oder nicht sinnvoll ist?Was sollte die API Response für bereits durchgeführte oder nicht benötigte Operationen sein?

Beispiel: Angenommen, ich möchte eine Artikelveröffentlichung anfordern. Der Artikelentwurf wird durch einen spezifischen Endpunkt aktualisiert (irrelevant hier), und es gibt einen spezifischen Endpunkt für die Veröffentlichung (dessen Antwort wir interessiert sind) 4 verschiedene Szenarien, ich muss herausfinden, welche Art von Antwort gesendet werden soll jedes Mal: ​​

  1. Veröffentlichung beantragt nie hatte, und der Artikel hat alle Publikation vorgeschriebenen Informationen, macht es Sinn, Veröffentlichung zu beantragen, so bin ich der Rückkehr eine 202 akzeptierte Antwort mit dem Artikel Ressource, einschließlich der „Veröffentlichung gebeten, sich bei "Attribut

  2. Eine erfolgreiche publica Der Antrag auf Veröffentlichung wurde bereits gestellt/bestätigt, und niemand hatte Zeit, sie zwischenzeitlich zu überprüfen. Was soll ich zurückgeben?

  3. Eine frühere Veröffentlichung Anfrage wurde von jemandem überprüft und akzeptiert (der Artikel ist jetzt veröffentlicht). Die API erhält erneut eine Veröffentlichungsanfrage zu diesem Artikel, die bereits veröffentlicht wurde, es ergibt keinen Sinn, was soll ich zurückgeben?

  4. Der Artikel hat nicht alle obligatorischen Informationen ausgefüllt, und einige machen eine Publikationsanfrage. Ich muss dem Nutzer mitteilen, dass seine Anfrage aufgrund von Fehlern nicht erteilt wurde. Ich dachte mir, dass ich die Liste der Validierungsfehler zurückgeben könnte. Klingt gerecht ?

Antwort

1

Ihre ersten beiden Kugeln ...

  • Veröffentlichung beantragt nie hatte, und der Artikel hat alle Publikation vorgeschriebenen Informationen, macht es Sinn, Veröffentlichung zu beantragen, so bin ich der Rückkehr eine 202 akzeptierte Antwort mit der Artikelressource, einschließlich des Attributs "Veröffentlichung angefordert bei"
  • Eine erfolgreiche Publikationsveröffentlichungsanfrage wurde bereits gesendet/bestätigt, und niemand hatte Zeit, sie dazwischen zu überprüfen. Was soll ich zurückgeben?

... sind zugänglich 202 Accepted:

202 Akzeptiert: Der Antrag zur Bearbeitung angenommen wurde, aber die Verarbeitung noch nicht abgeschlossen ist. Die Anfrage wird möglicherweise nicht oder nicht unbedingt bearbeitet und kann bei der Verarbeitung nicht zugelassen werden.

Ihre dritte Kugel:

  • Eine frühere Veröffentlichung Anfrage von jemandem und akzeptiert prüft wurde (der Artikel ist jetzt veröffentlicht). Die API erhält erneut eine Veröffentlichungsanfrage zu diesem Artikel, die bereits veröffentlicht wurde, es ergibt keinen Sinn, was soll ich zurückgeben?

Ich würde wahrscheinlich umleiten hier ein 303 verwenden:

303 Andere: Die Antwort auf die Anfrage kann unter einem anderen URI unter Verwendung einer GET-Methode zu finden. Wenn der Client als Antwort auf einen POST (oder PUT/DELETE) empfangen wird, sollte er davon ausgehen, dass der Server die Daten empfangen hat und eine Umleitung mit einer separaten GET-Nachricht ausgeben sollte.

Aber Sie könnten auch eine 308 dauerhafte Umleitung beachten:

308 Permanent Redirect (RFC 7538): Der Antrag und alle zukünftigen Anforderungen sollten unter Verwendung eines anderen URI wiederholt werden. 307 und 308 parallelisieren das Verhalten von 302 und 301, erlauben jedoch keine Änderung der HTTP-Methode. So kann beispielsweise das Senden eines Formulars an eine permanent umgeleitete Ressource problemlos fortgesetzt werden.

Aber ich würde zuneigen der 303.

Und Ihre letzte Kugel:

  • Der Artikel hat nicht alle obligatorischen Informationen gefüllt und someones machen eine Veröffentlichung Anfrage. Ich muss dem Nutzer mitteilen, dass seine Anfrage aufgrund von Fehlern nicht erteilt wurde. Ich dachte mir, dass ich die Liste der Validierungsfehler zurückgeben könnte. Klingt gerecht ?

Dies ist ein Standard "schlechte Client-Anforderung" (4xx) mit Fehlern:

400 Bad Request: Der Server kann aufgrund eines offensichtlichen Client-Fehler nicht oder verarbeitet die Anforderung nicht (zB , ungültige Syntax der Anfragesprache, zu große Größe, ungültiges Anforderungsnachrichten-Framing oder irreführendes Anforderungs-Routing).

Stellen Sie sicher, dass Sie die Implementierungsdetails Ihres Diensts nicht verfügbar machen, wenn Sie die Fehler in Ihrer Antwort aufzählen.

Denken Sie daran:

  • 2xx Antworten zeigen Erfolg
  • 3xx Antworten zeigen Umleitung
  • 4xx Antworten zeigen ein Versagen seitens des Kunden
  • 5xx Antworten einen Fehler seitens der Anwendung anzeigen die Anfrage Wartung

Quelle: List of HTTP status codes

Verwandte Themen