Back-end intégré dans Next.js
Comprendre le rôle des API Routes
1. Pourquoi des API Routes dans Next.js ?
L’un des atouts majeurs de Next.js réside dans son positionnement comme framework full-stack. Contrairement à une bibliothèque orientée uniquement vers le rendu côté client, Next.js permet de construire à la fois des interfaces web complètes et des points d’entrée back-end au sein d’un seul et même projet.
Les API Routes incarnent ce potentiel. Elles offrent la possibilité de définir rapidement des endpoints RESTful ou orientés RPC directement dans l’application, sans recourir à un serveur externe basé sur Express, Fastify ou tout autre framework back-end. Cette approche simplifie la maintenance et réduit le nombre de dépendances, tout en garantissant une meilleure intégration avec le reste de l’écosystème Next.js.
Concrètement, une API Route peut servir à exposer des données stockées dans une base, à orchestrer des appels vers des services tiers (comme Stripe pour les paiements ou SendGrid pour les e-mails), ou encore à gérer des traitements côté serveur, tels que la validation de formulaires ou l’authentification. Dans une architecture moderne, elle joue donc un rôle de colle entre le front-end React et les différentes sources de données ou services utilisés par l’application.
En ce sens, les API Routes représentent le cœur back-end de Next.js, permettant de bâtir des applications complètes sans multiplier les environnements ni complexifier l’architecture.
2. Où créer une API Route ?
L’emplacement d’une API Route dépend de l’architecture utilisée dans le projet. Historiquement, avec le Pages Router (désormais considéré comme historique), les routes étaient placées dans le dossier pages/api/. Chaque fichier correspondait à un endpoint et l’URL générée reprenait directement la hiérarchie des dossiers. Par exemple, un fichier pages/api/hello.ts exposait automatiquement l’endpoint /api/hello.
Avec l’introduction de l’App Router dans Next.js 13, la logique des API évolue. Les anciennes API Routes du répertoire...
Comparer API Routes et Server Actions
1. API Routes vs Server Actions
Avec l’App Router, Next.js introduit les Server Actions, qui permettent d’appeler directement des fonctions côté serveur depuis un formulaire ou un composant. Cela pose naturellement la question de la frontière entre les deux approches.
|
Aspect |
API Routes |
Server Actions |
|
Emplacement |
app/api/.../route.ts |
Dans un Server Component |
|
Appel depuis |
fetch(’/api/...’) |
<form action={fn}> |
|
Nécessite fetch |
Oui |
Non |
|
Niveau d’abstraction |
Bas niveau (endpoints explicites) |
Haut niveau (intégré au composant) |
|
Idéal pour |
Webhooks, API externes, logique REST |
Formulaires simples, mutations directes |
Au-delà des différences d’implémentation, le choix entre API Routes et Server Actions implique des contraintes architectures distinctes. Les API Routes exposent des endpoints explicites, accessibles via http, ce qui les rend adaptées aux intégrations externes (webhooks, API tierces, microservices), mais impose la gestion manuelle des requêtes, de la validation et de la sécurité. Les Server Actions quant à elles, simplifient l’écriture des mutations en les intégrant directement au cycle de rendu des composants. Toutefois, elles restent étroitement couplées à l’architecture React/Next.js et ne constituent pas des endpoints publics....
Interagir avec la base de données grâce à Prisma
1. Pourquoi choisir Prisma avec Next.js ?
L’un des atouts majeurs de Next.js réside dans sa capacité à proposer une architecture full-stack : l’interface utilisateur et la logique serveur coexistent dans le même projet. Cette approche unifiée permet de gérer à la fois le front-end et le back-end sans changer d’environnement ni de langage. Dans ce contexte, Prisma s’impose comme un outil incontournable pour interagir avec la base de données de manière moderne, fiable et typée.
Prisma joue le rôle d’ORM (Object-Relational Mapping), mais avec une approche bien plus orientée développeur. Il permet d’éviter d’écrire du SQL brut tout en conservant un haut niveau de contrôle sur les requêtes. Chaque modèle de données est défini dans un fichier unique, puis Prisma génère automatiquement les requêtes SQL correspondantes ainsi que les types TypeScript associés. Cela facilite le développement, réduit le risque d’erreurs et améliore la maintenabilité du code.
En choisissant Prisma avec Next.js, le développeur bénéficie donc d’un stack moderne, performant et typé de bout en bout. Cette combinaison est particulièrement adaptée aux projets où la cohérence des données, la productivité et la rapidité de mise en œuvre sont des priorités.
2. Installer et configurer Prisma
L’installation de Prisma se fait en deux étapes simples. Dans un premier temps, il convient d’ajouter les dépendances nécessaires au projet. Prisma est composé de deux packages : le client, utilisé à l’exécution, et les outils de développement. Ces derniers doivent être installés comme dépendance de développement.
npm install prisma --save-dev npm install @prisma/client
Une fois les packages installés, la commande suivante permet d’initialiser Prisma dans le projet :
npx prisma init
Cette commande crée automatiquement un dossier prisma/ à la racine du projet, contenant un fichier schema.prisma. Ce fichier centralise...
Sécuriser l’application avec NextAuth.js
1. Pourquoi sécuriser son application ?
Une application Next.js peut exposer des données sensibles via trois mécanismes principaux :
-
les API routes ;
-
les server components ;
-
les Server Actions.
Sans contrôle d’accès, ces points d’entrée sont potentiellement ouverts à toute personne connaissant leur URL.
Sécuriser l’application revient à :
-
authentifier les utilisateurs de manière fiable (identification) ;
-
autoriser uniquement certains utilisateurs à accéder à des ressources ou à effectuer des actions (gestion des droits) ;
-
protéger les routes ou composants serveur d’un usage abusif ou malveillant.
Dans de nombreux cas (backoffice, données personnelles, actions critiques), ne pas sécuriser son application revient à exposer des failles majeures, tant techniques que juridiques.
2. Choix de l’outil : NextAuth.js
NextAuth.js est la solution d’authentification la plus adaptée à Next.js, notamment avec l’App Router.
Avantages principaux
L’adoption de NextAuth.js repose sur un ensemble d’avantages fonctionnels et architecturaux répondant aux exigences actuelles en matière d’authentification :
-
compatibilité App Router : pleinement intégré aux conventions modernes de Next.js ;
-
prise en charge de nombreux modes d’authentification : OAuth (Google, GitHub, etc.), credentials, magic links, providers personnalisés… ;
-
sessions JWT ou persistées en base : adaptable selon les besoins (scalabilité, sécurité) ;
-
support officiel des adaptateurs Prisma : stockage structuré des sessions, comptes et utilisateurs.
NextAuth.js centralise ainsi toute la logique d’authentification : providers, stockage, récupération de session, redirections et sécurité. Il remplace avantageusement la création manuelle d’un système auth complexe, tout en restant personnalisable.
3. Installation
NextAuth.js s’installe très simplement via npm ou yarn. Il est conseillé de le faire dès le début du projet, car il structure les routes API et les sessions dès l’architecture initiale.
npm install next-auth # ou yarn add next-auth...Gérer des événements externes avec les webhooks
1. Qu’est-ce qu’un webhook ?
Un webhook est une requête HTTP envoyée automatiquement par un service externe vers une URL définie de ton application lorsqu’un événement précis se produit. Ce mécanisme permet d’établir une communication en temps réel entre deux systèmes, sans avoir à interroger manuellement une API.
Il s’agit d’un système de notification push, déclenché côté serveur distant, et réceptionné par ton application.
Quelques exemples concrets :
-
Stripe envoie un webhook lorsqu’un paiement est confirmé ou lorsqu’un abonnement est annulé.
-
GitHub déclenche un webhook lorsqu’un commit est poussé ou qu’une pull request est ouverte.
-
Notion ou SendGrid peuvent envoyer un webhook quand une page est mise à jour ou qu’un e-mail est ouvert.
Ce mécanisme est particulièrement utile pour automatiser des actions dès qu’un événement externe se produit, sans délai.
2. Où placer un webhook dans Next.js ?
Dans une application Next.js utilisant l’App Router, les webhooks doivent être traités dans une API Route POST, généralement située dans le dossier app/api/webhooks/.
Exemple de structure recommandée :
app/
api/
webhooks/
stripe/
route.ts
Cette organisation permet :
-
de garder une structure claire et modulaire, en isolant chaque webhook par fournisseur ;
-
d’utiliser les fonctions GET, POST, etc., directement exportées depuis le fichier route.ts ;
-
de profiter du support natif TypeScript et du middleware Next.js pour sécuriser les traitements.
Il est important de configurer l’API Route en mode POST uniquement, car les webhooks émis par les services externes envoient des données sensibles qui ne doivent jamais être exposées via GET.
Enfin, l’URL du webhook est ensuite fournie au service tiers (comme Stripe) pour lui indiquer où envoyer les événements.
3. Exemple : intégrer un webhook Stripe
Lorsqu’un...
Comprendre le modèle serverless
1. Pourquoi serverless ?
Le modèle serverless ne signifie pas qu’il n’y a pas de serveur, mais qu’il n’est plus nécessaire pour le développeur de gérer ou de provisionner l’infrastructure. Le code est déployé sous forme de fonctions autonomes, prêtes à être exécutées uniquement lorsqu’une requête les déclenche. Ce modèle repose sur trois caractéristiques fondamentales.
D’abord, les fonctions sont instantanément scalables : elles peuvent répondre aussi bien à une seule requête qu’à des millions sans qu’il soit nécessaire de modifier l’architecture. Ensuite, elles sont facturées à l’usage, en fonction du temps d’exécution et du volume traité, ce qui en fait une solution économiquement avantageuse. Enfin, elles s’exécutent uniquement à la demande et sont détruites après usage, ce qui limite l’exposition et évite de mobiliser des ressources inutiles.
En résumé, le serverless permet de se concentrer uniquement sur la logique métier, en externalisant toute la gestion des serveurs, des montées en charge, de la maintenance et de la sécurité de l’infrastructure sous-jacente.
2. Les Serverless Functions dans Next.js
Dans Next.js, les Serverless Functions sont implémentées à travers les API Routes, accessibles via le dossier app/api. Chaque fichier exportant un handler GET, POST, etc. est automatiquement transformé en fonction déployée sur une plateforme compatible (comme Vercel, AWS Lambda, ou Google Cloud Functions).
Par exemple, le fichier app/api/hello/route.ts devient une fonction indépendante, appelée à chaque requête sur /api/hello.
Cette architecture permet d’interfacer facilement le front-end avec une logique serveur sans serveur dédié, en utilisant les fonctions pour :
-
interagir avec une base de données ;
-
appeler des services externes (API REST, GraphQL, etc.) ;
-
gérer l’authentification ou le traitement de formulaires ;
-
envoyer des e-mails.
Le tout est automatiquement déployé, isolé et maintenu sans configuration...