Développez votre propre API avec Node.js et Express

Chose promise, chose due : nous allons dans ce tutoriel apprendre à développer notre propre API. Nous allons proposer une API qui répertorie les piscines de la métropole lilloise informant les utilisateurs sur les horaires d’ouverture, les prix, les adresses, etc.

Bien entendu ce n’est qu’à titre d’exemple ;  le principe reste le même pour toute autre application que vous souhaiteriez développer.

Le tableau ci-dessous propose les différents URI supportés par notre API :

Liste des URI supportés par notre API

Liste des URI supportés par notre API

Pour développer notre API, nous allons utiliser Node.js et Express. Le premier permet d’utiliser le langage JavaScript côté serveur. En effet, si vous avez bien assimilé le fonctionnement des API, vous savez qu’il ne sera pas question ici de développer une interface graphique.

Le second est un framework qui s’appuie justement sur Node.js fournissant un ensemble de fonctionnalités pour faciliter le développement d’applications.

Installation de Node.Js

Commençons donc par installer ces deux outils. Pour installer Node.js, il suffit de se rendre sur le site web, de choisir et d’installer la version correspondant à votre système d’exploitation. Si vous êtes sur windows, vous devriez, après l’installation, avoir accès à une console windows nommée Node.js command prompt. C’est à partir de cette console que nous allons lancer notre application. Pour les autres (Mac et Linux), le lancement se fera depuis votre terminal ordinaire.

Pour tester votre installation, je vous propose de créer un fichier testfrugal.js depuis votre éditeur de texte préféré (Brackets, Sublime Text, Notepad++) dans lequel vous inscrivez la commande suivante :

À partir de la console, entrez la commande suivante :

Par exemple, dans mon cas (j’utilise windows et mon fichier est sur le bureau), cela donne :

La console devrait répondre le résultat de l’exécution de notre programme c’est à dire l’affichage du texte « Petit test frugal ».

Voilà, vous êtes prêt à utiliser Node.js et à exécuter des applications.

Maintenant que notre installation de Node.JS est opérationnelle, nous allons créer un dossier dans lequel se trouveront les différents fichiers de notre application. Pour ma part, j’ai créé un dossier, sur le bureau, que j’ai nommé « restfrugal ». Dans ce dossier, je crée un fichier que je nomme « apifrugal.js ». C’est dans ce fichier que nous développerons notre application : une API REST.

Découverte de NPM et installation d’Express

Comme évoqué précédemment, nous allons utiliser un module, nommé Express, qui va nous faciliter la tâche dans le développement de notre API. Pour commencer, nous devons donc installer ce module.

L’installation des modules se fait grâce à NPM, le gestionnaire de paquets officiel de Node.Js. Celui-ci est installé par défaut lors de l’installation de Node.Js.

Depuis la console, vous devez tout d’abord vous rendre dans le dossier créé précédemment (restfrugal, si vous avez suivi le tutoriel à la lettre). Pour ma part, c’est via cette commande :

Une fois dans le dossier, il suffit de lancer la commande suivante pour installer le module Express :

Mise en place de l’API

Maintenant, nous allons compléter notre fichier apifrugal.js. Pour des raisons pratiques, les commentaires explicatifs se trouvent directement dans le code :

Testons dès à présent ce premier code. Vous devriez savoir comment lancer l’application mais je le rappelle une dernière fois pour les distraits :

Une fois lancée, pour tester l’application, il suffit d’entrer dans la barre d’adresse de son navigateur l’URL suivante : http://localhost:3000/.

À ce stade, le navigateur devrait retourner une erreur du type « Cannot GET /  » qui, vous l’aurez probablement deviné, nous informe sur l’incapacité de notre application à gérer la méthode GET (méthode par défaut). Ce qui est logique étant donné que nous ne l’avons pas encore implémentée.

Gestion du routage

Nous allons donc, dès à présent, compléter notre code pour qu’il prenne en charge les méthodes GET, POST, PUT et DELETE. Pour tester toutes ces méthodes, je vous conseille d’utiliser Postman. Cet outil vous permettra d’envoyer les différentes requêtes prises en charge par notre API.

Nous pouvons dès à présent tester notre API (n’oubliez pas de relancer l’application) en vous rendant sur l’URL : http://localhost:3000/piscines ou depuis l’outil Postman. Je vous conseille d’utiliser ce dernier afin de tester toutes les méthodes.

Dans le code ci-dessus, notre API ne prend en charge que l’URI « /piscines »  avec l’URL correspondante : http://localhost:3000/piscines.

Si, vous essayez par exemple l’URL : http://localhost:3000/, notre API retournera de nouveau une erreur. En effet, nous n’avons pas déclaré de routes pour cet URI.

