Ich arbeite mit einem Endpunkt, der Felder zurückgibt, die manchmal ein JSON-Objekt und manchmal ein leeres Array zurückgeben. Zum Beispiel,

Antwort 1:

{
   "status": true,
   "people": {
      "id":"123",
      "name":"john"
   }        
}

Antwort 2:

{
   "status": true,
   "people": []
}

Beachten Sie, dass "people" auf ein leeres [] gesetzt ist, wenn nichts vorhanden ist, und auf ein einzelnes Objekt, wenn etwas vorhanden ist.

Ich habe dies einige Male an zufälligen Stellen gesehen, und es scheint mir ein bisschen unbekümmert zu sein, da die Inkonsistenz die Werte mehrdeutig erscheinen lässt. Ich habe mich gefragt, ob jemand weiß, ob dies als schlechte Praxis angesehen wird und warum. Würden Sie es als Fehler an ihrem Ende betrachten? Kann mir bitte jemand helfen, etwas Licht ins Dunkel zu bringen?

Vielen Dank!

0
sheg 30 Dez. 2015 im 07:26

2 Antworten

Beste Antwort

Einige Clienttechnologien möchten diesen JSON in ein Objekt einer Klasse deserialisieren. Der Versuch, die beiden von Ihnen veröffentlichten JSON-Snippets unterzubringen, ist für einige Clients schwierig (zumindest in einer statisch typisierten Sprache). Eine RESTful-Webservice-Implementierung sollte nicht davon ausgehen, dass ein Client einen bestimmten Stack oder sogar dieselbe Sprache wie der Service verwendet. Aus diesem Grund würde ich beim Entwerfen dieses Endpunkts versuchen, die Rückgabe dieses inkonsistenten Ergebnisses zu vermeiden.

Natürlich ist es, wie die andere Antwort betonte, eine Frage der Konvention und wird funktionieren. Ich denke nur, dass dies für einige Kunden, die versuchen, mit Ihrem Service zu arbeiten, unnötig kompliziert wird.

1
George 5 Jän. 2016 im 16:09

Abhängig davon gibt es eine Reihe von Stapeln, die ein einzelnes {} Objekt zurückgeben, wenn es ein Ergebnis für Personen gibt, und eine Reihe von Personen [Person, Person], wenn es mehr als eine gibt. Ich persönlich würde ein Array bevorzugen, das eine Entität enthält.

Wenn Sie sagen, dass Personen niemals mehr als eine Person sind (der Name impliziert viele), würde ich definitiv sagen, dass die API bei der Rückgabe eines Arrays inkonsistent war, wenn keine Ergebnisse vorliegen und ansonsten ein Objektliteral.

Was soll passieren, wenn es keine gibt? Es ist eine Frage der Konvention und ein leeres Array ist kein Fremder als alles andere, obwohl es eine Null oder etwas anderes sein könnte.

Auch hier ist es eine Frage der Konvention. Wenn Sie bei der Erstellung der API, die Sie anrufen, mitreden können, können Sie eine Präferenz ausdrücken. Ansonsten muss man sich nur an das anpassen, was zurückkommt.

1
Robert Moskal 30 Dez. 2015 im 06:22