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.

Développement Web
REST ou WebSocket : quelle technologie utiliser pour ton serveur Node.js ?
3 min de lecture

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 :

AspectREST APIWebSocket (Socket.IO)
ProtocoleHTTPWS (WebSocket) via TCP
ConnexionBrève (stateless, 1 requête = 1 réponse)Persistante (établie puis réutilisée)
CommunicationClient → ServeurBidirectionnelle (Client ↔ Serveur)
Temps réelNon (ou long polling)Oui
Idéal pour…CRUD, formulaires, SEOChat, jeu, dashboard temps réel
ComplexitéSimpleMoyennement 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éRESTWebSocket (Socket.IO)
Envoi de messagePOST /messagessocket.emit("chat:message")
Réception de messageGET /messages (polling)socket.on("chat:message")
Réponse serveurres.status().json()callback de emit(..., ack)
Diffusion à d’autressocket.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.

Catégories

Partager cet article