API REST

Tags :
  • MON
  • API Rest
Auteur :
  • Serigne Mbaye Sy AMAR
2024-2025

Ce MON traite les APIs REST, Une API REST permet la communication entre systèmes via HTTP.

Prérequis

Table des matières

Le but de ce MON est d'acquérir des compétences sur les API REST afin de pouvoir les utiliser dans mon POK. Veuillez consulter mon POK pour une application directe de tout ce que je vais aborder dans ce MON, qui sera divisé au tour de la question comment intégrer les API REST dans NestJS. Pour comprendre l'intégration sur la partie React, je vous invite a consulter mon github.

Introduction :

Cette première partie du MON (la base), à savoir qu'est-ce qu'une API et son fonctionnement, a été traitée de manière très explicite par Baptiste Audouin dans son MON Temps 1.

Pour répondre aux besoins spécifiques de mon POK (sous format de lien), je vais me concentrer davantage sur des aspects concrets : comment utiliser une API REST dans un projet intégrant un backend développé avec NestJS et un frontend avec React.

Comment intégrer des API REST dans NestJS?

L'intégration d'API REST dans NestJS consiste à créer des contrôleurs, des services et des modèles pour gérer les données et répondre aux requêtes HTTP. Je me suis appuyé principalement sur la documentation officielle de NestJS ainsi que sur des exemples sur GitHub pour la mise en place de l'API.


1. Créer une Ressource avec Nest CLI

NestJS propose une commande pour générer rapidement une ressource REST complète (contrôleur, service et module).

Exemple : Générer une ressource pour les posts.



nest generate resource posts


Pour comprendre au mieux la structure des fichiers dans Nestjs ainsi que la base, vous pouvez consulter mon MON (2.1)(lien au niveau des prerequis).

Le CLI crée les fichiers suivants dans src/posts/ :


2. Configurer un Contrôleur REST

Le contrôleur gère les routes et définit les endpoints de l'API. Modifie posts.controller.ts pour gérer les opérations CRUD de base.

Exemple de contrôleur REST pour les posts :

La section Controllers de la documentation NestJS m'a aidé à comprendre la structure des fichiers, les méthodes HTTP, et les annotations utilisées comme @Controller et @Get, avec un exemple concret d’un contrôleur simple sur GitHub, gérant des opérations CRUD dans GitHub - NestJS Examples, notamment dans la section cats.controller.ts. Les liens se trouvent dans la partie ressources.


3. Implémenter la Logique Métier dans le Service

Le fichier posts.service.ts contient la logique métier. C'est ici qu'on gère les interactions avec la base de données ou d'autres ressources.

Exemple de service pour gérer les posts en mémoire (avant d’ajouter MongoDB) :

En plus de NestJS Documentation - Providers qui explique comment injecter et structurer des services dans une application NestJS, j'ai consulté aussi GitHub - NestJS Examples la section cats.service.ts qui fournit un service fonctionnel pour gérer la logique métier.


4. Ajouter des DTOs pour Valider les Données

Les DTOs (Data Transfer Objects) permettent de valider et de typer les données envoyées par le client.

Exemple de create-post.dto.ts :

La section Controllers de la documentation NestJS m'a aidé à comprendre la structure des fichiers, les méthodes HTTP, et les annotations utilisées comme @Controller et @Get, avec un exemple concret d’un contrôleur simple sur GitHub, gérant des opérations CRUD dans GitHub - NestJS Examples, notamment dans la section cats.controller.ts. Les liens se trouvent dans la partie ressources.


5. Connecter une Base de Données (MongoDB)

  1. Installer les Dépendances MongoDB :

    • Installe Mongoose pour interagir avec une base MongoDB.
    
    
    npm install @nestjs/mongoose mongoose
    
    
    
  2. Configurer Mongoose dans le Module Principal :

    • Modifie app.module.ts pour connecter NestJS à MongoDB.
  1. Définir un Schéma Mongoose pour les Posts :
    • Ajoute un fichier post.schema.ts dans le dossier posts.
  1. Lier le Modèle au Module Post :
    • Modifie posts.module.ts pour inclure le schéma.
  1. Adapter le Service pour Utiliser MongoDB :
    • Modifie posts.service.ts pour interagir avec MongoDB via Mongoose.

Avec NestJS Documentation - Databases et GitHub - MongoDB with NestJS, j'ai pu comprendre comment connecter MongoDB à une application NestJS avec Mongoose, définir des schémas et utiliser des modèles avec un projet complet montrant l'intégration de MongoDB. Les liens se trouvent dans la partie sources.


5. Ajouter Swagger pour Documenter les API

  1. Installer le Module Swagger :

    
    
    npm install @nestjs/swagger
    
    
    
  2. Configurer Swagger dans main.ts :

  1. Ajouter des Décorateurs dans les DTOs :

Pour comprendre cette partie, j'ai consulté GitHub - Swagger Integration Example, qui fournit un exemple complet avec Swagger intégré pour documenter l’API.


Ce que j'ai appris

Voici un résumé de ce que j'ai compris sur NestJS :

ComposantRôle
API RESTFournir une interface standardisée pour échanger des données entre le backend NestJS et les clients.
Nest CLIGénérer automatiquement les fichiers nécessaires (contrôleurs, services, modules, DTOs) pour une ressource REST.
Contrôleurs (posts.controller.ts)Gérer les routes et définir les endpoints de l'API pour effectuer les opérations CRUD.
Services (posts.service.ts)Contenir la logique métier, gérer les interactions avec la base de données ou d'autres ressources.
DTOsValider et typer les données envoyées par le client pour sécuriser et structurer les entrées.
MongoDB avec MongooseFournir une base de données pour persister les données et définir des schémas avec Mongoose.
SwaggerDocumenter l'API, facilitant la compréhension et l'utilisation par les développeurs tiers.

Horodatage

Voici a peu pret (pas exactement car des fois ca depasse de quelque minutes) comment organiser mon temps d'etude pour ce MON.

ÉtapeDurée
Comprendre ce qu'est une API REST et comment elle fonctionne dans un contexte pratique1h30 min
Découvrir les outils : MongoDB et Swagger et savoir pourquoi ils sont utiles1h
Configuration NestJS : Créer une ressource, un contrôleur, un service, et des DTOs1h
S'entraîner à connecter MongoDB avec NestJS : Installer, configurer, créer des schémas et utiliser les services1h
Voir comment documenter une API avec Swagger : Installation et utilisation des décorateurs30 min
Revision React : Comprendre comment appeler une API avec Axios, créer un service API et afficher des données1h15 min
Voir des techniques comme: Gérer les appels API avec cache et synchronisation automatique1h
Comprendre comment gérer l'état global avec Redux pour partager les données de l'API entre plusieurs composants1h
Rédaction sur le site1h25 min

Sources :