Avez-vous une question? (216) 97 656 803 hajjriadh@gmail.com
NestJS

TP 1 : Création d'une première API NestJS et publication sur GitHub

Ce premier TP NestJS fait créer une API complète pas à pas et la publier sur GitHub dès le départ : création du projet et du dépôt, exploration de la structure, configuration de main.ts (préfixe /api,...

0 chapitres 0 QCM Accès gratuit
TP 1 : Création d'une première API NestJS et publication sur GitHub

À propos de ce cours

Ce premier TP NestJS fait créer une API complète pas à pas et la publier sur GitHub dès le départ : création du projet et du dépôt, exploration de la structure, configuration de main.ts (préfixe /api, CORS, port, message de démarrage) et de nest-cli.json, ajout de routes d'information et de santé, fichier de requêtes .http, README et étiquette de version v0.1.0. Un commit est demandé à la fin de chaque partie, avec une grille d'évaluation.

Objectifs du TP

  • Créer une API NestJS et la publier sur GitHub dès le départ.
  • Comprendre la structure d'un projet et le rôle de main.ts.
  • Configurer l'application : préfixe, CORS, port, CLI.
  • Ajouter des routes simples en respectant la séparation contrôleur / service.
  • Livrer une version propre et documentée.

Durée: 2 h  |  Prérequis: chapitres 02 et 03  |  Livrable: l'adresse du dépôt GitHub avec l'étiquette v0.1.0.

Les cinq parties du TP 1 NestJS

Un commit à la fin de chaque partie.

Contexte

Votre établissement souhaite une API pour gérer ses formations, ses groupes et ses stagiaires. Ce premier TP pose les fondations du projet api-formation: un projet propre, configuré, documenté et publié sur GitHub. Les fonctionnalités métier seront ajoutées dans les TP suivants.

Partie 1 Créer le projet et le dépôt GitHub
  1. Dans votre dossier de travail, créez le projet :
    nest new api-formation --package-manager npm --strict
  2. Sur GitHub, créez un dépôt public et vide nommé api-formation.
  3. Reliez le projet local au dépôt et poussez :
    cd api-formation
    git add .
    git commit -m "chore: création du projet NestJS"
    git branch -M main
    git remote add origin https://github.com/VOTRE-COMPTE/api-formation.git
    git push -u origin main
  4. Actualisez la page du dépôt : les fichiers du projet apparaissent, sans node_modules.

Si Git répond « nothing to commit », le commit initial a déjà été fait par la CLI : continuez avec git branch -M main.

Partie 2 Explorer la structure du projet
  1. Lancez npm run start:dev et vérifiez http://localhost:3000.
  2. Créez à la racine un fichier STRUCTURE.md qui décrit en une phrase le rôle de : main.ts, app.module.ts, app.controller.ts, app.service.ts, app.controller.spec.ts, test/app.e2e-spec.ts, nest-cli.json, tsconfig.json.
  3. Dans ce même fichier, décrivez en 3 lignes le parcours d'une requête GET /.
  4. Lancez npm run test et npm run test:e2e et notez les résultats dans STRUCTURE.md.
  5. Commit : docs: description de la structure du projet puis git push.
Partie 3 Configurer l'application
  1. Modifiez src/main.ts pour :
    • préfixer toutes les routes par api;
    • autoriser CORS pour http://localhost:4200 (futur front-end Angular) ;
    • lire le port dans process.env.PORT (3000 par défaut) ;
    • afficher au démarrage, avec le Logger, le message API api-formation démarrée sur http://localhost:3000/api.
  2. Dans nest-cli.json, désactivez la génération automatique des fichiers .spec.ts.
  3. Dans package.json, ajoutez le script verifier qui enchaîne lint, tests et build.
  4. Vérifiez : http://localhost:3000/api répond « Hello World! » et npm run verifier réussit.
  5. Commit : feat: configuration globale (préfixe api, CORS, port) puis git push.

Le test e2e envoie GET / sans préfixe : il réussit quand même car il crée l'application à partir de AppModule sans passer par main.ts. Gardez cela en tête pour le chapitre 17.

Partie 4 Ajouter des routes d'information

Ajoutez les routes suivantes. La logique doit être dans AppService; le contrôleur ne fait qu'appeler le service.

RouteRéponse attendue
GET /api"Bienvenue sur l'API de gestion de formation"
GET /api/infos{ "application": "api-formation", "version": "0.1.0", "auteur": "Votre nom", "framework": "NestJS" }
GET /api/sante{ "statut": "ok", "date": "2026-11-14T20:15:03.120Z", "dureeFonctionnement": 42 } (secondes depuis le démarrage)
  1. Écrivez les trois méthodes dans le service et les trois routes dans le contrôleur.
  2. Créez le dossier requetes/ et le fichier requetes/app.http contenant une requête pour chaque route (variable @baseUrl = http://localhost:3000/api).
  3. Testez chaque route avec REST Client (ou Postman) et vérifiez le statut 200.
  4. Commit : feat: routes infos et sante puis git push.

Indice pour la durée de fonctionnement : process.uptime() renvoie le nombre de secondes écoulées depuis le démarrage du processus Node.js ; Math.round() arrondit le résultat.

Partie 5 Documenter et livrer la version 0.1.0
  1. Remplacez le contenu de README.md par une documentation du projet comprenant : titre et description, prérequis (Node.js LTS, npm), installation (git clone, npm install), lancement (npm run start:dev), tableau des routes disponibles, auteur.
  2. Vérifiez que tout est en ordre : npm run verifier.
  3. Commit : docs: README du projet puis git push.
  4. Créez et publiez l'étiquette de version :
    git tag -a v0.1.0 -m "TP 1 : première version de l'API"
    git push origin v0.1.0
  5. Test final: dans un autre dossier, clonez votre dépôt, lancez npm install puis npm run start:dev et appelez /api/infos. Si tout fonctionne, le TP est livrable.
Pour aller plus loin
  • Ajoutez une route GET /api/infos/node qui renvoie la version de Node.js (process.version) et le système (process.platform).
  • Faites la Partie 4 sur une branche feature/routes-infos et fusionnez-la par une Pull Request.
  • Ajoutez dans app.controller.spec.ts un test qui vérifie que getInfos() renvoie bien application: 'api-formation'.
Correction (extraits)
Voir main.ts
import { Logger } from '@nestjs/common';
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  app.setGlobalPrefix('api');
  app.enableCors({ origin: ['http://localhost:4200'] });

  const port = process.env.PORT ?? 3000;
  await app.listen(port);
  Logger.log(`API api-formation démarrée sur http://localhost:${port}/api`, 'Bootstrap');
}
bootstrap();
Voir app.service.ts et app.controller.ts
// app.service.ts
import { Injectable } from '@nestjs/common';

@Injectable()
export class AppService {
  getAccueil(): string {
    return "Bienvenue sur l'API de gestion de formation";
  }

  getInfos() {
    return { application: 'api-formation', version: '0.1.0', auteur: 'Votre nom', framework: 'NestJS' };
  }

  getSante() {
    return {
      statut: 'ok',
      date: new Date().toISOString(),
      dureeFonctionnement: Math.round(process.uptime()),
    };
  }
}

// app.controller.ts
import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';

@Controller()
export class AppController {
  constructor(private readonly appService: AppService) {}

  @Get()
  getAccueil(): string {
    return this.appService.getAccueil();
  }

  @Get('infos')
  getInfos() {
    return this.appService.getInfos();
  }

  @Get('sante')
  getSante() {
    return this.appService.getSante();
  }
}

En renommant getHello() en getAccueil(), pensez à adapter app.controller.spec.ts et test/app.e2e-spec.ts (texte attendu), sinon npm run verifier échoue : c'est voulu, les tests protègent le comportement de l'API.

Voir requetes/app.http
@baseUrl = http://localhost:3000/api

### Accueil
GET {{baseUrl}}

### Informations
GET {{baseUrl}}/infos

### Santé
GET {{baseUrl}}/sante
Grille d'évaluation
CritèrePoints
Dépôt GitHub public, sans node_modules ni dist, au moins 5 commits aux messages clairs4
STRUCTURE.md : rôle des fichiers et parcours d'une requête3
main.ts : préfixe, CORS, port, message de démarrage4
nest-cli.json et script verifier2
Trois routes fonctionnelles, logique dans le service4
requetes/app.http, README complet, étiquette v0.1.03
Total20