Skip to content
IRC-Coding IRC-Coding
Pagination Filter Sortierung Offset Pagination Cursor Pagination Keyset Pagination Query Parameter

API Pagination, Filter und Sortierung: Daten effizient und nutzerfreundlich ausliefern

Lerne API Pagination, Filter und Sortierung: Offset, Cursor, Keyset, Suchparameter, Query Design und Best Practices für effiziente APIs.

S

schutzgeist

2 min read
API Pagination, Filter und Sortierung: Daten effizient und nutzerfreundlich ausliefern

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.

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?

Pagination begrenzt die Anzahl der Datensätze, die eine API pro Anfrage zurückgibt. Sie verhindert große, langsame Antworten und schont Server und Clients.

2. Was ist Offset Pagination?

Offset Pagination verwendet Parameter wie page und limit, um einen Ausschnitt aus der Ergebnismenge zu erhalten. Sie ist einfach, aber langsam und inkonsistent bei großen Datenmengen.

3. Was ist Cursor Pagination?

Cursor Pagination verwendet einen nicht-transparenten Cursor, um die nächste Seite zu laden. Sie ist performanter und stabiler als Offset Pagination, aber weniger flexibel bei Sprüngen zu beliebigen Seiten.

4. Was ist Keyset Pagination?

Keyset Pagination nutzt explizite Werte wie createdAfter oder lastId, um die nächste Seite zu laden. Sie ist sehr performant und eignet sich besonders für zeitbasierte Datenströme.

5. Was ist ein Default Limit?

Ein Default Limit ist der Standardwert für die Anzahl der Elemente pro Seite, wenn der Client kein Limit angibt. Typische Werte sind 20 oder 50.

6. Was sind HATEOAS Links in Pagination?

HATEOAS Links in Pagination zeigen URLs für die nächste, vorherige, erste und letzte Seite. Sie ermöglichen es Clients, ohne manuelle URL-Konstruktion zu navigieren.

7. Was ist ein Filterparameter?

Ein Filterparameter ist ein Query-Parameter, der die Ergebnismenge nach einem Kriterium einschränkt, wie ?status=active oder ?category=books.

8. Was ist ein Sortierparameter?

Ein Sortierparameter steuert die Reihenfolge der Ergebnisse, wie ?sort=name oder ?sort=-createdAt für absteigende Sortierung. Klare Konventionen sind wichtig.

9. Was ist ein Suchparameter?

Ein Suchparameter wie q oder search ermöglicht Volltextsuchen über die API. Komplexe Suchen werden oft über dedizierte Such-APIs mit Elasticsearch oder OpenSearch realisiert.

10. Warum ist Pagination wichtig für Performance?

Pagination reduziert die Datenmenge pro Anfrage, senkt Latenz und Speicherverbrauch, und schont Datenbank und Netzwerk. Ohne Pagination können große Abfragen Server und Clients überlasten.

11. Was ist ein Maximum Limit?

Ein Maximum Limit ist die obere Grenze für die Anzahl der Elemente pro Seite. Es verhindert, dass Clients zu große Anfragen stellen und die API überlasten.

12. Was ist Inkonsistenz bei Pagination?

Inkonsistenz entsteht, wenn sich die Datenmenge zwischen Seitenwechseln ändert. Datensätze können doppelt vorkommen oder verpasst werden. Cursor Pagination ist weniger anfällig dafür als Offset Pagination.

13. Was ist die Total Count in paginierten Antworten?

Die Total Count ist die Gesamtzahl der Datensätze, die den Filterkriterien entsprechen. Sie hilft Clients, die Gesamtzahl der Seiten und den Umfang der Ergebnisse zu erkennen.

14. Wie dokumentiert man Filter und Sortierung?

Filter und Sortierung sollten in OpenAPI oder der API-Dokumentation klar beschrieben werden. Dazu gehören erlaubte Parameter, Datentypen, Default-Werte, erlaubte Werte und Beispiele.

15. Was sind Best Practices für Pagination, Filter und Sortierung?

Best Practices sind die Wahl der passenden Paginierungsart, sinnvolle Default- und Maximal-Limits, aussagekräftige Parameter, stabile Sortierkriterien, nützliche Navigationslinks, klare Dokumentation und sorgfältige Validierung aller Parameter.

Quellen

  1. https://www.rfc-editor.org/rfc/rfc8288
  2. https://www.martinfowler.com/articles/patterns-of-distributed-systems/pagination.html
  3. 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.

Zurück zum Blog
Share:

Ähnliche Beiträge