2016-08-19 3 views
3

Ich möchte einen Rest-Service implementieren, der ein Objekt aufnimmt und zurückgibt, wenn das Objekt mit bestimmten Parametern verarbeitet werden kann. Das Problem ist, dass abhängig davon, ob das Objekt berechtigt ist oder nicht die Struktur der Antwort ist sehr unterschiedlich. Als ein Beispiel für den Fall, dass das Objekt verarbeitet werden soll, ist es einem Verarbeitungstyp und einer Priorität zugeordnet. Wenn dies nicht möglich ist, wird der Grund dafür zurückgegeben. Welches ist die sauberste Art der Rückgabe unterschiedlicher Strukturen für die gleiche Anfrage. Es gibt drei Möglichkeiten, die ich mir vorstellen kann, aber Sie können zusätzliche Optionen hinzufügen.Sauberste Möglichkeit, verschiedene Strukturen für die gleiche Anfrage zurückzugeben

Option A:
Rückgabedaten als Umschlag mit dem Feld enthalten, die

{ 
    "eligible": bool, 
    "data": { 
     // Data depending on whether elbile or not 
    } 
} 

Option B strukturiert ist:
Verwenden unterschiedliche HTTP-Statuscode und Struktur json entsprechend. Dies ist irgendwie unrein, da es sich nicht wirklich um einen Fehler in der Anfrage handelt, sondern um eine gültige Antwort.

Option C:
Verwenden Sie verschiedene Felder für die Daten senden im Falle von berechtigt oder nicht und lassen Sie ein Feld Null sein.

{ 
    "eligible": bool, 
    "dataEligible": { 
     "processingType": "", 
     "priority": 0 
    } 
    "dataNonEligible": { 
     "reason": "", 
    } 
} 

Antwort

1

Ich denke, das wäre ein guter Anwendungsfall für 422 Status Code. Es ist noch keine offizielle ISO, aber viele Firmen (z. B. Twitter) benutzen es.

Grundsätzlich ist es das, was für Sie passiert - die Ressource konnte nicht verarbeitet werden, obwohl der Server die Anfrage versteht und die Syntax korrekt ist.


Die Option C sieht auch vernünftig aus, deshalb verwenden Sie diejenige, die für Ihre Bedürfnisse am besten geeignet ist. Ich würde A nicht empfehlen, da ein anderes Format für dieselbe Anfrage ein großes Problem für Verbraucher mit statisch getippten Sprachen ist (d. H. Java)

+0

Danke für die Antwort. Ich dachte 422 und korrigiere mich, wenn ich falsch liege. Bedeutet das aber nicht, dass die Sendeanforderung semantische Fehler enthält? – PKuhn

+0

Nein, 422 ist ohne Fehler, aber der Server kann es aus einem dem Kunden unbekannten Grund nicht verarbeiten – libik

Verwandte Themen