Ich setze einen GraphQL-Wrapper über eine bestehende REST-API, wie in Zero to GraphQL in 30 minutes beschrieben. Ich habe einen API-Endpunkt für ein Produkt mit einer Eigenschaft bekomme, das auf ein verschachteltes Objekt zeigt:GraphQL - Alle Felder aus verschachtelten JSON-Objekten abrufen
// API Response
{
entity_id: 1,
nested_object: {
key1: val1,
key2: val2,
...
}
}
Ist es möglich, das Schema zu definieren, so dass ich dieses ganzes verschachtelte Objekt bekommen kann, ohne explizit das verschachtelte Objekt zu definieren und alle seine Eigenschaften? Ich mag meine Abfrage nur angeben, dass ich das verschachtelte Objekt werden soll, und nicht braucht, um alle Eigenschaften angeben ich aus dem verschachtelten Objekt will:
// What I want
{
product(id: "1") {
entityId
nestedObject
}
}
// What I don't want
{
product(id: "1") {
entityId
nestedObject {
key1
key2
...
}
}
}
ich die zweite Version tun, aber es erfordert eine Menge zusätzlichen Code einschließlich der Erstellung eines NestedObjectType
und Angabe aller verschachtelten Eigenschaften. Ich habe auch, wie automatisch herausgefunden, um eine Liste aller Schlüssel, etwa so:
const ProductType = new GraphQLObjectType({
...
fields:() => ({
nestedObject: {
type: new GraphQLList(GraphQLString),
resolve: product => Object.keys(product.nested_object)
}
})
})
Ich habe nicht einen Weg gefunden, um automatisch das gesamte Objekt zurück, though.
AFAIK, das das gesamte verschachtelte Objekt zur Verfügung stellt, ohne seine Felder explizit anzugeben, ist in GraphQL derzeit nicht möglich. Das widerspricht dem Prinzip von GraphQL, das darauf abzielt, nur die benötigten/angeforderten Daten zu liefern, anstatt alle Daten auf einmal bereitzustellen. Sie sollten ernsthaft über die Motivation für die Verwendung von GraphQL nachdenken. Wenn Sie sich mit der mobilen Datenbandbreite befassen, kann dies eine gute Wahl sein. –
Danke für die Antwort. Ich spiele damit nur zu Lernzwecken. Ich dachte, das könnte der Fall sein. Für mich ist es sinnvoll für die Abfragen auf höchster Ebene, aber nicht so sehr für verschachtelte Objekte. In der Komponente möchte ich einfach alles im verschachtelten Objekt durchlaufen - es scheint, als ob etwas zu dem Objekt auf dem Server hinzugefügt wird, der Client sollte sich nicht darum kümmern müssen. Ich denke, dass dieses Problem leichter vermieden werden könnte, wenn Sie GraphQL als Haupt-API verwenden, anstatt eine vorhandene REST-API zu verpacken. – collinksmith
"Es scheint, als ob etwas zu diesem Objekt auf dem Server hinzugefügt wird, der Client sollte sich nicht darum kümmern müssen." Meinst du Push-basierte Benachrichtigung/Update (von Server zu Client)? –