Mon API Rest en Python avec Falcon (1/2)
Dans un précédent article consacré a l'écosystème JavaScript, nous prenions l'exemple d'une application de gestion des interventions. Nous partons aujourd'hui à la découverte du design d'API REST en Python sur la base du même exemple.
L'architecture REST
Une API (Application Programming Interface) est une façon qu'offre une application d'ouvrir ses services à d'autres applications. Comprenez par la qu'une API est au développeur ce qu'une interface graphique est à l'utilisateur.
REST (Representational State Transfer) est donc un style d’architecture permettant de construire des applications web en s'appuyant sur des verbes fournies par le protocole HTTP. Les verbes HTTP principaux ou les plus couramment utilisés (ou méthodes, comme ils sont correctement appelés) sont POST, GET, PUT, PATCH et DELETE. Ceux-ci correspondent respectivement aux opérations de création, lecture, mise à jour et suppression (ou CRUD). Il existe également d'autres verbes utilisés moins souvent comme OPTIONS ou HEAD.
De plus, une API peut être considérée comme «RESTful» si elle présente (notamment) les caractéristiques suivantes:
- Client – serveur - Le client gère le serveur principal, le serveur gère le backend et peuvent être remplacés indépendamment l'un de l'autre.
- Stateless - Aucune donnée client n'est stockée sur le serveur entre les demandes et l'état de la session est stocké sur le client.
- Cacheable - Les clients peuvent mettre en cache la réponse (tout comme les navigateurs mettant en cache des éléments statiques d'une page Web) pour améliorer les performances.
Quelques exemples d'API REST accessibles:
Falcon comme Framework d'application
Falcon est présenté sur le site officiel comme un framework Python permettant de mettre en place rapidement API et microservices avec des performances dépassant très largement d'autres framework Python comme Flask ou Django.
Pourquoi choisir Falcon pour designer une API ? Simplement parce que Falcon est spécialement conçu pour ce type de projet et présente notamment les avantages suivants:
- Rapide. Falcon traite les demandes plusieurs fois plus rapidement que la plupart des autres frameworks Python. Pour un gain de vitesse supplémentaire, Falcon compile lui-même en Cython lorsqu'il est disponible et fonctionne également bien avec PyPy.
- Fiable. La volonté des mainteneurs est d'éviter les évolutions majeures et les changements radicaux qui pourraient avoir de lourdes répercutions lors de mise à jour du Framework sur les projets en production. De plus, le code est rigoureusement testé avec une exigence de couverture des test de 100%.
- Débogable. Il n'y a pas de magie avec Falcon, toutes les exceptions sont levées (et non encapsulées ou masquées). Le système de débogable permet de suivre chaque entrée jusqu'au résultat de sortie de façon simple.
- Flexible. Le framework permet aux développeurs de se concentrer sur son application et non sur les détails d'implementations. Malgré tout, la communauté de contributeurs ajoute sans cesse de nouveaux packages complémentaires pouvant s'interfacer avec votre prochaine API.
Falcon est donc un Framework Python incroyablement puissant et entièrement conçu pour permettre aux développeurs de concevoir des API performantes. C'est sur cette base que nous partons pour développer notre API d'exemple.
API de gestion d'interventions
Notre exemple propose donc de gérer des interventions via une application REST. Cette application doit être disponible pour:
- Lister les interventions en cours
- Ajouter une nouvelle demande d'intervention
- Accéder au détail d'une intervention
- Modifier une intervention
- Supprimer une intervention
Bien que trivial, notre exemple nous permettra de passer en revue les principaux verbes utilisés et donnera une bonne compréhension du fonctionnement général des API.
Nous verrons dans le prochain article comment mettre en place cette API.