Tutoriel

Statut éditorial : En attente de relecture

Créer une API JSON minimale avec Node.js

Créer une API HTTP sans framework, valider les entrées et retourner des réponses JSON cohérentes avec gestion des erreurs.

Classification du contenu

Types

  • Développement back-end
  • API

Technologies

Niveau
Intermédiaire
Publié le
30 juillet 2026
Dernière relecture
Relecture en attente
Prochaine vérification
30 janvier 2027

Node.js contient tout le nécessaire pour comprendre le fonctionnement d’une API HTTP. Nous allons exposer une ressource de tâches, lire du JSON et renvoyer des statuts cohérents sans framework.

Initialiser le projet

~~~bash mkdir api-json && cd api-json npm init -y ~~~

Ajoutez type module dans package.json, puis créez server.js :

~~~javascript import { createServer } from 'node:http';

const tasks = [{ id: 1, title: 'Lire la documentation', done: false }];

function json(response, status, data) { response.writeHead(status, { 'content-type': 'application/json; charset=utf-8', }); response.end(JSON.stringify(data)); }

async function readJson(request) { const chunks = []; let size = 0; for await (const chunk of request) { size += chunk.length; if (size > 100_000) throw new Error('BODY_TOO_LARGE'); chunks.push(chunk); } return JSON.parse(Buffer.concat(chunks).toString('utf8')); }

const server = createServer(async (request, response) => { try { if (request.method === 'GET' && request.url === '/tasks') { return json(response, 200, { data: tasks }); } if (request.method === 'POST' && request.url === '/tasks') { const body = await readJson(request); if (typeof body.title !== 'string' || !body.title.trim()) { return json(response, 422, { error: 'title est obligatoire' }); } const task = { id: tasks.length + 1, title: body.title.trim(), done: false }; tasks.push(task); return json(response, 201, { data: task }); } return json(response, 404, { error: 'Route inconnue' }); } catch (error) { const status = error.message === 'BODY_TOO_LARGE' ? 413 : 400; return json(response, status, { error: 'Requête invalide' }); } });

server.listen(3000, '127.0.0.1', () => console.log('http://127.0.0.1:3000')); ~~~

Tester

~~~bash node server.js curl http://127.0.0.1:3000/tasks curl -X POST http://127.0.0.1:3000/tasks -H 'content-type: application/json' -d '{"title":"Tester API"}' ~~~

Vérifiez aussi JSON invalide, titre vide, corps trop gros et route inconnue.

Production

La mémoire disparaît au redémarrage : branchez une base. Ajoutez schéma de validation, authentification, logs corrélés, timeouts et arrêt propre. Un framework simplifiera le routage, mais ces règles HTTP resteront identiques.

FAQ

Pourquoi 422 pour un titre invalide ?

La syntaxe JSON est valide, mais sa signification ne respecte pas le contrat.

Faut-il autoriser CORS ?

Seulement pour les origines nécessaires. CORS n’est pas une authentification.

Sources utilisées