Pour une API REST, on a souvent 5 fonctions pour la même URL (get, post, put, delete...).
Faire ça avec @app.route devient vite brouillon.
Flask propose les MethodView. On regroupe tout dans une Classe.
from flask.views import MethodView
class UserAPI(MethodView):
def get(self, user_id):
if user_id is None:
# logiques pour retourner tous les users
return "Liste des users"
else:
# logique pour retourner un seul user
return f"User {user_id}"
def post(self):
# Créer un user
return "User créé", 201
def delete(self, user_id):
# Supprimer un user
return "User supprimé", 204
def put(self, user_id):
# Modifier
return "User modifié"
Enregistrement de la route
C'est un peu verbeux, mais ça permet de gérer les URL intelligemment.
user_view = UserAPI.as_view('user_api')
# Route pour /users (GET all, POST)
app.add_url_rule('/users/', defaults={'user_id': None},
view_func=user_view, methods=['GET', 'POST'])
# Route pour /users/1 (GET one, PUT, DELETE)
app.add_url_rule('/users/<int:user_id>', view_func=user_view,
methods=['GET', 'PUT', 'DELETE'])
C'est la manière "Pythonique" et Orientée Objet de faire des API propres.