Paginación
Recorrido de listados con page y per_page, y lectura de links y meta.
En esta página
Todos los listados se paginan igual: la página se indica con page y su tamaño con per_page.
| Parámetro | Valor |
|---|---|
page | Número de página, desde 1. Valor por omisión: 1. |
per_page | De 1 a 100. Valor por omisión: 25. Un valor mayor se toma como 100. |
Estructura de la respuesta
links.nextesnullen la última página. Los enlaces conservan los filtros y el orden de la solicitud.meta.totalcuenta los elementos con los filtros aplicados.meta.linkscontiene enlaces de página para interfaces; una integración no necesita leerlos.
{
"data": [ { "id": 101, "item_code": "P-1001" }, { "id": 102, "item_code": "P-1002" } ],
"links": {
"first": "https://empresa.chainlink.mx/api/v1/products?per_page=2&page=1",
"last": "https://empresa.chainlink.mx/api/v1/products?per_page=2&page=44",
"prev": null,
"next": "https://empresa.chainlink.mx/api/v1/products?per_page=2&page=2"
},
"meta": { "current_page": 1, "from": 1, "last_page": 44, "path": "https://empresa.chainlink.mx/api/v1/products", "per_page": 2, "to": 2, "total": 87, "links": [] }
}
Recorrido de un listado completo
Siga links.next hasta que sea null. Ordene por un campo estable para que las páginas no cambien durante la lectura; la API desempata por id.
Sincronización incremental
Para mantener otro sistema al día, lea solo lo que cambió conupdated_since (ver filtros, orden y sincronización) y respete los límites por minuto.
curl "https://empresa.chainlink.mx/api/v1/products?per_page=100&sort=item_code" \
-H "Authorization: Bearer $CHAINLINK_TOKEN" \
-H "Accept: application/json"
$url = 'https://empresa.chainlink.mx/api/v1/products?per_page=100&sort=item_code';
$client = new \GuzzleHttp\Client();
while ($url !== null) {
$page = json_decode((string) $client->get($url, [
'headers' => ['Authorization' => 'Bearer ' . getenv('CHAINLINK_TOKEN'), 'Accept' => 'application/json'],
])->getBody(), true);
foreach ($page['data'] as $product) {
// Procesar cada producto.
}
$url = $page['links']['next'];
}
let url = 'https://empresa.chainlink.mx/api/v1/products?per_page=100&sort=item_code';
while (url) {
const response = await fetch(url, {
headers: { Authorization: `Bearer ${process.env.CHAINLINK_TOKEN}`, Accept: 'application/json' },
});
const page = await response.json();
for (const product of page.data) {
// Procesar cada producto.
}
url = page.links.next;
}
import os
import requests
url = "https://empresa.chainlink.mx/api/v1/products?per_page=100&sort=item_code"
headers = {"Authorization": f"Bearer {os.environ['CHAINLINK_TOKEN']}", "Accept": "application/json"}
while url:
page = requests.get(url, headers=headers).json()
for product in page["data"]:
pass # Procesar cada producto.
url = page["links"]["next"]