Technologie - FastAPI : des API Python rapides, typées et documentées

FastAPI est un framework Python dédié aux API. Il s'appuie sur les annotations de type de Python pour valider les données, générer la documentation et détecter les erreurs avant la mise en production. Naeka l'utilise quand un projet a besoin d'une API légère et performante plutôt que d'une application web complète.

Développement FastAPI - Expert FastAPI Naeka

Qu'est-ce que FastAPI ?

FastAPI est un framework web Python sorti en 2018. Il repose sur deux bibliothèques : Starlette pour la partie HTTP et asynchrone, et Pydantic pour la validation des données.

Prenons une route qui crée une commande. Avec FastAPI, on décrit la commande attendue dans une classe Python : un identifiant client entier, une liste de produits, une date de livraison. Si un appel arrive avec une date au mauvais format ou un champ manquant, FastAPI répond tout seul une erreur 422 qui indique le champ en cause, sans qu'on ait écrit une ligne de validation. La même classe sert à générer la documentation de l'API.

Ce qui le distingue :

  • la validation par les types : les annotations Python décrivent les données, et Pydantic les vérifie à chaque requête
  • une documentation OpenAPI générée automatiquement, consultable dans Swagger UI ou ReDoc, toujours à jour puisqu'elle sort du code
  • l'asynchrone natif (ASGI), utile quand l'API passe son temps à attendre une base de données ou un service tiers
  • l'injection de dépendances, qui sert à partager proprement une connexion à la base, l'utilisateur authentifié ou une configuration entre les routes
  • l'autocomplétion et les vérifications statiques (mypy, Pyright), qui fonctionnent sur tout le code grâce aux types

FastAPI ou Django ?

Les deux sont en Python et les deux font des API. Le choix dépend de ce que vous construisez.

FastAPI convient bien à un service qui ne fait que de l'API : un microservice, une API appelée par une application mobile, un service qui expose un modèle de Machine Learning, ou une passerelle qui agrège plusieurs services tiers. Il est léger et démarre vite.

Django avec Django REST framework convient mieux quand l'application a besoin d'un back-office, d'une gestion fine des utilisateurs et des droits, et d'un modèle de données riche. Django fournit tout ça, alors qu'avec FastAPI il faut assembler soi-même l'ORM, les migrations et l'administration.

Il arrive aussi qu'on utilise les deux : une application Django pour le cœur métier et le back-office, et un service FastAPI à côté pour une tâche précise.


Ce que nous faisons avec FastAPI

Conception et développement d'API

Nous partons des usages : qui appelle l'API, avec quelles données, et ce qui doit se passer en cas d'erreur. À partir de là, nous concevons les routes et les schémas Pydantic, puis nous écrivons le code et les tests. La documentation OpenAPI sert de contrat avec les équipes qui consomment l'API.

La stack autour de FastAPI

FastAPI ne fournit pas de couche base de données. Nous utilisons en général :

  • SQLAlchemy ou SQLModel pour l'accès à PostgreSQL
  • Alembic pour les migrations de schéma
  • Redis pour le cache et les files d'attente, avec Celery ou un équivalent pour les tâches longues
  • OAuth2 et JWT pour l'authentification, avec les outils de sécurité intégrés à FastAPI
  • pytest et le client de test de FastAPI pour les tests

Exposer un modèle d'IA

FastAPI est souvent le choix naturel pour mettre un modèle de Machine Learning à disposition d'une application : le modèle est chargé une fois au démarrage, l'API reçoit les données, les valide et renvoie la prédiction. C'est une des briques de nos projets d'intelligence artificielle.

Déploiement et exploitation

Une API FastAPI tourne derrière un serveur ASGI comme Uvicorn. Nous la conteneurisons et la déployons sur Kubernetes avec une approche GitOps, avec des métriques, des logs structurés et des alertes pour suivre ce qui se passe en production.


Parlons de votre API

Vous avez un service à exposer, une API à concevoir ou une API existante à fiabiliser ? Contactez-nous. Pour une vue plus large de ce que nous faisons en Python, consultez notre page Python.