Je vous propose un résumé des talks du meetup #70 de Paris.js chez Algolia le 31 janver 2018.
Pardonnez la forme brute et le franglais, l'idée est de retranscrire le contenu avant tout.

Conf 1 : You're probably making an API client

Par Hareoen Viaene @Algolia

Constat : des API dans tous les sens, qu'elles soient officielles / voulues ou non. => donc autant appliquer les bonnes pratiques même lorsqu'on ne veut pas vraiment faire de client API :
  • Separate the request from the core code (classique) ;
  • Wrap the fetch in a wrapper, then you don't care how the wrapper is implemented and can change it later ;
  • Instancier un objet apiClient qui connait les API keys (invariables pour tous les appels).

Conf 2 : An intro to graphql with JS

Par Alexandre Bodin

Principe
  • GraphQL = langage d'interrogation créé par FB pour optimiser les requêtes qui agrègent des données
  • Typage et syntaxe propres
  • Possibilité d'agréger des données sans faire de multiples A/R sur l'API (par exemple, demander TOUS les auteurs et TOUS leurs livres en une fois)
  • API côté serveur : déclaration d'un schéma de ce que doit proposer l'API, des requêtes en BDD correspondantes
Outils côté client
  • Apollo (équipe de MeteorJS) : grande communauté, compatible avec beaucoup de frameworks ou libs, bon pour démarrer
  • Relay (de FB) : très intégré à react, optimisé, compile, communauté moins grande, plus complexe
  • Dans les deux cas, queries en cache après le fetch
Pros
  • Pas de réel inconvénient à l'utiliser
  • Implémentation proche d'un appel à une API
  • Pas de documentation de l'API à produire car faite automatiquement par la fonction d'introspection
  • Cache nativement géré
Cons
  • Pas grand-chose
  • Pas possible de faire du cache HTTP en get car un seul endpoint graphql en POST

Conf 3 : Async hook sur node.js

Par Vladimir De Turckheim @Sqreen & reviewer Node.js officiel

Problématique : stacktraces très courtes en node à cause de l'event loop. En opérations asynchrones, Node perd la notion de contexte => impossible à debugger !
Solutions
  • Les domains : créer un contexte d'exécution asynchrone et catcher toutes les erreurs non handlées. Mais performance killer ! + Deprecated, en cours de décommissionnement.
  • Userland patching : override toutes les méthodes asynchrones du code et l'encadre. Mais ne marche pas avec async / await. + Doit documenter toutes les méthodes appelées !
Async_hooks
  • Mettre 4 hooks autour des opérations asynchrones : init, before (avant que le callback ne soit appelé), after (après que le callback est appelé), destroy.
  • Permet de connaître l'ID de l'opération async parente et enfant, et donc récupérer le contexte parent et le passer à l'enfant, et afficher la stacktrace complète en cas de catch chez l'enfant.
  • OUI MAIS (info récente) : parfois perte de 30% des perfs.
fin