Pourquoi créer une API REST avec Flask en NSI ?
Tu te demandes peut-être à quoi sert une API dans la vraie vie ? Imagine une application météo sur ton téléphone. Elle ne contient pas toutes les données météo du monde, elle les demande à un serveur via une API (Application Programming Interface). En NSI, créer une API avec Flask est un projet formidable pour comprendre le web moderne, consolider tes compétences en Python et réaliser quelque chose de concret. C'est exactement le type de projet qui impressionne dans un portfolio pour Parcoursup ou une future école d'informatique.
Une API REST (Representational State Transfer) suit des principes simples : elle utilise les verbes HTTP (GET, POST, PUT, DELETE) pour manipuler des ressources (comme des articles, des utilisateurs, des produits) généralement au format JSON. Avec Flask, un micro-framework Python léger et puissant, tu vas pouvoir mettre en œuvre ces concepts en quelques lignes de code.
Mise en place de ton environnement de développement
Avant de coder, il faut préparer ton terrain de jeu. On va utiliser un environnement virtuel, une bonne pratique en Python pour isoler les dépendances de ton projet.
Étape 1 : Installation de Flask
Ouvre ton terminal (ou l'invite de commandes sur Windows) et suis ces instructions :
- Crée un dossier pour ton projet :
mkdir mon_api_flaskpuiscd mon_api_flask. - Crée un environnement virtuel :
python -m venv venv(oupython3sur Mac/Linux). - Active-le :
- Sur Windows :
venv\Scripts\activate - Sur Mac/Linux :
source venv/bin/activate
- Sur Windows :
- Installe Flask :
pip install flask
Tu peux maintenant créer un fichier app.py à la racine de ton dossier. C'est ici que toute la magie va opérer.
Les fondations : Ta première route et la gestion des données
Commençons simple. Une API a besoin de données à servir. Pour ce tutoriel, on va simuler une petite base de données en mémoire : une liste de livres.
Définir les données et la route GET
Dans app.py, écris ce code :
from flask import Flask, jsonify, request
app = Flask(__name__)
# Notre "base de données" simulée
livres = [
{'id': 1, 'titre': 'Le Petit Prince', 'auteur': 'Antoine de Saint-Exupéry'},
{'id': 2, 'titre': '1984', 'auteur': 'George Orwell'}
]
@app.route('/livres', methods=['GET'])
def get_livres():
return jsonify(livres)
if __name__ == '__main__':
app.run(debug=True)Exécute ton script avec python app.py. Ouvre ton navigateur et va sur http://127.0.0.1:5000/livres. Bravo ! Tu viens de créer ton premier endpoint d'API. La fonction jsonify() de Flask transforme ta liste Python en JSON, le langage universel des APIs.
Implémenter les autres verbes HTTP (POST, PUT, DELETE)
Une API REST complète permet de créer, lire, mettre à jour et supprimer des ressources (CRUD).
POST : Ajouter un nouveau livre
Ajoute cette route pour créer un livre. On utilise request.get_json() pour récupérer les données envoyées par le client (comme un formulaire, mais en JSON).
@app.route('/livres', methods=['POST'])
def add_livre():
nouveau_livre = request.get_json()
# On lui attribue un ID simple
nouveau_livre['id'] = max(livre['id'] for livre in livres) + 1
livres.append(nouveau_livre)
return jsonify(nouveau_livre), 201 # Code 201 pour "Created"Pour tester cette route, tu auras besoin d'un outil comme Postman ou Insomnia, ou tu peux utiliser la ligne de commande avec curl. C'est l'occasion de découvrir ces outils indispensables aux développeurs d'API !
GET par ID, PUT et DELETE
Voici comment compléter ton API pour gérer un livre spécifique :
# GET un livre par son ID
@app.route('/livres/<int:livre_id>', methods=['GET'])
def get_livre(livre_id):
livre = next((l for l in livres if l['id'] == livre_id), None)
if livre is None:
return jsonify({'erreur': 'Livre non trouvé'}), 404
return jsonify(livre)
# PUT pour mettre à jour un livre
@app.route('/livres/<int:livre_id>', methods=['PUT'])
def update_livre(livre_id):
livre = next((l for l in livres if l['id'] == livre_id), None)
if livre is None:
return jsonify({'erreur': 'Livre non trouvé'}), 404
donnees = request.get_json()
livre.update(donnees)
return jsonify(livre)
# DELETE pour supprimer un livre
@app.route('/livres/<int:livre_id>', methods=['DELETE'])
def delete_livre(livre_id):
global livres
livres = [l for l in livres if l['id'] != livre_id]
return '', 204 # Code 204 pour "No Content" (succès mais pas de réponse)Astuce NSI : La syntaxe <int:livre_id> dans la route est un convertisseur de Flask. Il capture une partie de l'URL et la convertit directement en entier pour ta fonction.
Prochaines étapes et bonnes pratiques
Félicitations, ton API fonctionne ! Pour aller plus loin et en faire un projet solide, voici quelques pistes :
- Utiliser une vraie base de données : Remplace la liste
livrespar SQLite (avec le modulesqlite3intégré à Python) ou une librairie comme SQLAlchemy. - Structurer ton projet : Pour des APIs plus grosses, sépare les routes, les modèles de données et la logique dans différents fichiers (
routes.py,models.py). - Gérer les erreurs proprement : Utilise le décorateur
@app.errorhandler(404)pour renvoyer de jolis messages d'erreur en JSON. - Sécuriser ton API : Explore des extensions Flask comme
Flask-JWT-Extendedpour ajouter une authentification par tokens (un concept avancé mais très important).
N'oublie pas de documenter ton API ! Tu peux noter sur un README.md les endpoints disponibles, leurs méthodes et les formats de données attendus. C'est une compétence professionnelle très valorisée.
