Pagination et filtrage
Les procédures de liste de l'API Inklura ne partagent pas un contrat de pagination unique. Chaque router définit ses propres entrées et la forme de sa réponse : vérifiez toujours la procédure que vous appelez.
Formes courantes
Les entrées que vous rencontrerez le plus souvent :
| Forme | Entrées | Exemple |
|---|---|---|
| Page et limite | page, limit |
products.list |
| Page et taille de page | page, per_page (ou pageSize ailleurs) |
orders.getOrders |
| Décalage et limite | offset, limit |
invoices.getInvoices |
| Curseur | cursor, limit |
reviews.listPendingReviews |
La numérotation des pages varie aussi : products.list et orders.getOrders comptent les
pages à partir de 0.
Exemple : products.list
products.list prend une page numérotée à partir de 0 (par défaut 0) et une limit (par
défaut 10), ainsi que des filtres et un tri facultatifs :
curl -G "https://manage.inklura.fr/api/trpc/products.list" \
-H "Authorization: Bearer $INKLURA_TOKEN" \
--data-urlencode 'input={"json":{"page":1,"limit":50,"search":"miel","sortBy":"name","sortOrder":"asc"}}'
Elle renvoie la page d'éléments avec des métadonnées de pagination, sous result.data.json
comme toujours :
{
"result": {
"data": {
"json": {
"items": [ { "id": "…" } ],
"total": 137,
"page": 1,
"limit": 50,
"pages": 3
}
}
}
}
items: la page de résultats.total: le nombre total d'éléments correspondants.page/limit: les valeurs appliquées.pages: le nombre de pages.
sortBy accepte name, price, salePrice, stock, reference, active, menuOrder et
updatedAt, dans le sens donné par sortOrder (asc ou desc, par défaut desc). Toute
autre valeur, y compris la valeur par défaut createdAt, trie par date de création, les plus
récents d'abord.
Exemple : orders.getOrders
orders.getOrders prend une page à partir de 0 (par défaut 0) et un per_page (par
défaut 10, au plus 10000), avec une recherche search et un tri sort facultatifs :
curl -G "https://manage.inklura.fr/api/trpc/orders.getOrders" \
-H "Authorization: Bearer $INKLURA_TOKEN" \
--data-urlencode 'input={"json":{"page":0,"per_page":25}}'
La réponse, sous result.data.json, n'a pas la même forme que celle de products.list :
{
"data": [ { "id": "…" } ],
"total": 412,
"page": 0,
"pageSize": 25,
"pageCount": 17,
"hasNextPage": true,
"hasPrevPage": false
}
Ici les éléments sont dans data, et hasNextPage vous dit s'il faut demander la page
suivante.
Exemple : invoices.getInvoices
invoices.getInvoices pagine par décalage : limit (de 1 à 100, par défaut 50) et offset
(par défaut 0). Par défaut, elle renvoie un simple tableau de documents. Passez
includeTotal: true pour obtenir { "items": […], "total": … } et connaître le nombre total
de documents correspondants :
curl -G "https://manage.inklura.fr/api/trpc/invoices.getInvoices" \
-H "Authorization: Bearer $INKLURA_TOKEN" \
--data-urlencode 'input={"json":{"limit":50,"offset":100,"type":"INVOICE","includeTotal":true,"sort":"invoiceDate:desc"}}'
sort s'écrit champ:asc ou champ:desc, avec invoiceNumber, invoiceDate, createdAt,
dueDate, subTotal, totalAmount, invoiceStatus ou client. Un champ inconnu garde
l'ordre par défaut (les plus récents d'abord).
Pagination par curseur
reviews.listPendingReviews renvoie au plus limit éléments (de 1 à 200, par défaut 50) sous
forme de simple tableau, les plus récents d'abord. Pour la page suivante, passez dans cursor
l'id du dernier élément reçu. Une page plus courte que limit signale la fin de la liste.
Toutes les procédures de liste ne paginent pas, et celles qui le font nomment et structurent
leurs entrées et leur réponse différemment. Vérifiez le contrat de chaque procédure plutôt que
de supposer l'une des formes ci-dessus. Une valeur hors des bornes (par exemple une limit de
500 sur invoices.getInvoices) fait échouer l'appel avec BAD_REQUEST (voir
Erreurs et limites de débit).
Filtrage et recherche
Les entrées de filtrage et de recherche varient elles aussi selon le router. Beaucoup de
procédures de liste acceptent une chaîne search et des filtres de statut (products.list
accepte search, active, isBuyable, categoryId, vendorId et packagingTypeId ;
invoices.getInvoices accepte search, status et type), mais les filtres disponibles et
leurs noms dépendent du domaine. Consultez la procédure dans le
catalogue des routers.