Passer au contenu principal

Principe de pagination

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

  1. Effectuer la première requête
  2. Traiter les items de la page
  3. Vérifier si _next est présent et non vide
  4. Si oui, requêter _next et retourner à l’étape 2
  5. 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.