Concevoir une API REST
Ce cours est distribué gratuitement sous licence CC BY-NC-SA 4.0 par Thibaud FRICHET - formation.tfrichet.fr
Prérequis :
- Bases de Python,
- Utilisation de la ligne de commande.
Chapitre 1 - Le web et HTTP
Petite histoire des API
Aujourd'hui, la plupart des usages numériques (lire ses mails, poster du contenu, utiliser une IA...
Anatomie d'une requête HTTP
HTTP (HyperText Transfer Protocol) est le protocole du web. Le principe est simple : un client en...
Qu'est-ce qu'une API distante ?
API signifie Application Programming Interface : une interface qui permet à un programme d'utilis...
Panorama : REST, SOAP, GraphQL et les autres
REST n'est pas la seule façon de construire une API. Voici les principales, avec le même besoin à...
TP : Trouver l'API cachée d'un site
Objectif Beaucoup de sites modernes sont des SPA : le navigateur charge une page quasi vide, pui...
Chapitre 2 - Les principes REST
Les 6 contraintes REST
REST (REpresentational State Transfer) n'est ni un protocole ni une norme : c'est un style d'arch...
Ressources, URI et représentations
Les ressources Une ressource est tout ce qui mérite d'avoir un nom et une adresse : un utilisate...
Les verbes HTTP
Les verbes (ou méthodes) HTTP indiquent l'action à effectuer sur la ressource désignée par l'URI....
Les codes de statut
Le code de statut est la première chose qu'un client regarde. Un bon code évite au client de devo...
Le modèle de maturité de Richardson
En 2008, Leonard Richardson propose un modèle en 4 niveaux pour mesurer à quel point une API expl...
Chapitre 3 - Outils et fil rouge
Bienvenue au bar API-ritif 🍹
Tout au long de ce cours, nous allons fréquenter un établissement très particulier : API-ritif, l...
curl, Bruno et Postman
Pour parler à une API, pas besoin d'écrire du code : des outils permettent d'envoyer des requêtes...
TP : La chasse au trésor
Objectif Le barman d'API-ritif a caché un trésor quelque part dans son API. Pour le trouver, il ...
Chapitre 4 - Consommer une API en code
Appeler une API avec requests
curl et Bruno, c'est bien pour explorer. Mais pour automatiser, il faut appeler l'API depuis du c...
Pagination, erreurs, 401 et 429
Un script qui marche sur la première page, avec un serveur de bonne humeur, c'est facile. Un scri...
Les machines consomment aussi vos API
Jusqu'ici, les clients de nos API étaient des programmes écrits par des humains. Depuis l'arrivée...
TP : Script de statistiques
Objectif Pendant la chasse au trésor, toute la promo a passé des commandes au bar. Le patron d'AP...
Chapitre 5 - Concevoir une API
Nommer les ressources et les routes
Une URL est la première chose qu'un développeur voit de votre API. Si elle est claire, il devine ...
Filtres, tri et pagination
Une collection peut contenir des milliers d'éléments. Le client doit pouvoir n'en demander qu'une...
Versioning
Une API publiée a des clients que vous ne connaissez pas : des applications mobiles qui ne seront...
Les erreurs avec problem+json
Le code de statut dit qu'il y a une erreur. Le body doit dire laquelle, et comment la corriger. P...
Exercice : L'API du stagiaire de 2009
Objectif En rangeant la réserve du bar, le patron d'API-ritif a retrouvé une clé USB étiquetée « ...
Chapitre 6 - Documenter avec OpenAPI
Lire un contrat OpenAPI
Pendant la chasse au trésor, vous avez découvert API-ritif à tâtons, en lisant les réponses une p...
Structure YAML et schémas
YAML en 30 secondes YAML est un format de données lisible, basé sur l'indentation (des espaces, j...
Code-first ou design-first
Le contrat et le code doivent dire la même chose. Mais lequel écrit-on en premier ? Code-first O...
Swagger UI, Redoc et Scalar
Un contrat en YAML, c'est précis mais austère. Des outils le transforment en une documentation ag...
Générer des clients
Un contrat OpenAPI est lisible par les machines. Elles peuvent donc écrire à votre place le code ...
Chapitre 7 - Exposer une API
Premiers pas avec FastAPI
Assez consommé : passons derrière le comptoir. Dans ce chapitre, on construit une API en Python a...
Routes, paramètres et body
On construit une mini carte de cocktails, stockée en mémoire. Elle disparaît au redémarrage du se...
Validation et codes de retour
À la page précédente, FastAPI refusait déjà un prix en lettres ou un nom manquant, mais avec son ...
TP : Les avis
Objectif Le patron d'API-ritif veut recueillir l'avis de ses clients. Le contrat est déjà écrit (...
Pour aller plus loin : persistance et mock
Persister les données avec SQLite Nos données en mémoire disparaissent à chaque redémarrage. SQLi...
Chapitre 8 - Sécurité et bonnes pratiques
L'authentification
Authentification ou autorisation ? Authentification : qui es-tu ? L'échec donne un 401 Unauthori...
HTTPS et CORS
HTTPS : non négociable En HTTP, tout circule en clair : l'URL, les headers, le body. Sur le Wi-Fi...
Le rate limiting
Une API sans limite finit toujours par recevoir trop de requêtes : un script en boucle infinie, u...
L'OWASP API Security Top 10
L'OWASP (Open Worldwide Application Security Project) est une fondation qui publie des références...
Challenges : IDOR et BOPLA
Objectif Le barman d'API-ritif a laissé passer deux failles de l'OWASP Top 10 dans son API. À vou...
Pour aller plus loin : cache, idempotence et webhooks
Le cache HTTP avec ETag Pourquoi retélécharger la carte si elle n'a pas changé ? Le serveur assoc...
Chapitre 9 - HATEOAS
Les liens hypermédias
Sur un site web, vous ne tapez jamais d'URL à la main : vous arrivez sur la page d'accueil et vou...
HAL et JSON:API
REST dit qu'il faut des liens, mais pas comment les écrire. Plusieurs formats se sont imposés. Vo...
Des liens qui dépendent de l'état
C'est là que HATEOAS devient vraiment utile : les liens ne décrivent pas seulement les ressources...
Pourquoi HATEOAS est rare
Fielding le répète depuis 2008 : sans hypermédia, ce n'est pas REST. Pourtant, la grande majorité...