Python: Implémentation de l'API REST avec Flask

Cette documentation fait partie du guide Création d'une API REST. Consultez le guide complet ici : Comment créer une API REST avec Flask.

👋 Bienvenue sur la documentation de Stackhero !

Stackhero propose une solution cloud Python prête à l'emploi offrant de nombreux avantages, notamment :

  • Déployez votre application en quelques secondes avec un simple git push.
  • Utilisez votre propre nom de domaine et bénéficiez de la configuration automatique des certificats HTTPS pour une sécurité renforcée.
  • Profitez de la tranquillité d'esprit avec des sauvegardes automatiques, des mises à jour en un clic, et une tarification simple, transparente et prévisible.
  • Obtenez des performances optimales et une sécurité robuste grâce à une VM privée et dédiée.

Gagnez du temps et simplifiez-vous la vie : il ne faut que 5 minutes pour essayer la solution d'hébergement cloud Python de Stackhero !

Passons maintenant au code !

Créez un fichier nommé app.py et insérez le code suivant :

import os
from dotenv import load_dotenv
from flask import Flask, jsonify, request

# Charger les variables d'environnement depuis le fichier .env lorsque nous ne sommes pas en production
if os.environ.get('ENV') != 'production':
    load_dotenv()

# Créer l'application Flask
app = Flask(__name__)

# Jeu de données d'exemple
tasks = [
    {
        'id': 1,
        'title': 'Acheter des courses',
        'description': 'Lait, Fromage, Pizza, Fruits',
        'done': False
    },
    {
        'id': 2,
        'title': 'Apprendre Python',
        'description': 'Apprendre les bases de la programmation Python',
        'done': False
    }
]

# Route '/api/tasks' (GET) pour lister toutes les tâches
@app.route('/api/tasks', methods=['GET'])
def get_tasks():
    return jsonify({'tasks': tasks})

# Route '/api/tasks/<task_id>' (GET) pour obtenir une tâche spécifique par son ID
@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 len(task) == 0:
        return jsonify({'error': 'Tâche non trouvée'}), 404
    return jsonify({'task': task[0]})

# Route '/api/tasks' (POST) pour créer une nouvelle tâche
@app.route('/api/tasks', methods=['POST'])
def create_task():
    if not request.json or 'title' not in request.json:
        return jsonify({'error': 'Le titre est requis'}), 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

# Démarrer le serveur API
if __name__ == '__main__':
    if os.environ.get('ENV') == 'production':
        app.run()
    else:
        app.run(host='0.0.0.0', port=8080, debug=True)

Pour démarrer le serveur, exécutez :

python app.py

Avec l'option host='0.0.0.0', vous pouvez également accéder à votre API en utilisant votre navigateur lorsque vous utilisez Code-Hero. Il suffit de naviguer vers http://<XXXXXX>.stackhero-network.com:8080/api/tasks, en remplaçant <XXXXXX> par votre domaine Code-Hero.