Les ressources retournant beaucoup de résultats sont automatiquement paginées pour optimiser les performances.
Utilisation du champ _next
Le champ _next dans la réponse contient l’URL de la page suivante.
Exemple de réponse paginée
{
"_status": "OK",
"_self": "/restapi/v1/job",
"_schema": "/restapi/schemav1/jobs",
"_next": "/restapi/v1/job?pagecursor=42",
"items": [
{
"id": 1,
"title": "Développeur Full-Stack",
"_self": "/restapi/v1/job/1"
},
{
"id": 2,
"title": "Chef de projet",
"_self": "/restapi/v1/job/2"
}
]
}
Parcourir toutes les pages
Algorithme de base
- Effectuer la première requête
- Traiter les
items de la page
- Vérifier si
_next est présent et non vide
- Si oui, requêter
_next et retourner à l’étape 2
- Si non, toutes les pages ont été parcourues
Exemple en Python
import requests
def fetch_all_pages(url, auth):
"""Récupère tous les éléments d'une ressource paginée"""
all_items = []
while url:
response = requests.get(url, auth=auth)
data = response.json()
if data.get('_status') != 'OK':
break
all_items.extend(data.get('items', []))
url = data.get('_next', '')
return all_items
# Utilisation
jobs = fetch_all_pages(
'https://jobaffinity.fr/restapi/v1/job',
auth=('login', 'password')
)
Exemple en Shell
#!/bin/bash
URL="https://jobaffinity.fr/restapi/v1/job"
AUTH="login:password"
while [ ! -z "$URL" ]; do
RESPONSE=$(curl -s --basic --user "$AUTH" "$URL")
# Traiter les items
echo "$RESPONSE" | jq '.items[]'
# Obtenir l'URL suivante
URL=$(echo "$RESPONSE" | jq -r '._next // empty')
done
Ressources paginées
Les ressources suivantes sont paginées :
- Collection de jobs (
/restapi/v1/job)
- Collection de candidats (
/restapi/v1/candidate)
- Collection de candidatures par job (
/restapi/v1/job/{id}/application)
- Collection de candidatures par candidat (
/restapi/v1/candidate/{id}/application)
- Collection des changements d’étapes (
/restapi/v1/step)
- Collection des notes (
/restapi/v1/note)
- Historique des webhooks (
/restapi/v1/webhook/task)
Ressources non paginées
Certaines ressources retournent toutes les données en une seule réponse :
- Détails d’un job (
/restapi/v1/job/{id})
- Détails d’un candidat (
/restapi/v1/candidate/{id})
- Détails d’une candidature (
/restapi/v1/application/{id})
- Équipe d’un job (
/restapi/v1/job/{id}/team)
- Liste des processus (
/restapi/v1/process)
N’essayez pas de deviner la taille des pages ou de manipuler le curseur de pagination. Utilisez toujours l’URL fournie par _next.