GraphQL-APIs mit Paginierung und Fehlerbehandlung vervollständigen

Spring for GraphQL erleichtert das Betreiben von GraphQL-APIs in Spring-Anwendungen. Spring for GraphQL hilft Entwicklern, Anforderungen für APIs umzusetzen.

Artikel verschenken
In Pocket speichern vorlesen Druckansicht
Lesezeit: 21 Min.
Von
  • Nils Hartmann
Inhaltsverzeichnis

Spring for GraphQL gibt Entwicklern die Möglichkeit, relativ schnell zu einer prinzipiell funktionsfähigen GraphQL-API zu gelangen. Das hat der Artikel "GraphQL-APIs mit Spring bauen" anhand der fiktiven Anwendung Publy gezeigt. Jetzt geht es darum, die API Schritt für Schritt um praxisrelevante Features zu erweitern: Paginierung und Sortierung, Fehlerbehandlung und Tests.

Die Publy-API stellt im Query-Objekt das Feld stories bereit, mit dem ein Client die Stories aus dem Backend abfragen kann. Bisher gibt es aber keine Möglichkeit, die Menge der zurückgegebenen Stories einzugrenzen oder sie zu sortieren. Der Client erhält also unter Umständen eine sehr große Menge von Daten, die er nicht benötigt. Auch für den Server ist das eine Herausforderung, denn er muss diese große Datenmenge performant zur Verfügung stellen. Aus diesem Grund bieten viele APIs Möglichkeiten der Paginierung an. Damit kann ein Client angeben, wie viele Ergebnisse er maximal erhalten möchte.

Mehr zu Datenbanken

Verbreitet sind zwei Arten von Paginierung: die Offset- oder auch seitenbasierte und die cursorbasierte. Bei der Offset-basierten Paginierung gibt der Client an, wie viele Datensätze er maximal erhalten möchte und wie viele Datensätze am Anfang übersprungen werden sollen (Offset). Die GraphQL-API könnte zum Beispiel alle Stories nach einem festen Kriterium sortieren. Der Client könnte dann beispielsweise zehn Stories zurückliefern, dabei aber die ersten zehn überspringen, sodass er die Stories 11 bis 20 aus der sortierten Liste erhalten würde. Eine Variante davon ist die seitenbasierte Paginierung. Hier wird die gesamte potenzielle Ergebnismenge, also alle Stories, in virtuelle Seiten aufgeteilt. Der Client bestimmt, wie groß eine Seite ist und die wievielte Seite er abfragen möchte. Dies entspricht konzeptionell der Benutzernavigation auf vielen Webseiten mit einer bestimmten Anzahl von Ergebnissen.