REST ou WebSocket : quelle technologie utiliser pour ton serveur Node.js ?
Comparatif pratique entre API REST et WebSocket (Socket.IO) pour Node.js/Express : exemples, cas d'usage, code, diagrammes Mermaid.

Pourquoi comparer REST et WebSocket ?
Lorsqu’on développe une application web dynamique avec Node.js, il est essentiel de choisir la bonne stratégie de communication entre le client et le serveur. Deux options populaires s’offrent aux développeurs : les API REST traditionnelles et les WebSocket via Socket.IO.
L’objectif est de t’aider à comprendre les différences concrètes entre ces deux approches, à travers des explications claires, des exemples de code, des cas d’usage typiques et des diagrammes Mermaid. Le tout en environnement Express moderne (ESM), pour t’aider à faire le bon choix selon le contexte de ton projet.
1. Différences fondamentales entre REST et WebSocket
Voici un tableau comparatif des principales différences entre une API REST classique et un système de communication basé sur WebSocket :
Aspect | REST API | WebSocket (Socket.IO) |
---|---|---|
Protocole | HTTP | WS (WebSocket) via TCP |
Connexion | Brève (stateless, 1 requête = 1 réponse) | Persistante (établie puis réutilisée) |
Communication | Client → Serveur | Bidirectionnelle (Client ↔ Serveur) |
Temps réel | Non (ou long polling) | Oui |
Idéal pour… | CRUD, formulaires, SEO | Chat, jeu, dashboard temps réel |
Complexité | Simple | Moyennement complexe |
2. Exemple d’implémentation REST vs WebSocket
A. Serveur REST minimal en ESM
import express from 'express'
const app = express()
app.use(express.json())
let messages = []
app.post('/messages', (req, res) => {
messages.push(req.body)
res.status(201).json({ status: 'ok', saved: req.body })
})
app.get('/messages', (req, res) => {
res.json(messages)
})
app.listen(3000, () => {
console.log('REST API dispo sur http://localhost:3000')
})
B. Serveur WebSocket avec Socket.IO en ESM
import express from 'express'
import { createServer } from 'http'
import { Server } from 'socket.io'
const app = express()
const server = createServer(app)
const io = new Server(server, { cors: { origin: '*' } })
io.on('connection', (socket) => {
console.log('Client connecté')
socket.on('chat:message', (data, ack) => {
console.log('Nouveau message:', data)
socket.broadcast.emit('chat:message', data)
if (ack) ack({ status: 'reçu' })
})
})
server.listen(3001, () => {
console.log('WebSocket dispo sur ws://localhost:3001')
})
3. Exemple de client JavaScript
A. Client REST (fetch)
fetch('http://localhost:3000/messages', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ from: 'Nico', text: 'Hello via REST' }),
}).then(res => res.json()).then(console.log)
B. Client WebSocket (Socket.IO)
import { io } from 'socket.io-client'
const socket = io('http://localhost:3001')
socket.emit('chat:message', { from: 'Nico', text: 'Hello via WS' }, (ack) => {
console.log('Accusé réception:', ack)
})
socket.on('chat:message', (msg) => {
console.log('Message reçu en temps réel:', msg)
})
4. REST vs WebSocket en diagrammes Mermaid
REST
sequenceDiagram
participant Client
participant Server
Client->>Server: POST /messages {from, text}
Server-->>Client: 201 Created
loop Toutes les 2 secondes
Client->>Server: GET /messages
Server-->>Client: [ ...messages ]
end
WebSocket
sequenceDiagram
participant Client
participant Serveur
participant AutresClients
Client->>Serveur: Connexion Socket.IO
Serveur-->>Client: Connexion établie
Client->>Serveur: emit("chat:message", {from, text}, ack)
Serveur-->>Client: ack({ status: "reçu" })
Serveur-->>AutresClients: broadcast("chat:message", {from, text})
5. Tableau synthèse : REST ou WebSocket ?
Fonctionnalité | REST | WebSocket (Socket.IO) |
---|---|---|
Envoi de message | POST /messages | socket.emit("chat:message") |
Réception de message | GET /messages (polling) | socket.on("chat:message") |
Réponse serveur | res.status().json() | callback de emit(..., ack) |
Diffusion à d’autres | ❌ | socket.broadcast.emit(...) |
Communication bidirectionnelle | ❌ | ✅ |
Ce qu’il faut retenir
Plutôt que de choisir REST ou WebSocket, il est souvent pertinent d’utiliser les deux dans une application moderne.
- REST reste idéal pour les endpoints standards (login, CRUD, configuration…)
- WebSocket apporte un gain décisif dans tous les cas de communication instantanée
En comprenant ces deux approches, tu peux construire une architecture web robuste, évolutive et adaptée à chaque fonctionnalité de ton application.
Tu veux aller plus loin ?
Ajoute à ton projet des fonctionnalités comme l’authentification Socket.IO, la gestion de rooms, les namespaces, ou encore des événements personnalisés.
Tu as maintenant les bases pour faire le bon choix technique et structurer proprement ton back-end Express avec REST et WebSocket.