Implémenter les points de terminaison de l’API REST
Passons maintenant à la partie amusante ! Nous allons créer les points de terminaison de l’API REST pour nos livres. Nous ajouterons l’implémentation des points de terminaison dans le fichier routes.py, et chargerons les routes dans le fichier main.py. Nous allons commencer par initialiser un objet APIRouter dans le fichier routes.py :
pymongo-fastapi-crud/routes.py
Comme vous pouvez le constater, nous importons APIRouter depuis le paquet fastapi. Nous allons utiliser cet objet pour définir les points de terminaison de notre API REST. Nous importons également les modèles Book et BookUpdate que nous avons définis précédemment.
POST /book
Le premier point de terminaison que nous allons implémenter est POST /books pour créer un nouveau livre. Ajoutez ce qui suit après la ligne router = APIRouter() :
pymongo-fastapi-crud/routes.py
La route est / parce que nous allons préfixer tous les points de terminaison des livres par /books. L’attribut response_description sera affiché dans la documentation de l’API. L’attribut status_code est le code d’état HTTP renvoyé lorsque la requête est réussie. Nous utilisons le modèle Book pour valider à la fois les données transmises dans le corps de la requête et la réponse envoyée. FastAPI se charge de la validation. Dans le corps de la fonction, nous utilisons la méthode insert_one() de PyMongo pour ajouter le nouveau livre à la collection books. Nous utilisons la méthode find_one() pour retrouver le livre nouvellement créé dans la base de données. Pour en savoir plus sur les méthodes insert_one() et find_one(), consultez l’article de documentation de PyMongo pour les opérations au niveau de la collection.
Enfin, nous renvoyons le livre créé.
GET /book
Ensuite, nous allons implémenter le point de terminaison GET /book pour renvoyer une liste contenant tous les documents de la collection books. Ajoutez ce qui suit à la fin du fichier routes.py :
pymongo-fastapi-crud/routes.py
Pour le modèle de réponse, nous utilisons le type List[Book]. Cela signifie que la réponse sera une liste d’objets Book. Nous utilisons également la méthode find() pour extraire au maximum 100 livres de la base de données. Pour en savoir plus sur la limite et les autres paramètres de la méthode find(), consultez la page dédiée de la documentation PyMongo.
GET /book/{id}
Créons un autre point de terminaison GET pour récupérer un seul livre par son id. Ajoutez ce qui suit à la fin du fichier routes.py :
pymongo-fastapi-crud/routes.py
Ici, nous utilisons la méthode find_one() pour extraire un seul livre de la base de données. Si le livre est trouvé, nous le renvoyons. Si le livre est introuvable, nous lançons une HTTPException avec un code d’état 404 Not Found et un message approprié.
PUT /book/{id}
Le point de terminaison le plus important de notre API REST est sans doute PUT /book/{id}. Ce point de terminaison nous permet de mettre à jour un seul livre. Ajoutez l’implémentation suivante à la fin du fichier routes.py :
pymongo-fastapi-crud/routes.py
Passons en revue le code. Tout d’abord, nous créons un objet que nous utiliserons pour mettre à jour le livre. Ensuite, s’il existe des champs dans l’objet book, nous utilisons la méthode update_one() pour mettre à jour le livre dans la base de données. Il est important de noter que nous utilisons l’opérateur de mise à jour $set pour garantir que seuls les champs spécifiés sont mis à jour, plutôt que de réécrire l’ensemble du document.
Ensuite, nous vérifions l’attribut modified_count de update_result pour vérifier que le livre a été mis à jour. Si c’est le cas, nous utilisons la méthode find_one() pour extraire le livre mis à jour de la base de données et le renvoyer.
S’il n’y a pas de champs dans l’objet book, nous renvoyons simplement le livre existant. Cependant, si le livre est introuvable, nous lançons une commande HTTPException avec un code d’état 404 Not Found.
SUPPRIMER /book/{id}
Le dernier point de terminaison que nous allons implémenter est DELETE /book/{id} pour supprimer un seul livre par son ID. Ajoutez ce qui suit à la fin du fichier routes.py :
pymongo-fastapi-crud/routes.py
Ici, notons que si le livre a été supprimé, nous renvoyons un code d’état 204 No Content. Il s’agit d’un code d’état réussi indiquant que la requête a abouti et qu’il n’y a pas de contenu à envoyer dans le corps de la réponse.
Enregistrer
Enfin, nous devons enregistrer les points de terminaison /book. Ouvrez le fichier main.py, importez le module routes et enregistrez le routeur de livres. Votre version finale du fichier main.py devrait ressembler à ceci :
pymongo-fastapi-crud/main.py