image de chargement
Retour au glossaire

JSON-RPC : Protocole d'appel de procédure distante léger

Protocole de communication client-serveur utilisant JSON pour invoquer des méthodes distantes avec une syntaxe simple et standardisée.

Mis à jour le 7 janvier 2026

JSON-RPC est un protocole d'appel de procédure distante (RPC) sans état qui utilise JSON comme format d'encodage des données. Il permet aux applications d'invoquer des méthodes sur des serveurs distants comme si elles étaient locales, en définissant une structure de message simple avec des requêtes, des réponses et des notifications. Largement adopté dans les applications blockchain, les API IoT et les systèmes distribués, JSON-RPC offre une alternative légère aux protocoles plus complexes comme SOAP ou gRPC.

Fondements du protocole

  • Structure de message standardisée avec jsonrpc, method, params et id
  • Transport agnostique : compatible HTTP, WebSocket, TCP ou autres
  • Trois types de messages : requêtes (avec réponse attendue), réponses et notifications (sans réponse)
  • Gestion d'erreurs structurée avec codes standardisés et messages personnalisés

Avantages de JSON-RPC

  • Simplicité : syntaxe minimaliste facilitant l'implémentation et le débogage
  • Interopérabilité : JSON lisible par pratiquement tous les langages de programmation
  • Faible overhead : payload compact comparé à XML/SOAP
  • Batching natif : possibilité d'envoyer plusieurs requêtes en une seule transaction
  • Spécification ouverte : standardisée et maintenue par la communauté

Exemple concret de communication

json-rpc-example.ts
// Requête JSON-RPC 2.0
const request = {
  jsonrpc: "2.0",
  method: "user.getProfile",
  params: { userId: 12345 },
  id: 1
};

// Réponse en cas de succès
const successResponse = {
  jsonrpc: "2.0",
  result: {
    userId: 12345,
    name: "Alice Dupont",
    email: "alice@example.com"
  },
  id: 1
};

// Réponse en cas d'erreur
const errorResponse = {
  jsonrpc: "2.0",
  error: {
    code: -32602,
    message: "Invalid params",
    data: "userId must be a positive integer"
  },
  id: 1
};

// Notification (pas de réponse attendue)
const notification = {
  jsonrpc: "2.0",
  method: "user.logActivity",
  params: { action: "login", timestamp: Date.now() }
  // Pas de champ 'id'
};

Mise en œuvre dans un projet

  1. Définir le contrat d'API : lister les méthodes exposées et leurs signatures
  2. Choisir la couche transport (HTTP POST est le plus courant)
  3. Implémenter le serveur avec un routeur de méthodes et la validation des params
  4. Gérer les erreurs avec les codes standards (-32700 à -32603) et personnalisés
  5. Ajouter l'authentification/autorisation au niveau transport (ex: Bearer token)
  6. Documenter les méthodes disponibles avec exemples de requête/réponse
  7. Tester avec des outils comme Postman ou des clients JSON-RPC dédiés

Conseil Pro

Pour les API publiques, implémentez le batching JSON-RPC pour réduire la latence : les clients peuvent envoyer un tableau de requêtes et recevoir un tableau de réponses correspondant. Cela réduit considérablement le nombre de round-trips réseau dans les interfaces nécessitant plusieurs appels simultanés.

Outils et bibliothèques

  • jayson (Node.js) : bibliothèque complète client/serveur JSON-RPC
  • json-rpc-2.0 (TypeScript) : implémentation typée avec support Promise
  • ethereum-rpc (blockchain) : client JSON-RPC pour Ethereum
  • jsonrpcserver/client (Python) : suite d'outils pour Python 3
  • Postman/Insomnia : test manuel avec templates JSON-RPC

JSON-RPC s'impose comme solution pragmatique pour les architectures distribuées nécessitant une communication simple et efficace. Sa légèreté en fait un choix privilégié pour les microservices, les applications blockchain et les systèmes IoT où la bande passante et la simplicité d'intégration sont critiques. L'adoption de ce protocole réduit la complexité d'infrastructure tout en maintenant une compatibilité maximale entre systèmes hétérogènes.

Termes connexes

L'argentestdéjàsurlatable.

En 1 heure, découvrez exactement combien vous perdez et comment le récupérer.