Bonjour à tous,
C'est déjà la rentrée ! Et j'ai besoin de votre point de vue SVP.
On utilise NodeJS pour nos API avec Express mais la question est générale pour toute stack NodeJS.
On souhaite pouvoir faire transiter un identifiant de requête quand un appel d'API survient, un correlationId comme on dit.
Ce correlationId permet de suivre dans les logs (kibana/etc.) les différents traitements liés à un appel d'API.
1/ Dans un midddleware on génère/récupère un correlationID unique pour la requête d'API en cours
2/ On le passe au premier service qui le trace avec des infos dans les logs
3/ Le premier service passe ce correlationID aux autres services qu'il appelle
4/ Les services suivants font de même
5/ etc...
Dans les logs on peut voir l'activité liée à cette requête en filtrant sur ce correlationID
12:15:01 correlationID1234 ServiceA de traitement de la requête: OK
12:15:01 correlationID1234 ServiceB d'envoie d'email: OK
12:15:01 correlationID1234 ServiceC de sauvegarde: OK
12:15:01 correlationID1234 ServiceD de recyclage des déchets: OK
...
Est-ce que vous avez déjà eu ce besoin et comment l'avez vous développé ?
Actuellement, on se balade avec un object de contexte qui contient de correlationId entre tous les appels, c'est assez fastidieux comme vous pouvez l'imaginez. Ce n'est pas facilement scalable.
On sait qu'on peut le faire avec les ProxyES6, les décorateurs dans NodeJS 8, des sessions, l'api domain NodeJS (deprecated), avec de la génération de code,
https://datahero.com/blog/2014/05/22/node-js-preserving-data-across-async-callbacks/ etc... Il existe plusieurs implémentation possible mais toutes celles qu'on a exploré ont des limitations jusqu'à présent. On compte sur les décorateurs dans NodeJS 8 pour nous simplifier la tâche.
Bref, est-ce que vous avez un avis sur une bonne pratique d'implémentation pour passer des informations à tous les traitements qui vont s'executer lors d'un appel d'API par exemple ?
Bonne journée
Cyril