Pour implémenter d’autres routes, par exemple (« / »), le principe est le même que précédemment.

Souhaitons la bienvenue à nos utilisateurs lorsqu’ils appelleront l’URI racine « / » et cela peu importe la méthode utilisée. Pour ce faire, en dessous de la déclaration de la route « /piscines », nous ajoutons  :

Ceci étant fait, notre API doit maintenant pouvoir manipuler des ressources identifiées par un identifiant. En effet, nous l’avons vu dans l’article explicatif sur les API et notamment au travers de l’exemple de Google Books API, vous pouvez proposer des routes pour accéder à une ressource en particulier à partir de son identifiant.

Rien de plus simple, il suffit d’écrire le routage et de récupérer l’identifiant en utilisant la propriété req.params.name de l’objet req (que l’on retrouve dans l’implémentation des méthodes). Si vous avez été attentif, vous aurez remarqué que nous avons déjà utilisé cet objet pour récupérer le type de la méthode via la propriété req.method.

Ainsi, l’utilisateur de notre API peut maintenant accéder aux informations de la piscine dont l’identifiant est le n°18 directement depuis cet URL : http://localhost:3000/piscines/18.

Récupération des paramètres d’une URL

Lorsque vous utilisez une API, le fournisseur de celle-ci vous offre, dans la majorité des cas, la possibilité de préciser votre requête à l’aide de paramètres à inscrire dans l’URL. La récupération de ces paramètres dans notre API se fera encore à partir de l’objet req via cette fois-ci la propriété req.query.name.

Aussi, pour permettre à nos utilisateurs de lister les piscines d’une ville en particulier, tout en limitant le nombre de résultats retournés, nous pourrions prévoir deux paramètres « ville » et « maxResultat ». Pour cela, nous modifions l’implémentation de la méthode GET pour l’URI « /piscines ».

L’utilisateur souhaitant lister les piscines de la ville de Roubaix et limiter le résultat à deux piscines seulement, pourrait appeler l’URL suivante : http://localhost:3000/piscines?ville=Roubaix&maxresultat=2.

Vous devriez obtenir la réponse suivante :

Récupération des données envoyées par la méthode POST

Pour l’instant, nous n’avons pas encore géré les données envoyées par un utilisateur notamment dans le cas de l’ajout d’une piscine à la liste. C’est ce que nous allons voir dès à présent avec la propriété req.body.

Il nous faudra au préalable installer le module body-parser qui va nous permettre d’analyser les données reçues par l’API. Tout comme pour le module express, l’installation se fera via la commande suivante :

Ensuite, il faut créer un objet de type body-parser et intégrer cet objet dans l’application par ces lignes de code :

Imaginons maintenant qu’un utilisateur de notre API souhaite ajouter à notre liste, une piscine nommée « Splash Lille », qui se trouve à Lille et qui est dotée d’un bassin de 50 mètres.

Les données sont envoyées via la méthode POST. C’est donc cette méthode que nous allons modifier, toujours pour l’URI « /piscines ».

Ci-dessous une capture d’écran de la réponse depuis l’outil Postman.

Récupération des données d'une méthode POST

Récupération des données d’une méthode POST

Pour aller plus loin

Pour que notre API soit totalement opérationnelle, il manque un élément essentiel : la base de données. Effectivement, les différentes méthodes (GET, POST, PUT, DELETE,…) manipulent des données qui, dans la majorité des cas, sont stockées dans une ou plusieurs bases de données. Malheureusement nous ne traiterons pas le sujet des bases de données dans cet article…

Mais la bonne nouvelle est que c’est justement le sujet d’un prochain article. Nous disposerons alors de toutes les briques pour proposer une API fonctionnelle.

Comme d’habitude, si des erreurs se sont glissées dans l’article, n’hésitez pas à nous en faire part.

Pour être informé des prochains articles, rendez-vous sur Twitter.

Merci, et à très bientôt sur Frugal Prototype

Frugal Newsletter

Apprenez les rudiments du prototypage frugal !
Votre adresse email
Partagez cet article !
Share on LinkedInTweet about this on TwitterShare on FacebookShare on Google+
Ali Benfattoum

Ali Benfattoum

Serial Prototypeur, Citizen Clan Activist, Intrapreneur... Ali le reste du temps. Ma devise : c'est sur le terrain qu'on fait ses preuves... de concept. Suivez moi sur @alifrugal

3 réponses

  1. Antoine de Chassey dit :

    Très bon article merci, il manque juste la partie « sécurisation de l’API » qui est importante à développer.

  2. alex_6bo dit :

    Merci pour cet article !

  3. AFOLABI Jamal dit :

    Je tiens a dire merci pour ce qrticle et je te suit.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée.