Wenn Sie mich fragen, mache ich das anders. Ein erfolgreicher Aufruf hat nur die JSON-Objekte. Ich brauche kein JSON-Objekt auf höherer Ebene, das ein Erfolgsfeld enthält, das "true" anzeigt, und ein Nutzdatenfeld, das das JSON-Objekt enthält. Ich gebe einfach das entsprechende JSON-Objekt mit einem 200 oder was auch immer im 200-Bereich für den HTTP-Status im Header angemessen ist, zurück.
Wenn jedoch ein Fehler auftritt (etwas aus der 400-Familie), gebe ich ein wohlgeformtes JSON-Fehlerobjekt zurück. Wenn der Client zum Beispiel einen Benutzer mit einer E-Mail-Adresse und einer Telefonnummer POSTet und eine dieser Angaben fehlerhaft ist (d. h. ich kann sie nicht in meine zugrunde liegende Datenbank einfügen), gebe ich etwas wie das folgende zurück:
{
"description" : "Validation Failed"
"errors" : [ {
"field" : "phoneNumber",
"message" : "Invalid phone number."
} ],
}
Wichtig dabei ist, dass die Eigenschaft "field" genau dem JSON-Feld entsprechen muss, das nicht validiert werden konnte. So können die Kunden genau wissen, was bei ihrer Anfrage schief gelaufen ist. Außerdem ist "message" in dem Gebietsschema der Anfrage angegeben. Wenn sowohl die "emailAddress" als auch die "phoneNumber" ungültig wären, würde das Array "errors" Einträge für beide enthalten. Ein 409 (Conflict) JSON-Antwortkörper könnte wie folgt aussehen:
{
"description" : "Already Exists"
"errors" : [ {
"field" : "phoneNumber",
"message" : "Phone number already exists for another user."
} ],
}
Mit dem HTTP-Statuscode und diesem JSON hat der Client alles, was er braucht, um auf Fehler auf deterministische Weise zu reagieren, und er erstellt keinen neuen Fehlerstandard, der versucht, die HTTP-Statuscodes zu ersetzen. Beachten Sie, dass dies nur für den Bereich der 400-Fehler geschieht. Bei allen Fehlern im Bereich 200 kann ich einfach das zurückgeben, was angemessen ist. Für mich ist es oft ein HAL-ähnliches JSON-Objekt, aber das ist hier nicht wirklich wichtig.
Die eine Sache, die ich über das Hinzufügen dachte, war ein numerischer Fehlercode entweder in die "Fehler" Array-Einträge oder die Wurzel des JSON-Objekts selbst. Aber bis jetzt haben wir es nicht gebraucht.