Gérer une API complexe
avec Railstation

EXPRESS

Qui a besoin d'une présentation ?


  • C 'est un routeur HTTP
  • Au dessus de Connect, un serveur HTTP
  • Et un petit peu plus...
    • Cookies et sessions
    • Configuration de l'application
    • Nombreux moteurs de templates
    • Interfaçage avec middlewares Connect (dont Passeport)

    Express

    À quoi ça ressemble ?



    // File: server.js

      app.use(middleware);
    app.VERB('/api/v2/path/to/:resource', function(req, res) {
     if (happy)
     res.send(awesomeness);
     else
     res.send(sadness);
     }

    Tellement enfantin, n'est-ce pas ?

    Express

    Dans la vraie vie


    • Soit on met tout dans un fichier, tellement pratique

    Express n'a pas d'opinion sur votre organisation,

     j'espère que vous avez la votre

    Express

    L'éternel problème du créateur d'API


    • Pas de conventions, pas d'opinions, pas de guides !
    • Exemple: aggréger des avis sur des confiseries
        • par customer ? /api/customer/:id/rate
        • par confiserie ? /api/candy/:id/rate
        • autrement ?      /api/rates
    • Beaucoup de chances de se tromper, il faudra vivre avec !
      • Comment documenter ?
      • Comment éviter la dispersion des EndPoints API ?

    Express

    Trop de travail pour le programmeur ?


    • Déclarer plusieurs fois /api/toto : Express les appellera les uns après les autres
    • C'est à vous de gérer le dispatching des handlers sur les EP
      • Lorsque l'authentification influe sur la disponibilité
        • Normal: pas d'intégration avec Passport
      • Lorsque les paramètres de Query/Post changent leur signification
        • Pensez: /api/resource/query ou /api/collection/search


    Après tout, moins on a de travail... ;-)

    Dans un autre monde


    • Des Best practices, des conventions (Rails et dérivés)
    • Des interfaces déclarées par configuration (toolkits graphiques)
    • De la vérification automatique de paramètres



    Doit-on vraiment s'en passer ?

    Je vous propose Railstation


    • Construit par dessus Express
    • Basiquement : un fichier routes.json (ou Yaml, ou Js…)
    • Tente de résoudre quelques uns des problèmes constatés
      • Fichier déclaratif servant de documentation basique de votre API (à la http://apiary.io, jetez un œil)
      • Validation des routes (duplications, zones éclatées, ...)
      • Gestion des fichiers d'erreur (404.html)
      • Conscient de l'authentification et des rôles utilisateurs
      • Dispatching par versions d'API (url ou par header HTTP)
      • Dispatching par role
      • Dispatching par parametres de requête
      • Validation des parametres
      • … la votre ?



    Maintenant, allons sur Github



    Questions ?

    Railstation presentation

    By Thomas Wickham

    Railstation presentation

    Talk de 30 minutes au Meetup NodeJS Paris #3

    • 1,454