2017-03-20 2 views
1

Wir verwenden den JSON-API-Standard, um unsere API zu entwickeln, und wir sind über ein Problem gestolpert, das keine offensichtliche Lösung nach dem Standard hat, wie es scheint.JSON API: Erfolg Nachricht ohne Ressource

Usecase ist die folgende:

Es ist eine API-Endpunkt, den Sie Mailing-Listen abonnieren. Ein möglicher Ablauf ist, dass der Benutzer mit PENDING hinzugefügt wird, die bedeutet, dass der Benutzer E-Mail zur Bestätigung erhalten und aktivieren wird.

Wenn dies der Fall ist, möchten wir dem Frontend eine Nachricht zurückgeben, die dem Benutzer angezeigt werden kann, und ihn auffordern, auf den Link zu klicken.

Aus meiner Sicht ist dies nicht wirklich ein Fehlerzustand, eher eine Follow-up-Metainformation. Das bedeutet also, dass es nicht konzeptionell ist, es in die Fehlermeldungen zu schreiben. Auch wenn wir es in die Fehlermeldungen schreiben, muss das Frontend irgendwie von den "echten Fehlern" unterscheiden (Statuscodes haben eine so niedrige Auflösung, dass Kollisionen unvermeidlich erscheinen).

Wir geben jedoch keine Ressource zurück, sodass wir sie nicht als Metainformationen zur Ressource hinzufügen können. Im Moment habe ich keine Ahnung, wo ich diese Informationen veröffentlichen soll.

Eine mögliche Lösung wäre es, irgendeine Art von Response-Ressource zu definieren und sie dort hineinzusetzen, aber das scheint nur wie eine Dose Würmer.

Irgendwelche Ideen? Die Eingabe würde sehr geschätzt

Antwort

1

Wenn das Ergebnis des Aufrufs ist, dass der Benutzer der Mailingliste hinzugefügt wird, geben Sie 200 OK zurück. Wenn das Ergebnis des Anrufs ist, dass der Benutzer sich per E-Mail anmelden muss, geben Sie 202 Accepted zurück. Geben Sie ein Antwortobjekt mit der 202 zurück, das die relevanten Informationen enthält.

Von der Spezifikation:

Der 202 (angenommen) Statuscode gibt an, dass die Anforderung zur Bearbeitung angenommen wurde, aber die Verarbeitung noch nicht abgeschlossen ist. Die Anfrage könnte oder könnte möglicherweise nicht umgesetzt werden, da sie möglicherweise nicht erlaubt wird, wenn die Verarbeitung tatsächlich stattfindet. Es gibt keine Einrichtung in HTTP, um einen Statuscode von einer asynchronen Operation erneut zu senden.

Die 202 Antwort ist absichtlich unverbindlich. Sein Zweck ist einem Server zu erlauben, eine Anfrage für einen anderen Prozess (vielleicht ein Batch-orientierten Prozess, der nur einmal pro Tag ausgeführt wird) ohne Anforderung, dass die Benutzer-Agent-Verbindung zum Server persistent bis der Prozess abgeschlossen ist . Die Repräsentation, die mit dieser Antwort gesendet wird, sollte den aktuellen Status der Anfrage beschreiben und auf (oder einbetten) einen Statusmonitor zeigen, der dem Benutzer eine Schätzung liefern kann, wann die Anfrage erfüllt wird.

+0

Ich habe gerade gesehen, dass pro Spezifikation Sie in der Lage, ein Response-Objekt ohne eine Ressource, aber mit einer Top-Level-Kategorie _meta. Ist das, was Sie für die Erfolgsmeldung ermutigen würden oder haben Sie eine andere Option? – shokora

+1

Ich würde 200/204 für Anfragen zurückgeben, die keine Folge-E-Mail haben (200, wenn Sie eine Nachricht haben möchten, 204, wenn Sie nicht möchten). Für Anfragen, die eine Folge-E-Mail erfordern, gebe ich eine 202 mit einem Body zurück, der relevante Informationen enthält, z. B. die Nachricht, die Sie bereitstellen möchten. Ich halte die ermutigende Botschaft nicht für Meta-Information, nein. –

+0

Ich bin mir nicht sicher, was du mit dem letzten Satz meinst. Sie sagen, Sie würden einen Körper mit der ermutigenden Nachricht zurückgeben, aber nicht im Meta-Feld? Wo würdest du es hinstellen? Oder denken Sie nicht über die JSON-API-Spezifikation nach? – shokora