Skip to content

Latest commit

 

History

History
106 lines (82 loc) · 5.58 KB

README-fr.md

File metadata and controls

106 lines (82 loc) · 5.58 KB

Forwarder HTTP

Build Status

forwarder-http est un utilitaire pour transférer des requêtes HTTP/HTTPS à une liste de serveurs cible. À chaque requête :

  • Répond immédiatement au client avec un code 200 (configurable)
  • Transfère la requête à un ensemble de serveurs
  • Peux être configuré pour faire des retry individuelement, par destination.

Il est conçu pour être simple, configurable et extensible via toute sorte d'événements.

Actuellement, seule les versions de node >=6.x.x sont supportées.

Le cas d'usage à @RadioFrance

Certaines de nos applications reçoivent beaucoup de données en entrée, et ces données doivent alimenter non seulement la production mais également les environnements de développement et de test. Nous avions besoin d'une application qui soit petite et très performante.

Utilisation

Le meilleur moyen de l'expliquer est via un exemple

const Forwarder = require('forwarder-http')

const server = new Forwarder({
  // La liste de serveurs cible
  targets: [
    'http://target-nb-1.com', // config simple, utilise les configs par défault
    {                         // config complète, supplante certaines configs
      url: 'http://target-nb-2.com',
      headers: {
        'my-nb1-header': 'my-nb1-val'
      },
      retry: {
        maxRetries: 3
      }
    }
  ],

  // Ajout d'un header à toute requête entrante
  targetHeaders: {'token': 'some-complicated-hash'},

  // Définition du code de retour de l'application à chaque requête
  responseStatusCode: 204
})

Vous trouverez dans le répertoire exemples plusieurs autres types d'utilisation, comment utiliser les évenements, comment passer par HTTPS, ...

Options

Le constructeur du Forwarder a quelques options dont le but est de permettre à l'utilisateur de contrôler comment chaque requête à chaque cible est faîte et la réponse au client.

  • https: bool. Créer un serveur HTTPS (Défaut false)
  • https: object. Options à passer au constructeur https.createServer.
  • timeout: int. Timeout dans les requêtes aux serveurs cible. (Défaut: null)
  • targets: array. Liste des serveurs cible. Cf. les exemples.
  • targetHeaders: object. En-têtes à ajouter à la requête transférée. (Défaut: aucun)
  • targetOpts: object. Options à passer au constructeur de la requête http/https. Voir l'example et toutes les options disponibles
  • targetRetry object. Options de retry pour toutes les cibles
    • maxRetries: int, default 0.
    • delay: int, default 300 (ms). L'unité de temps pour le calcul de l'intervale entre retry successifs (cf. Wikipedia Exponential Backoff)
    • retryOnInternalError: bool, default false. Le forwarder doit-il faire des retry si la cible répond avec un code 5xx ?
  • responseStatusCode: Status code que le serveur envoie au client.
  • responseBody: body que le serveur envoie au client.
  • responseHeaders: En-têtes que le serveur doit ajouter à sa réponse.

Événements

La libraire vous permeter d'écouter des événements tout le long du cicle de vie du transfer des requêtes, et de tout modifier sur la route.

  • request (incommingMessage, response): L'événement request du serveur HTTP/HTTPS. Si vous appelez response.end() dans un callback callback, la requête ne sera pas transférée.
  • requestContents (incommingMessage, payload): Le contenu de la requête, le body.
  • response (incommingMessage, response): Appelé avant que le serveur ne réponde au client.
  • requestError (error, incommingMessage): erreur dans la gestion de la requête arrivante.
  • forwardRequest (options, incommingMessage): vous permet de modifier chaque requête transférée à chaque cible. Le premier argument est le array passé aux constructeurs http.request and https.request, après que toutes les configurations ont été appliquées. Si vous faîtes options.cancel = true, la requête actuelle ne sera pas transférée à la cible courante. Vous trouverez dans les exemples un ... exemple de ceci.
  • forwardResponse (request, incommingMessagei, willRetry): vous permet de gérer chaque réponse de chaque cible.
  • forwardRequestError (error, request, willRetry): erreur dans une des requêtes transférées.

Voir comment utiliser les événements.

Remerciements

node-http-proxy: notre librairie a commencée comme une version simplifiée et modernisée de celle-ci. node-http-proxy peut également servir de proxy et supporte des versions de node plus anciennes. Elle ne permet cependant qu'une seule cible dans le transfer des requêtes, ce qui ne répondait pas à notre besoin. Finalement nous avons tout re-écrit, mais merci beaucoup aux équipes de nodejitsu pour l'inspiration.