Maison >développement back-end >Golang >Comment paginer les réponses de l'API dans Go
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.
Pensez à 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.
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é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>
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=5
→ offset=0
(sauter 0 enregistrement).page=2
, limit=5
→ offset=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;
Testez l'API à l'aide d'outils tels que Postman, cURL ou un navigateur Web :
<code class="language-bash">curl "http://localhost:8080/items?page=1&limit=10"</code>
<code class="language-bash">curl "http://localhost:8080/items?page=2&limit=20"</code>
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>
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.
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!