Zum Hauptinhalt springen

Was ist Overfetching?

Der Grund, warum viele Leute GraphQL empfehlen, ist ein Konzept namens Overfetching. In vielen APIs, wenn man nach einem Objekt fragt, gibt die API alles zurück, was sie weiß, weil sie nicht weiß, woran du interessiert bist. GraphQL (wie SQL) ermöglicht es dir, der API genau zu sagen, wonach du suchst, bevor sie die Anfrage stellt.

Es ist wie wenn man in ein Restaurant geht und darum bittet, alles auf der Speisekarte auf den Tisch zu bringen, und dann seine Vorspeise, Hauptspeise und Nachspeise aussucht. Der Rest wird verschwendet.

Ein praktisches Beispiel

Betrachte eine Abfrage einer imaginären Handheld-Anwendung eines Kellners:

query foodPricesForOrder {
menuItem(id: "Jxkjahdkfh==") {
id
description
longDescription
calories
price
picture
}
}

Was wäre, wenn wir longDescription weglassen? Wir würden Netzwerkverkehr sparen, auch wenn die eigentliche Datenbankabfrage nicht spürbar schneller wird, wenn alle Felder in derselben Tabelle liegen.

Aber beachte das Feld picture — es könnte ein base64-kodiertes Bild sein. Wir wollen das nicht in einer Handheld-Kellner-App. In REST hätten wir keine andere Wahl, als es zu empfangen, oder der API-Entwickler müsste einen separaten Endpunkt für Bilder erstellen. Noch schlimmer, die REST-Lösung könnte den Client zwingen, für jedes Gericht separate Anfragen zu stellen.

Wie GraphQL das löst

GraphQL ermöglicht es dir, nur das anzufordern, was du wirklich brauchst. Wenn ein Resolver an das Feld picture (in AppSync, Apollo oder einem beliebigen GraphQL-Server) angehängt ist, wird dieser nur ausgelöst, wenn dieses Feld in der Abfrage erscheint. Solange du es nicht einschließt, zahlst du nicht dafür.

Das gilt für die gesamte Legalesign API. Felder, die aufwändige Nachschlagevorgänge erfordern — verwandte Objekte, berechnete Werte, große Datenmengen — werden nur aufgelöst, wenn du sie anforderst.

Das Fazit

Beim Entwerfen deiner Abfragen denke darüber nach, welche Felder du wirklich brauchst. Lass alles weg, was deine UI nicht verwendet. Du wirst die Payload-Größe, Netzwerklatenz und serverseitige Berechnung reduzieren.

Siehe Queries entwerfen für weitere praktische Richtlinien.

Export This Article

Save a copy of this page as PDF or plain text.