Heim > Backend-Entwicklung > Golang > Paginierung auf die nächste Ebene bringen: Sortieren und Filtern in Go-APIs

Paginierung auf die nächste Ebene bringen: Sortieren und Filtern in Go-APIs

Susan Sarandon
Freigeben: 2025-01-23 00:38:11
Original
849 Leute haben es durchsucht

Im letzten Beitrag haben wir uns mit der Paginierung befasst, die große API-Antworten in überschaubare Teile zerlegt. Wenn Sie jedoch schon immer den Benutzern die Kontrolle darüber überlassen wollten, wie Daten sortiert werden oder bestimmte Ergebnisse filtern, dann sind Sie bereit für den nächsten Schritt: Sortieren und Filtern.
Lassen Sie uns eintauchen und unsere APIs noch leistungsfähiger machen, indem wir diese Funktionen hinzufügen.

Wenn Sie das vorherige Tutorial noch nicht durchgelesen haben, finden Sie hier den Link.

Warum Sortieren und Filtern wichtig sind

Image description
Paginierung allein reicht nicht immer aus. Stellen Sie sich vor, ein Benutzer sucht nach den neuesten Artikeln oder nur nach Artikeln, die in einem bestimmten Zeitraum erstellt wurden. Durch Sortieren und Filtern können Benutzer:

- Sortieren: Wählen Sie die Reihenfolge der Ergebnisse (z. B. vom Neuesten zum Ältesten)
- Filter: Ergebnisse auf das eingrenzen, was sie benötigen (z. B. heute erstellte Artikel)

Durch die Kombination von Paginierung mit Sortieren und Filtern schaffen wir eine benutzerfreundlichere API.

Erweiterung unserer Datenbankabfrage

Wir bauen auf der Artikeltabelle aus dem vorherigen Blog auf. Um es noch einmal zusammenzufassen: Hier ist das Schema:

CREATE TABLE items (
    id SERIAL PRIMARY KEY,
    name TEXT NOT NULL,
    created_at TIMESTAMP DEFAULT NOW()
);
Nach dem Login kopieren
Nach dem Login kopieren

Sortierung hinzufügen

Beim Sortieren geht es darum, die Ergebnisse zu ordnen. Wir ermöglichen Benutzern das Sortieren nach den Spalten „name“ oder „created_at“ in aufsteigender oder absteigender Reihenfolge.

Schritt 1: Sortierparameter akzeptieren

Benutzer übergeben zwei Abfrageparameter:

  • sort: Die Spalte, nach der sortiert werden soll (Name oder erstelltes_at).
  • Reihenfolge: Die Sortierrichtung (aufsteigend oder absteigend).

Beispiel-URL:

/items?page=1&limit=10&sort=created_at&order=desc
Nach dem Login kopieren
Nach dem Login kopieren

Schritt 2: Passen Sie die SQL-Abfrage an

Wir ändern die SQL-Abfrage dynamisch, um die Sortierung einzuschließen:

// Extract sort and order query parameters
sort := r.URL.Query().Get("sort")
order := r.URL.Query().Get("order")

// Validate the sort column
validSortColumns := map[string]bool{"name": true, "created_at": true}
if !validSortColumns[sort] {
    sort = "created_at" // Default sort column
}

// Validate the sort order
if order != "asc" && order != "desc" {
    order = "asc" // Default sort order
}

// Modify the SQL query
query := fmt.Sprintf("SELECT id, name, created_at FROM items ORDER BY %s %s LIMIT  OFFSET ", sort, order)
rows, err := db.Query(query, limit, offset)
if err != nil {
    http.Error(w, "Failed to fetch items", http.StatusInternalServerError)
    return
}
Nach dem Login kopieren
Nach dem Login kopieren

Filterung hinzufügen

Durch Filtern können Benutzer ihre Suche verfeinern. Beispielsweise können wir Artikel nach einem Datumsbereich oder nach Artikeln filtern, die ein bestimmtes Schlüsselwort im Namen enthalten.

Schritt 1: Filterparameter akzeptieren

Wir unterstützen zwei Filter:

  • Name: Nach Elementen suchen, die eine bestimmte Teilzeichenfolge enthalten.
  • erstellt_nach: Elemente abrufen, die nach einem bestimmten Datum erstellt wurden.

Beispiel-URL:

/items?page=1&limit=10&name=Item&created_after=2025-01-10 20:38:57.832777
Nach dem Login kopieren
Nach dem Login kopieren

Schritt 2: Passen Sie die SQL-Abfrage an

Wir fügen WHERE-Bedingungen hinzu, um diese Filter zu verarbeiten:

CREATE TABLE items (
    id SERIAL PRIMARY KEY,
    name TEXT NOT NULL,
    created_at TIMESTAMP DEFAULT NOW()
);
Nach dem Login kopieren
Nach dem Login kopieren

Testen der erweiterten API

  • Sortierung nach Namen in aufsteigender Reihenfolge:
/items?page=1&limit=10&sort=created_at&order=desc
Nach dem Login kopieren
Nach dem Login kopieren
  • Elemente filtern, die nach einem bestimmten Datum erstellt wurden:
// Extract sort and order query parameters
sort := r.URL.Query().Get("sort")
order := r.URL.Query().Get("order")

// Validate the sort column
validSortColumns := map[string]bool{"name": true, "created_at": true}
if !validSortColumns[sort] {
    sort = "created_at" // Default sort column
}

// Validate the sort order
if order != "asc" && order != "desc" {
    order = "asc" // Default sort order
}

// Modify the SQL query
query := fmt.Sprintf("SELECT id, name, created_at FROM items ORDER BY %s %s LIMIT  OFFSET ", sort, order)
rows, err := db.Query(query, limit, offset)
if err != nil {
    http.Error(w, "Failed to fetch items", http.StatusInternalServerError)
    return
}
Nach dem Login kopieren
Nach dem Login kopieren
  • Filter und Sortierung kombinieren:
/items?page=1&limit=10&name=Item&created_after=2025-01-10 20:38:57.832777
Nach dem Login kopieren
Nach dem Login kopieren

Häufiger Fehler, den es zu vermeiden gilt

Benutzereingaben werden nicht validiert: Das Zulassen beliebiger Spalten oder ungültiger Sortierreihenfolgen kann Ihre Datenbank einer SQL-Injection aussetzen. Validieren Sie Eingaben immer.

Fazit / Nächste Schritte

Das vollständige Code-Repository für dieses Tutorial finden Sie hier

Mit der vorhandenen Paginierung, Sortierung und Filterung ist Ihre API jetzt benutzerfreundlicher und flexibler. Für noch erweiterte Funktionen sollten Sie Folgendes hinzufügen:

  • Cursorbasierte Paginierung für große Datensätze.
  • Facettenfilterung für komplexe Suchen.

Bleiben Sie gespannt auf den nächsten Beitrag, in dem wir diese fortgeschrittenen Techniken erkunden werden!

Um weitere Informationen über Golang-Konzepte, -Projekte usw. zu erhalten und über die Tutorials auf dem Laufenden zu bleiben, folgen Sie Siddhesh auf Twitter und GitHub.

Bis dahin Lernen Sie weiter, Bauen Sie weiter ??

Das obige ist der detaillierte Inhalt vonPaginierung auf die nächste Ebene bringen: Sortieren und Filtern in Go-APIs. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage