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
- Soit on utilise un des DP Express pour organiser ses routes
- Route list: https://github.com/visionmedia/express/blob/master/examples/route-separation/index.js#L24
- Route map: https://github.com/visionmedia/express/blob/master/examples/route-map/index.js#L47
- Lazy Loading par controller: https://gist.github.com/mackwic/6902350
- Le votre ?
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