Ich gehe davon aus, dass sich Ihre Frage auf das Design von REST-Webservices bezieht, genauer gesagt auf Erfolg/Fehler.
Ich denke, es gibt 3 verschiedene Arten von Design.
-
Utilice nur HTTP-Statuscode um anzuzeigen, dass ein Fehler aufgetreten ist, und versuchen Sie, sich auf die Standardfehler zu beschränken (normalerweise sollte das ausreichen).
- Vorteile: Es handelt sich um einen von Ihrer API unabhängigen Standard.
- Nachteile: Weniger Informationen darüber, was wirklich passiert ist.
-
Utilice HTTP-Status + json-Body (auch wenn es ein Fehler ist). Definieren Sie eine einheitliche Struktur für Fehler (z. B. Code, Meldung, Grund, Typ usw.) und verwenden Sie diese für Fehler. Wenn es ein Erfolg ist, geben Sie einfach die erwartete Json-Antwort zurück.
- Vorteile: Immer noch Standard, da Sie die vorhandenen HTTP-Statuscodes verwenden und eine json-Datei zurückgeben, die den Fehler beschreibt (Sie liefern weitere Informationen über den Vorfall).
- Nachteile: Die json-Ausgabe variiert je nachdem, ob es sich um einen Fehler oder einen Erfolg handelt.
-
Vergessen Sie den http-Status (z. B.: immer Status 200), verwenden Sie immer json und fügen Sie am Anfang der Antwort ein boolesches responseValid und ein Fehlerobjekt (Code, Meldung usw.) hinzu, das ausgefüllt wird, wenn es sich um einen Fehler handelt, andernfalls werden die anderen Felder (Erfolg) ausgefüllt.
-
Pro: Der Client befasst sich nur mit dem Körper der Antwort, der ein Json-String ist, und ignoriert den Status(?).
-
Nachteile: Der geringere Standard.
Die Entscheidung liegt bei Ihnen :)
Je nach API würde ich 2 oder 3 wählen (ich bevorzuge 2 für json rest apis). Eine weitere Sache, die ich bei der Entwicklung von REST-Api erlebt habe, ist die Bedeutung der Dokumentation für jede Ressource (URL): die Parameter, der Körper, die Antwort, die Header usw. + Beispiele.
Ich würde Ihnen auch empfehlen, jersey (jax-rs-Implementierung) + zu verwenden. genson (Java/Json-Datenbindungsbibliothek). Sie müssen nur genson + jersey in Ihrem Klassenpfad ablegen und json wird automatisch unterstützt.
EDITAR:
-
Lösung 2 ist am schwierigsten zu implementieren, hat aber den Vorteil, dass man mit Ausnahmen und nicht nur mit Geschäftsfehlern gut umgehen kann; der anfängliche Aufwand ist zwar größer, aber man gewinnt langfristig.
-
Lösung 3 ist sowohl auf der Server- als auch auf der Client-Seite einfach zu implementieren, aber sie ist nicht so schön, da Sie die Objekte, die Sie zurückgeben möchten, in einem Response-Objekt kapseln müssen, das auch die responseValid + error enthält.