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.

Attention

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.