Für eine REST-API, an der ich arbeite, möchte ich JSON in einem konsistenten Layout zurückgeben:
{
"Data" : {
"Id" : 123,
"Email" : "[email protected]"
"Firstname" : "Charlie",
"Surname" : "Brown",
},
"Error" : null
}
Die Nutzdaten enthalten immer "Daten" und "Fehler", wobei der eine oder andere null sein kann.
Meine Frage bezieht sich auf "Daten" und Endpunkte, die immer nur ein Objekt zurückgeben. Angenommen, ich habe eine API users/current
, die den aktuell authentifizierten Benutzer zurückgibt. Ich hätte diesen Benutzer wie oben gezeigt zurückgegeben. ein einzelnes JSON-Objekt mit dem Namen "Data".
Für Endpunkte, die null, ein oder mehrere Objekte zurückgeben könnten, würde ich (natürlich) "Daten" zu einem Array machen:
{
"Data" : [
{
(first object)
},
{
(second object)
}
],
"Error" : null
}
Ich habe den Standpunkt gehört, dass "Daten" aus Gründen der Konsistenz immer ein Array sein sollten. Selbst wenn ein Endpunkt logischerweise immer nur ein einzelnes Objekt (oder null) zurückgeben würde.
Was denken andere? Ich denke, dass es nicht notwendig ist, "Daten" und ein Array zu erstellen, wenn nie mehr als ein Objekt zurückgegeben wird.
Antworten:
Ich denke, diese Art von Konsistenz ist falsch.
Das Einschließen der Daten in ein Array ist für einen API-Konsumenten unwahrscheinlich, da er immer noch wissen muss, wie die tatsächlichen Daten zu interpretieren sind. Zum Beispiel ist es einfach nicht wahrscheinlich, dass die "Daten" aus demselben Code resultieren
/users/current
und/cities/chicago/restaurants
von diesem verarbeitet werden.Für Fehler, auf der anderen Seite, es ist wahrscheinlich , dass alle Fehler , die von dem gleichen Fehlerbehandlung Code verarbeitet werden, und dann gibt es einen Vorteil , die gleiche Struktur zu verwenden.
Fragen Sie sich Folgendes: Wenn dies eine Klasse in Ihrer bevorzugten OOP-Sprache wäre, würden Sie dafür sorgen, dass alle Methoden aus Konsistenzgründen denselben Typ zurückgeben?
quelle
/users/current
und dem Benutzer, dessen ID (möglicherweise Anmeldename) "aktuell" ist?Wenn die empfangende Seite einen allgemeinen Empfänger für Ihre JSON-Nachrichten benötigt, kann es hilfreich sein, wenn der Datenknoten dasselbe Format hat. In diesem Fall ist es also nützlich, immer ein Array zu haben, damit es jedes Mal auf die gleiche Weise analysiert werden kann.
Wenn jede Antwort behandelt wird individuell werden (andere API - Aufrufe von verschiedenen Methoden), kann ich Ihren Punkt sehen, jedoch sollte es absolut klar sein (von den API - Aufrufen) , wenn ein Array oder ein Objekt zurückgegeben werden soll.
quelle
Ich bin kein Fan des Array-Ansatzes, da er keine echte Konsistenz bietet. Er zwingt den Benutzer des Dienstes, sich entweder über Dinge wie die Frage zu informieren, was passiert, wenn sich mehr als ein Objekt in diesem Array befindet, oder die Umhüllung zu entfernen Array so schnell wie möglich für diese Singleton-Arrays. Sie müssten noch zwei verschiedene Dinge tun.
Wenn Sie das Array verwenden, stellen Sie jedoch sicher, dass Data niemals null ist. Wenn keine Daten vorhanden sind, sollte das Array leer sein. Das ist der einzige Vorteil, den ich sehen kann.
quelle
Ich bin auf der Seite, immer ein Array zurückzugeben. Auf der Clientseite verwende ich mein Antwortobjekt "Benutzer", unabhängig davon, ob alle Benutzer oder nur einer abgerufen werden. Wenn Sie einen Endpunkt haben, der Arrays zurückgibt, und einen anderen, der dasselbe Objekt zurückgibt, jedoch nie mehr als eines, verwenden Sie immer noch ein Array.
Es gibt ähnliche Argumente für die Verwendung derselben Logik auf der Serverseite. Verwenden Sie einfach denselben Code, unabhängig davon, ob Ihre Abfrage ein oder mehrere Elemente zurückgibt.
Die einzige Ausnahme wäre, wenn ein Objekt zurückgegeben wird, das in keinem Kontext als Array existiert, dann besteht keine Notwendigkeit.
quelle