Python: Création d'une API REST
Guide étape par étape pour bâtir une API REST avec Flask en Python
👋 Bienvenue dans la documentation Stackhero !
Stackhero offre une solution Python cloud clé en main conçue pour simplifier vos déploiements :
- Déployez votre application en production en quelques secondes grâce à un simple
git push.- Utilisez votre propre nom de domaine, avec une configuration automatique du certificat HTTPS pour des connexions sécurisées gérées pour vous.
- Profitez de sauvegardes automatiques, de mises à jour en un clic et d'une tarification prévisible, afin que vous puissiez vous concentrer sur votre code plutôt que sur la gestion de l'infrastructure.
- Bénéficiez d'une performance et d'une sécurité accrues sur une infrastructure privée et dédiée. Votre environnement est isolé et protégé.
Gagnez du temps et simplifiez votre workflow : votre code peut être en ligne avec l'hébergement Python cloud de Stackhero en seulement 5 minutes.
Ce guide vous explique comment créer une API REST simple en utilisant Python et Flask. Flask est un micro-framework léger qui facilite la création rapide d'applications web et d'APIs.
Prérequis
Avant de commencer, assurez-vous d'avoir installé les outils suivants :
- Python
- pip
- git
- asdf
Si vous avez besoin d'aide pour configurer votre environnement, consultez le guide Development platform. Vous pouvez aussi commencer à coder immédiatement avec la plateforme en ligne Code-Hero. Code-Hero offre un IDE et un terminal en ligne, avec tous les outils essentiels déjà installés. Cela vous permet de vous concentrer sur votre code plutôt que sur l'installation et la configuration.
API REST Python exécutée dans Code-Hero, accessible directement depuis le navigateur
Création d'un nouveau projet
Commencez par créer un nouveau dossier de projet. Dans cet exemple, le projet s'appelle myRestApi :
mkdir myRestApi
cd myRestApi
Définissez la version de Python sur la plus récente disponible avec asdf, puis initialisez un dépôt Git :
asdf install python latest \
&& asdf local python latest
echo "__pycache__/" >> .gitignore
git init
git add -A .
git commit -m "First commit"
Installation de la dépendance Flask
Vous n'avez besoin que d'une seule dépendance principale pour cet exemple : Flask.
Flask est conçu pour être simple et rapide, afin que vous puissiez créer et déployer des APIs web sans surcharge inutile. Il intègre nativement la gestion du routage, des templates et des requêtes HTTP, ce qui vous permet de passer de l'idée à une API fonctionnelle en quelques minutes.
Vous pouvez installer Flask et python-dotenv avec pip :
pip install Flask python-dotenv
Nous incluons
python-dotenvpour gérer les variables d'environnement de façon sécuritaire et pratique. Vous verrez son utilisation dans les étapes suivantes.
Après l'installation, figez vos dépendances dans un fichier requirements.txt :
pip freeze > requirements.txt
Figer les dépendances garantit que tout le monde utilise les mêmes versions de packages. Ce petit geste peut vous éviter des heures de dépannage plus tard.
Implémentation de l'API REST avec Flask
Vous êtes maintenant prêt à écrire le code de votre API.
Créez un fichier nommé app.py et ajoutez ce code :
import os
from dotenv import load_dotenv
from flask import Flask, jsonify, request
# Charger les variables d'environnement depuis .env pour les environnements hors production
if os.environ.get('ENV') != 'production':
load_dotenv()
app = Flask(__name__)
# Exemple de données de tâches
tasks = [
{
'id': 1,
'title': 'Buy groceries',
'description': 'Milk, Cheese, Pizza, Fruits',
'done': False
},
{
'id': 2,
'title': 'Learn Python',
'description': 'Learn Python programming basics',
'done': False
}
]
@app.route('/api/tasks', methods=['GET'])
def get_tasks():
return jsonify({'tasks': tasks})
@app.route('/api/tasks/<int:task_id>', methods=['GET'])
def get_task(task_id):
task = [task for task in tasks if task['id'] == task_id]
if not task:
return jsonify({'error': 'Task not found'}), 404
return jsonify({'task': task[0]})
@app.route('/api/tasks', methods=['POST'])
def create_task():
if not request.json or 'title' not in request.json:
return jsonify({'error': 'Title is required'}), 400
task = {
'id': tasks[-1]['id'] + 1,
'title': request.json['title'],
'description': request.json.get('description', ""),
'done': False
}
tasks.append(task)
return jsonify({'task': task}), 201
if __name__ == '__main__':
if os.environ.get('ENV') == 'production':
app.run()
else:
app.run(host='0.0.0.0', port=8080, debug=True)
Vous pouvez démarrer le serveur avec :
python app.py
Avec
host='0.0.0.0', votre API est accessible via votre navigateur lorsque vous utilisez Code-Hero. Rendez-vous surhttp://<XXXXXX>.stackhero-network.com:8080/api/tasks, en remplaçant<XXXXXX>par votre domaine Code-Hero.
Tester votre API REST
Une fois le serveur lancé, vous pouvez interagir avec votre API en utilisant cURL. Voici quelques exemples de commandes :
-
Récupérer toutes les tâches :
curl -s http://localhost:8080/api/tasks # Output: # { # "tasks": [ # ... # ] # } -
Récupérer une tâche spécifique (ID 2) :
curl -s http://localhost:8080/api/tasks/2 # Output: # { # "task": { # ... # } # } -
Créer une nouvelle tâche :
curl -s -X POST -H "Content-Type: application/json" \ -d '{"title": "New task", "description": "Created with cURL"}' \ http://localhost:8080/api/tasks # Output: # { # "task": { # ... # } # }
Astuce : Pour un affichage plus lisible, vous pouvez passer le résultat à
jq. Par exemple,curl -s http://localhost:8080/api/tasks/2 | jqrend le JSON plus facile à lire.
Exemple d'API REST Python avec Flask, exécutée dans Stackhero Code-Hero, avec le serveur (1) et le client utilisant cURL (2)
Gestion des variables d'environnement
Les variables d'environnement vous aident à protéger des secrets comme les mots de passe de base de données ou les clés API. Leur utilisation permet de garder les données sensibles hors de votre code source et de l'historique Git, et facilite la gestion de paramètres différents selon l'environnement.
Pour gérer les variables d'environnement, vous pouvez utiliser le module python-dotenv. Si vous avez sauté l'étape d'installation précédente, vous pouvez l'installer maintenant :
pip install python-dotenv
pip freeze > requirements.txt
Créez un fichier .env à la racine de votre projet et ajoutez vos variables d'environnement de développement :
ENV="development"
DATABASE_PASSWORD="secretPassword"
THIRD_API_PRIVATE_KEY="secretKey"
Ajoutez .env à votre .gitignore pour éviter de le committer dans Git :
echo ".env" >> .gitignore
Vous pouvez accéder à ces variables dans Python avec os.environ.get() :
import os
print(os.environ.get('ENV'))
Le fichier
.envest réservé au développement. Pour la production ou le staging, vous pouvez définir les variables d'environnement directement dans votre tableau de bord Stackhero, dans la configuration de votre service Python.
Préparer Python et Flask pour la mise en production
Le serveur intégré de Flask est idéal pour le développement. En production, il est recommandé d'utiliser un serveur WSGI robuste comme Gunicorn. Voici comment vous préparer :
-
Installez Gunicorn :
pip install gunicorn pip freeze > requirements.txt -
Lancez votre application avec Gunicorn :
ENV=production gunicorn app:app \ --error-logfile - \ -b 0.0.0.0:8080Ici,
app:appfait référence à votre fichier (app.py) et à l'instance de l'application Flask (app). -
Vous pouvez ajouter un
Makefilepour basculer facilement entre les modes développement et production :.DEFAULT_GOAL := dev # Stackhero for Python exécute la règle "run" par défaut. Nous la redéfinissons pour lancer 'prod'. run: prod prod: ENV=production gunicorn app:app \ --error-logfile - \ -b 0.0.0.0:8080 dev: python app.py
Vous pouvez démarrer le serveur en mode développement avec make dev (ou simplement make), ou en mode production avec make prod.
Déployer votre code Python en production
Stackhero simplifie et sécurise le déploiement cloud. Vous pouvez déployer votre projet Python avec le service Python cloud hosting. Les fonctionnalités incluent :
- Déploiement par simple
git push - TLS (HTTPS) automatique avec domaines personnalisables
- Infrastructure dédiée pour la sécurité
- Support de HTTP/2, TLS 1.3, WebSockets, GZIP & Brotli, ETag, et accès aux ports TCP/UDP
Configuration du service "Stackhero for Python"
Pour déployer, suivez ces étapes :
-
Récupérez votre clé publique SSH :
cat ~/.ssh/id_*.pub -
Dans le tableau de bord Stackhero, ouvrez votre service "Stackhero for Python" et sélectionnez "Configurer".
-
Collez votre clé publique dans le champ "SSH public keys" ou "Key".
-
Cliquez sur "Valider" pour confirmer votre configuration.
Configuration de la clé publique pour "Stackhero for Python"
Si vous n'avez pas encore de clés SSH, vous pouvez les générer avec :
ssh-keygen -t ed25519
Ajoutez un remote Git à votre projet avec la commande fournie dans votre service Stackhero (remplacez <XXXXXX> par le domaine de votre service) :
git remote add stackhero ssh://stackhero@<XXXXXX>.stackhero-network.com:222/project.git
Commande Git remote
Déployer en production
Lorsque vous êtes prêt à déployer, poussez votre code avec :
git push stackhero main
Pensez à committer vos modifications avant de déployer. Dans Stackhero Code-Hero, vous pouvez utiliser la Command Palette (
Ctrl+Shift+PouCmd+Shift+P) et taperGit: Commitpour des commits rapides.
Après le déploiement, votre API est disponible à l'adresse https://<XXXXXX>.stackhero-network.com/api/tasks. Remplacez <XXXXXX> par le domaine de votre service pour accéder à votre API Flask.
Conclusion
Vous disposez maintenant d'une API REST fonctionnelle bâtie avec Flask. Avec cette base, il est facile de faire évoluer votre application, de la connecter à des bases de données ou de l'intégrer à d'autres services. Flask vous offre la flexibilité nécessaire pour passer d'un simple prototype à une API de production complète.