hi,
Zwei Objekte, eins für den Gutfall, eins für den Fehlerfall. Unterscheidbar entweder über den Statuscode oder zur Not auch über eine Abfrage, ob bestimmte Felder im Inhalt vorhanden sind.
if (deinResponseObjekt.error) { ...
Wobei bei einem
status != 200
ein JSON gar keinen Sinn macht, weil da ohnehin nur eine Fehlermeldung zu erwarten ist.
Es könnten ja auch mehrere Fehler auftreten, die sich auf verschiedene Aspekte beziehen. Zum Beispiel können bei einer Formularvalidierung in diversen Feldern Fehler auftreten, dann wäre es praktisch, gleich alle Fehlermeldungen in der Antwort zu kodieren und den Feldern, die dafür gesorgt haben zuordnen zu können. Ein fiktives Beispiel:
{
"formValidationErrors" : [
{
"type": "OutOfBoundsException",
"fieldname": "age",
"min": 0,
"max": 100,
"actual": 130,
"message": "The field 'age' is expected to have a value between 0 and 100, but 130 was given",
},
{
"type": "InvalidDateException",
"fieldname": "birthdate",
"actual": "29.02.1989",
"message": "The field 'birthdate' expects a valid date, but the date '29.02.1989' doesn't exist.",
},
],
"serviceErrors": [
{
"type": "GeoLocationServiceTimeout",
"threshold": 1,
"message": "The GeoLocation-Server did not respond within 1s, we rescheduled the task to run again in 30 minutes. You can come back in half an hour to re-evaluate the response from the the GeoLocation-Server. Keep calm."
}
]
}
Die Fehler könntest du auch in einem benutzerdefiniertem Binärformat kodieren, nur musst du dir dann viel mehr Gedanken um die Kodierung machen und hättest am Ende eine Server-Antwort, die nicht mehr menschenlesbar und deshalb nicht mehr so einfach zu debuggen wäre.