API Pagination, Filter und Sortierung
Pagination, Filter und Sortierung ermöglichen es, große Datenmengen effizient, konsistent und nutzerfreundlich über eine API auszuliefern.
Kompakte Beschreibung
Pagination begrenzt die Anzahl der Datensätze, die eine API bei einem Aufruf zurückgibt. Sie verhindert große, langsame Antworten und schont Server und Clients. Filter erlauben es, Daten nach bestimmten Kriterien einzuschränken, ohne dafür eigene Endpunkte zu benötigen. Sortierung steuert die Reihenfolge der Ergebnisse. Zusammen bilden diese drei Mechanismen die Grundlage für flexible API-Abfragen. Die gängigen Paginierungsarten sind Offset Pagination, Cursor Pagination und Keyset Pagination. Jede hat Vor- und Nachteile bezüglich Einfachheit, Konsistenz und Performance. Filter und Sortierung werden meist über Query-Parameter gesteuert, wobei klare Konventionen und aussagekräftige Namen wichtig sind. Eine gute API dokumentiert ihre Paginierungs- und Filtermöglichkeiten klar und liefert in der Antwort nützliche Metadaten wie Links, Gesamtzahl oder Cursor.
Wichtige Komponenten
Offset Pagination
Offset Pagination verwendet Parameter wie page oder offset und limit, um einen Ausschnitt aus der Ergebnismenge zu erhalten. Beispiel: ?page=2&limit=20. Diese Methode ist einfach zu implementieren und zu verstehen. Nachteile sind Performanceeinbußen bei großen Offset-Werten und Probleme mit inkonsistenten Daten, wenn sich die Ergebnismenge zwischen den Seiten ändert.
Cursor Pagination
Cursor Pagination verwendet einen nicht-transparenten Cursor, der auf einem sortierten Wert basiert. Beispiel: ?cursor=abc123&limit=20. Sie ist performanter und konsistenter als Offset Pagination bei großen Datenmengen. Nachteile sind die erschwerte Navigation zu beliebigen Seiten und die Abhängigkeit von einer eindeutigen Sortierung.
Keyset Pagination
Keyset Pagination ähnelt Cursor Pagination, nutzt aber explizite Werte wie ?createdAfter=2026-07-01T00:00:00Z&limit=20. Sie ist sehr performant und stabil, aber weniger flexibel, wenn mehrere Sortierfelder verwendet werden. Sie eignet sich besonders für Datenströme, die nach Zeit sortiert sind.
Page und Limit
page und limit sind die klassischen Parameter für Offset Pagination. page gibt die Seite an, limit die Anzahl der Elemente pro Seite. Typische Default-Werte sind page=1 und limit=20. APIs sollten ein maximales Limit erzwingen, um Missbrauch zu verhindern.
Total Count und Links
Antworten sollten Metadaten enthalten, die die Navigation erleichtern. Dazu gehören total, page, limit, next, prev, first und last. HATEOAS-Links helfen Clients, ohne manuelle URL-Konstruktion durch die Seiten zu navigieren.
Filterparameter
Filter werden meist über Query-Parameter gesteuert. Beispiele sind ?status=active, ?category=books oder ?minPrice=10&maxPrice=50. Filter sollten aussagekräftig benannt, dokumentiert und validiert werden. Boolesche Kombinationen können über separate Parameter oder eine Filter-Query-Syntax ausgedrückt werden.
Sortierung
Sortierung wird oft durch Parameter wie sort oder orderBy gesteuert. Beispiele sind ?sort=name oder ?sort=-createdAt, wobei ein Minus absteigend sortiert. Klare Konventionen und Dokumentation sind wichtig, damit Clients die API richtig nutzen.
Suchparameter
Eine Volltextsuche wird meist durch einen Parameter wie q oder search ausgedrückt, beispielsweise ?q=python. Komplexere Suchen können durch Suchdienste wie Elasticsearch oder OpenSearch umgesetzt werden und über eine dedizierte Such-API exponiert werden.
Kombination von Filter, Sortierung und Pagination
In der Praxis werden Filter, Sortierung und Pagination oft kombiniert. Beispiel: ?status=active&sort=-createdAt&page=1&limit=25. Die API muss diese Parameter sinnvoll kombinieren, validieren und dokumentieren. Es ist wichtig, die Reihenfolge der Operationen konsistent zu halten.
Limit und Defaults
Ein sinnvolles Default-Limit reduziert Datenmenge und Antwortzeit. Gleichzeitig sollte ein Maximal-Limit erzwungen werden, um zu große Anfragen zu verhindern. Kunden sollten die Möglichkeit haben, das Limit innerhalb der erlaubten Grenzen zu wählen.
Konsistenz bei wachsenden Daten
Wenn sich die Datenmenge während der Paginierung ändert, können Datensätze doppelt oder verpasst werden. Cursor und Keyset Pagination sind hier stabiler als Offset Pagination. Bei Offset Pagination sollten Clients auf Inkonsistenzen vorbereitet sein oder die API sollte Snapshots verwenden.
Praxisbeispiel
Eine API für Produkte unterstützt Offset Pagination, Filter und Sortierung.
Anfrage:
GET /api/v1/products?category=electronics&minPrice=100&sort=-rating&page=2&limit=10
Antwort:
{
"data": [
{ "id": 15, "name": "Laptop", "price": 999, "rating": 4.8 },
{ "id": 22, "name": "Monitor", "price": 299, "rating": 4.7 }
],
"pagination": {
"page": 2,
"limit": 10,
"total": 145,
"pages": 15,
"next": "/api/v1/products?category=electronics&minPrice=100&sort=-rating&page=3&limit=10",
"prev": "/api/v1/products?category=electronics&minPrice=100&sort=-rating&page=1&limit=10"
}
}
Der Client kann über die Links einfach navigieren, ohne die Filter und Sortierung neu konstruieren zu müssen.
FAQ: Pagination, Filter und Sortierung
1. Was ist Pagination in APIs?
2. Was ist Offset Pagination?
3. Was ist Cursor Pagination?
4. Was ist Keyset Pagination?
5. Was ist ein Default Limit?
6. Was sind HATEOAS Links in Pagination?
7. Was ist ein Filterparameter?
8. Was ist ein Sortierparameter?
9. Was ist ein Suchparameter?
10. Warum ist Pagination wichtig für Performance?
11. Was ist ein Maximum Limit?
12. Was ist Inkonsistenz bei Pagination?
13. Was ist die Total Count in paginierten Antworten?
14. Wie dokumentiert man Filter und Sortierung?
15. Was sind Best Practices für Pagination, Filter und Sortierung?
Quellen
- https://www.rfc-editor.org/rfc/rfc8288
- https://www.martinfowler.com/articles/patterns-of-distributed-systems/pagination.html
- https://use-the-index-luke.com/no-offset
Buchempfehlungen zum API Design
Wenn Du Dich weiter mit API Design, Datenabfragen und Softwarearchitektur beschäftigen möchtest, empfehlen wir Dir die folgenden Bücher:
Keine Bücher für Kategorie "api-development" gefunden.