Maison >développement back-end >Golang >Comment paginer les réponses de l'API dans Go

Comment paginer les réponses de l'API dans Go

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-11 09:17:43714parcourir

Pagination : un guide pratique pour une gestion efficace des données

Imaginez une application traitant d'une base de données massive contenant des milliers d'entrées. Renvoyer tous les enregistrements dans une seule réponse API est une recette pour un désastre : cela ralentit l'application, consomme une bande passante excessive et submerge les utilisateurs avec une quantité de données ingérable.

Pagination apporte la solution. En divisant les données en pages plus petites et plus faciles à gérer, les utilisateurs ne reçoivent qu'un sous-ensemble de données à la fois. Cela se traduit par des API plus rapides et une expérience utilisateur plus fluide.

How to Paginate API Responses in GoPensez à une grande étagère de bibliothèque remplie de centaines de livres. Au lieu d'une recherche chaotique dans l'ensemble de la collection, il est bien plus efficace de parcourir section par section (« Page 1 », « Page 2 », etc.). La pagination fonctionne sur le même principe.

Configuration de la base de données

Pour cette démonstration, une simple items table au sein d'une base de données PostgreSQL sera utilisée. Le schéma du tableau est le suivant :

<code class="language-sql">CREATE TABLE items (
    id SERIAL PRIMARY KEY,
    name TEXT NOT NULL,
    created_at TIMESTAMP DEFAULT NOW()
);</code>

Remplissez le tableau avec des exemples de données :

<code class="language-sql">INSERT INTO items (name) 
VALUES 
('Item 1'), ('Item 2'), ('Item 3'), ..., ('Item 100');</code>

Créer une API Go avec Pagination

Créons un point de terminaison d'API (/items) qui accepte deux paramètres de requête :

  • page : Le numéro de page (par défaut : 1).
  • limit : Le nombre d'enregistrements par page (par défaut : 10).

Voici l'implémentation du code Go :

<code class="language-go">package main

import (
    "database/sql"
    "fmt"
    "log"
    "net/http"
    "strconv"

    _ "github.com/lib/pq"
)

// ... (rest of the code remains the same)</code>

Comprendre la logique

Paramètres de pagination :

  • page : Spécifie le sous-ensemble de données souhaité.
  • limit : Définit le nombre d'enregistrements par page.

Calcul du décalage :

Le offset détermine le nombre d'enregistrements à ignorer avant de récupérer les données de la page en cours :

offset = (page - 1) * limit

Par exemple :

  • page=1, limit=5offset=0 (sauter 0 enregistrement).
  • page=2, limit=5offset=5 (sauter les 5 premiers enregistrements).

Requête SQL :

Les clauses LIMIT et OFFSET de la requête SQL récupèrent les données requises :

SELECT id, name, created_at FROM items ORDER BY id LIMIT 5 OFFSET 5;

Tests API

Testez l'API à l'aide d'outils tels que Postman, cURL ou un navigateur Web :

  • Récupérer la première page (10 éléments) :
<code class="language-bash">curl "http://localhost:8080/items?page=1&limit=10"</code>
  • Récupérer la deuxième page (20 éléments) :
<code class="language-bash">curl "http://localhost:8080/items?page=2&limit=20"</code>

Exemple de réponse API

Un exemple de réponse pour /items?page=2&limit=2 :

<code class="language-sql">CREATE TABLE items (
    id SERIAL PRIMARY KEY,
    name TEXT NOT NULL,
    created_at TIMESTAMP DEFAULT NOW()
);</code>

Résoudre les problèmes courants

1. Pourquoi ne pas récupérer tous les enregistrements et les découper dans Go ? Ceci est très inefficace, en particulier avec de grands ensembles de données. Le chargement de millions d'enregistrements en mémoire ralentira considérablement ou fera planter l'API.

2. Gestion des paramètres manquants : Définissez toujours les valeurs par défaut (par exemple, page=1, limit=10) pour éviter les erreurs d'API.

3. Optimisation : L'indexation des colonnes fréquemment interrogées (comme id ou created_at) améliore considérablement la vitesse des requêtes.

Conclusion

La mise en œuvre de la pagination nécessite un minimum de code et d'interrogations stratégiques de la base de données, transformant une réponse API potentiellement écrasante en une expérience légère et conviviale. Pensez à ajouter des fonctionnalités telles que le nombre total de pages, les liens suivant/précédent ou la pagination basée sur le curseur pour une évolutivité améliorée dans les applications plus volumineuses. Pour d’autres ressources et mises à jour Golang, suivez Siddhesh sur Twitter et GitHub. Continuez à apprendre, continuez à construire ! ??

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:Créer de belles clés APIArticle suivant:Créer de belles clés API