Retour catalogue
Junior~8 hingestionsoftware engineering dataops

Ingérer une API paginée, proprement

API paginée, 429, 503. Client qui ne s'écroule pas est celui qui a lu la doc avant de coder.

Contexte

Plateforme Laneway expose ses tickets de support via une API REST paginée. 8 000 tickets, 100 par page. API renvoie un `429 Too Many Requests` toutes les 50 requêtes, un `503 Service Unavailable` au bout d'une minute, et un curseur qui change de format selon la version. Bienvenue dans quotidien d'un ingestor REST en prod.

Ton job : écrire un client qui pagine proprement, respecte les `Retry-After`, fait du backoff exponentiel, et,surtout,sait reprendre exactement là où il s'est arrêté en cas de plantage. Tu pipelines en bronze (JSON brut partitionné par jour d'ingestion) puis tu projettes en silver (table DuckDB typée).

Et tu ne mets pas clé API en clair dans `config.py`. Jamais. CI le détecte et te recale.

Architecture

Stack et flow du projet

Loading diagram…

Ce que tu vas livrer

  • Module `src/ingest/laneway.py` avec `iter_pages()`, `write_bronze_page()`, `upsert_silver()`, `ingest_day()`
  • Dossier `bronze/laneway/issues/ingested_date=YYYY-MM-DD/` partitionné Hive-style
  • Base DuckDB `silver.duckdb` avec table `issues` typée selon `contracts/issues.json`
  • Aucune clé secrète committée,uniquement lecture depuis `.env`

Ce que CI vérifie

  • Pagination complète remonte les 8 000 issues sans en perdre une
  • Mock API loggue au moins 1 fire 429 et 1 fire 503,preuve que ton retry a été exercé
  • Relancer la même journée d'ingestion ne duplique pas les lignes silver
  • Aucune chaîne ressemblant à une clé API n'est trouvée en clair dans le repo
  • Schéma silver matche exactement contrat (colonnes, dtypes, nullable)

Prérequis

  • Python intermédiaire (`requests`/`httpx`, génération de dictionnaires, gestion d'exceptions)
  • SQL et DuckDB basique
  • Notion de bronze/silver,ou volonté d'apprendre

Comment ça marche

  1. 01

    Tu cliques « Commencer »

    On forke template sur ton compte GitHub. Aucune install locale, aucun Docker à débugger.

  2. 02

    Tu codes dans GitHub Codespaces

    VS Code dans ton navigateur, prêt à l'emploi : DBs locales, dépendances Python, tout dans devcontainer. 60h/mois gratuits chez GitHub.

  3. 03

    Tu pushes, CI te répond

    GitHub Actions exécute rubrique. Vert = validé. Rouge = chaque check échoué te dit ce qui manque, en français.

Information précontractuelle

  • Vendeur : Merta
  • Prix : 29 € TTC, franchise de TVA
  • Livraison : numérique, immédiate après paiement
  • Droit de rétractation : exclu après début d'exécution, voir case à cocher
  • Paiement sécurisé via Stripe

Achat soumis aux CGV.