Créer une API Hypermedia avec Threerest et Node.js en moins de 10 minutes - Partie 1

Le papyrus des API’s

Une API (Application Programming Interface) ou interface de programmation est un ensemble de normes qui permet l’échange de données entre des systèmes hétérogènes. En clair, il s’agit d’un code qui remplit un service. Il peut donc être sollicité par n’importe quel acteur (humain ou machine). Donc pour une API donnée, on aura un fournisseur de service autrement dit l’API et le consommateur du service, un client web par exemple. La beauté des API réside dans le fait que le consommateur ne connait pas l’implémentation du service. De ce fait, un client PHP peut consommer une API en PHP, en Java ou bien encore en Go. La seule contrainte pour l’API est de rendre correctement son service.

Afin de pourvoir communiquer le plus simplement possible, le protocole HTTP est utilisé pour la communication. L’accès aux APIs se fait donc à travers des liens. Voici quelques exemples d’URL d’API :

https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=37.865025,-119.538308&radius=20&key=ABCDEF

http://twitter.com/statuses/

http://gdata.youtube.com/feeds/

http://api.flickr.com/services/rest/

 Une API peut être publique, semi publique ou privée. Il existe de nombreux catalogues d’API et ce pour n’importe quel domaine. Cela va de la consultation en temps réel des horaires de bus (http://data.nantes.fr/donnees/detail/info-trafic-tan-temps-reel/) à la récupération d’informations sur des livres (https://developers.google.com/books/), en passant par la validation d’email (https://market.mashape.com/pozzad/email-validator-1). Il existe même un API pour parler comme Yoda (http://www.yodaspeak.co.uk/). Il existe une API pour tout et n’importe quoi. La seule limite pour faire un API est votre imagination (et votre temps !). Petite précision, nous allons uniquement aborder ici les API REST. Alors let’s code !

 NodeJS chez les développeurs

Node.js est une plateforme logicielle en JavaScript. Node.js permet de coder en JavaScript côté serveur. Il est choisi pour cet article pour sa simplicité de prise en main et d’utilisation. L’installation de Node.js (https://nodejs.org/en/) se fait sans problème particulier. Nous allons omettre volontairement certains détails d’implémentation concernant plus Node.js que les API. L’idée étant ici de coder une API et non d’apprendre Node.js.

Pour commencer, il faut créer un répertoire vide (par exemple bdtheque_simple) puis y ajouter un fichier vide, nommé app.js par exemple. Pour le reste de l’article, le répertoire de base du projet sera donc dénommé bdtheque_simple, vous pouvez naturellement l’appeler comme vous le souhaitez.

Le code suivant va créer notre serveur HTTP avec Node.js

var http = require('http');

http.createServer(function (req, res) {

  res.writeHead(200, {'Content-Type': 'application/json'});

  res.end(JSON.stringify({message:"Mon premier serveur Node.js !!!"}));

}).listen(8080);

console.log('Le serveur est accessible ici : http://localhost:8080/');

Petite explication de texte :  l’instruction createServer va enclencher la création du serveur et permet d’ajouter un listener sur la réception d’une requête (ici l’écriture d’une simple ligne). L’instruction finit en précisant le port d’écoute (8080) avec l’instruction listen.

Pour lancer votre serveur, vous devez ensuite ouvrir un shell Node.Js . Puis vous positionner à la racine de votre projet et rentrer la commande suivante dans le shell de Node.Js :

node app.js

Vous pouvez alors tester votre serveur à l’adresse http://localhost:8080, vous obtenez le résultat suivant :

serveur localhost

serveur localhost

Autre façon de tester vos requêtes HTTP : HTTPie. HTTPie est un curl avancé à destination des humains cela permet de faire des requêtes de façon plus simple et plus intuitive. C’est un outil extrêmement pratique et qui va vous rendre de grands services.

HTTPie

HTTPie

L’installation de HTTPie se fait sur cette page (https://github.com/jkbrzt/httpie). Vous verrez les différentes syntaxes de cet outil au cours de l’article.

Rendu à ce point vous avez donc installé Node.js, créé votre premier serveur et testé son fonctionnement. Il est donc temps d’introduire notre premier framework.

 Express et compagnie

Express est un framework qui permet d’accélérer le développement d’application web.  En d’autres termes, Express va nous permettre de structurer notre projet tout en nous apportant des outils puissants et précieux pour un gain en productivité.

Pour ajouter Express à votre projet, nous allons utiliser npm (Node Package Manager). Il s’agit d’un utilitaire qui va vous permettre de gérer nos différents modules Node. Faites-nous confiance : une fois que vous y aurez pris goût vous ne pourrez plus vous en passer. Npm est présent dans la distribution de Node.js donc vous ne le savez pas, mais vous avez déjà installé npm. Pour fonctionner npm a besoin d’un fichier package.json qui doit être présent à la racine de votre projet. Pour cela, il suffit de taper la commande suivante et de répondre aux questions :

npm init




Voici le résultat du npm init :

{

  "name": "bdtheque",

  "description": "mon application de demo pour une gestion des BDs",

  "version": "0.0.1",

  "main": "app.js"

}

Si vous voulez ajouter une dépendance au package.json il faut taper en ligne de commande :

npm install express --save

Ceci va permettre d’installer express au sein de votre de projet. Le –save va inscrire la dépendance au sein du fichier package.json. Le fichier va donc être réécrit de façon automatique par npm de la manière suivante :

{

  "name": "bdtheque",

  "description": "mon application de demo pour une gestion des BDs",

  "version": "0.0.1",

  "private": true,

  "dependencies": {

    "express": "^4.13.4"

  }

}

Vous remarquerez ici l’ajout de l’entrée dependencies. L’accent circonflexe sur la version permet de préciser à npm de se mettre à jour pour toutes les versions majeures à partir de 4.x.x, dès qu’on relancera l’installation des dépendances (commande ‘npm install’ sur notre projet) mais il ne s’upgradera pas sur la version 5.x.x.

Le projet sera nommé bdtheque_express. La création d’un serveur en Express diffère légèrement de la manière précédemment vue, mais le principe reste identique. Ouvrez votre fichier app.js et supprimez ce que vous avez écrit précédemment et remplacez le par le code suivant :

//Import du framework Express

var express = require('express');

// Instanciation du framework

var app = express();




// Création de la route par défaut, celle présente à la racine.

app.get('/', function(req, res) {

  res.send({message:"Mon second serveur Node.js !!!"});

});




// Déclaration du port d'écoute du serveur.

app.listen(8080);

console.log('Le serveur est accessible ici : http://localhost:8080/');

Comme précédemment, vous pouvez tester votre serveur express (n’oubliez pas de lancer votre serveur avec la commande node apps.js).

commande node apps.js

commande node apps.js

Vous vous retrouvez donc avec exactement le même résultat que précédemment. La seule différence est que l’application en cours d’exécution est de type Express et cela va nous rendre grandement service dans la prochaine partie.

La Database d’or

Maintenant que nous avons un serveur opérationnel, nous allons vouloir lui ajouter des opérations. Dans notre exemple, nous partons sur une gestion d’une BDthèque. Donc le premier service à implémenter est de connaître le nom de tous les auteurs des BD contenus dans notre collection de BD. Afin de pouvoir tester notre API, nous allons nous baser sur une base de données stockée au format JSON. Nous allons donc copier le fichier database.json dans le répertoire database à la racine de notre projet. La base de données est regroupée en liste d’auteurs, de séries et de titres.

Un auteur participe à une ou plusieurs séries. Une série contient un ou plusieurs titres. Un titre appartient donc à une série et à un auteur.

Pour utiliser notre base de données au sein de notre serveur, il suffit d’utiliser require pour notre fichier Json (notez que l’ajout de l’extension du fichier est optionnel) :

var db = require('./database/database');

 

0 commentaires

votre commentaire

Se joindre à la discussion ?
Vous êtes libre de contribuer !

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Inscription newsletter

Ne manquez plus nos derniers articles !