À propos de ce cours
Objectifs de la leçon
- Comparer NestJS à d'autres frameworks back-end courants.
- Reconnaître les concepts communs (routes, contrôleurs, ORM, injection de dépendances).
- Choisir un framework adapté à un projet donné.
Deux familles de frameworks
Express et NestJS fonctionnent avec Node.js ; Laravel et Symfony avec PHP.
- Express (Node.js, 2010) : minimaliste et libre.
- NestJS (Node.js / TypeScript, 2017) : structuré, inspiré d'Angular.
- Laravel (PHP, 2011, Taylor Otwell) : framework MVC complet, réputé pour sa simplicité et sa productivité.
- Symfony (PHP, 2005, SensioLabs) : ensemble de composants robustes, très utilisé pour les projets d'entreprise ; plusieurs de ses composants sont d'ailleurs utilisés par Laravel.
Le même contrôleur dans les quatre frameworks
Une route GET /stagiaires/{id} qui renvoie un stagiaire en JSON :
Express
app.get('/stagiaires/:id', async (req, res) => {
const stagiaire = await stagiaireService.trouver(req.params.id);
res.json(stagiaire);
});
NestJS
@Controller('stagiaires')
export class StagiairesController {
constructor(private readonly service: StagiairesService) {}
@Get(':id')
findOne(@Param('id', ParseIntPipe) id: number) {
return this.service.findOne(id);
}
}
Laravel
// routes/api.php
Route::get('/stagiaires/{id}', [StagiaireController::class, 'show']);
// app/Http/Controllers/StagiaireController.php
class StagiaireController extends Controller
{
public function show(int $id)
{
return Stagiaire::findOrFail($id); // converti en JSON
}
}
Symfony
#[Route('/stagiaires/{id}', methods: ['GET'])]
public function show(int $id, StagiaireRepository $repo): JsonResponse
{
return $this->json($repo->find($id));
}
Les syntaxes diffèrent, mais les concepts sont les mêmes: une route, un contrôleur, un paramètre typé, un accès aux données et une réponse JSON. Remarquez la ressemblance entre les décorateurs de NestJS (@Get) et les attributs PHP de Symfony (#[Route]), ainsi que l'injection de dépendances présente dans les deux.
Tableau comparatif
| Critère | Express | NestJS | Laravel | Symfony |
|---|---|---|---|---|
| Langage | JavaScript | TypeScript | PHP | PHP |
| Environnement | Node.js | Node.js | Serveur PHP | Serveur PHP |
| Architecture | Libre | Modules, contrôleurs, services | MVC | MVC, bundles / composants |
| Injection de dépendances | Non (bibliothèques) | Oui | Oui (service container) | Oui (service container) |
| ORM courant | Au choix | TypeORM, Prisma, Mongoose | Eloquent | Doctrine |
| Ligne de commande | Non | Nest CLI | Artisan | Symfony CLI / bin/console |
| Vues HTML côté serveur | Moteurs au choix | Possible, mais surtout API | Blade | Twig |
| Temps réel | Socket.IO | Gateways WebSocket intégrées | Broadcasting / Reverb | Mercure |
| Point fort | Légèreté | Structure + TypeScript full-stack | Productivité | Robustesse, projets complexes |
Il n'y a pas de « meilleur » framework. Le bon choix dépend de l'équipe (quels langages maîtrise-t-elle ?), du projet (API seule ou site complet avec pages ?), de l'hébergement disponible et de l'existant. Un développeur qui maîtrise les concepts d'un framework passe facilement à un autre.
Activités
Activité 1 Retrouver les concepts communs
Dans les quatre exemples de contrôleur, repérez pour chacun : (a) la façon de déclarer la route ; (b) la récupération du paramètre id; (c) la façon de renvoyer du JSON.
Voir le corrigé
| Route | Paramètre | JSON | |
|---|---|---|---|
| Express | app.get(...) | req.params.id | res.json() |
| NestJS | @Controller + @Get(':id') | @Param('id') | valeur renvoyée par la méthode |
| Laravel | Route::get dans routes/api.php | argument $id | modèle renvoyé, converti automatiquement |
| Symfony | attribut #[Route] | argument $id | $this->json() |
Activité 2 Étude de cas : quel framework choisir ?
Proposez un framework pour chaque situation et justifiez en une phrase :
- Une équipe qui développe déjà le front-end en Angular doit créer l'API d'une plateforme de formation.
- Un hébergement mutualisé qui ne propose que PHP et MySQL ; site vitrine avec un petit espace d'administration.
- Un prototype d'API de trois routes à livrer en une journée.
- Une application d'entreprise complexe, maintenue pendant dix ans par une équipe PHP expérimentée.
Voir le corrigé
- NestJS: même langage (TypeScript) et mêmes concepts qu'Angular, interfaces partagées entre front et back.
- Laravel (ou Symfony) : Node.js n'est pas disponible sur ce type d'hébergement.
- Express: mise en place immédiate pour un besoin très limité.
- Symfony: robustesse, composants éprouvés et maintenance à long terme pour une équipe PHP.
D'autres réponses sont acceptables si elles sont bien justifiées.
À retenir
- Express et NestJS fonctionnent avec Node.js, Laravel et Symfony avec PHP.
- Tous partagent les mêmes concepts : routes, contrôleurs, accès aux données, réponses JSON.
- NestJS, Laravel et Symfony proposent l'injection de dépendances et un ORM.
- Le choix dépend de l'équipe, du projet et de l'hébergement.
- Prochain chapitre : installer Node.js, npm et la CLI Nest.