Comment écrire un point d’API REST en Phoenix
by Alexandre Dedourges, DevSec
Vous avez peut-être déjà entendu parler de Phoenix Framework sur la toile. En effet c’est un framework qui gagne en popularité au fur et à mesure du temps. Pourquoi ? Tout simplement, car celui-ci offre rapidité et productivité aux personnes qui l’utilisent. Bien que cela puisse paraître contre-intuitif, c'est pourtant ce que propose ce puissant outil. Vous vous demandez peut-être maintenant quel est ce framework et à quoi il sert ? Cet article est fait pour vous ! C’est un outil très pratique qui va aussi vous permettre d’utiliser très simplement des points d’API (Application Programming Interface) dans vos projets. Tel l’Ordre du Phénix qui se bat pour HAPI Potter, Phoenix Framework se bat pour des API plus simples d’utilisation !
Phoenix Framework pour des applications fluides et rapides
Phoenix est un framework de développement web. Il est écrit en Elixir, qui est un langage de programmation dit multi paradigme (un paradigme étant une façon d’aborder la programmation informatique). Celui-ci fonctionne sur une machine virtuelle Erlang (BEAM) qui permet aux applications écrites en Elixir de fonctionner. Son créateur, José Valim, désirait créer un langage de programmation pour les sites et applications à grande échelle. Il a été créé pour tirer profit au maximum des processeurs multi-cœurs qui ont commencé à se démocratiser pleinement à partir des années 2000. Il est particulièrement utilisé pour créer des systèmes distribués à faible latence et tolérants aux pannes.
Phoenix tire donc pleinement avantage des points forts d’Elixir, ce qui en fait un outil puissant pour le développement. Ce framework implémente le modèle MVC (Model View Controller) côté serveur. Le MVC est un motif d'architecture logicielle destiné aux interfaces graphiques très populaires pour les applications web. Il est composé de trois types de modules ayant trois responsabilités différentes : les modèles, les vues et les contrôleurs.
MVC : source https://rosedienglab.defarsci.org/a-quoi-sert-une-architecture-mvc-son-fonctionnement/
Ce type de modèle permet une meilleure répartition des tâches en séparant la logique métier et l’affichage.
Ce qui fait la force de Phoenix c’est qu’il allie productivité et performance. En effet, celui-ci offre une grande capacité de développement et des performances applicatives très élevées.
Les API REST, les pros de la communication
Une API REST (REpresentational State Transfer) est un style architectural qui permet aux applications de communiquer entre elles, que ce soit sur le réseau ou sur un même appareil. Le REST utilise des méthodes HTTP pour communiquer d’un client à un serveur. Ce qui est intéressant avec les API REST, c’est le fait qu’elles soient universelles. Elles fonctionnent sur tous les appareils et systèmes d’exploitation. La plupart du temps, les API REST utilisent le JSON (JavaScript Object Notation) ou le XML (EXtensible Markup Language) pour leur communication, mais elles peuvent aussi utiliser d’autres formats de données.
De nombreuses applications utilisent déjà les API REST pour communiquer entre elles.
L’utilisation d’APIs REST pour votre application Elixir et Phoenix Framework
Voyons désormais comment utiliser des API REST avec notre application en Elixir et Phoenix Framework. Nous allons beaucoup utiliser les 3 modules de notre framework qui sont : les modèles, les vues et les contrôleurs. C’est la base de toute application Elixir.
Pour commencer, la première étape sera bien évidemment l’installation d’Elixir sur votre machine. Phoenix est un framework basé sur ce langage, il est donc nécessaire de pouvoir le manipuler et l’utiliser. Si vous souhaitez en savoir plus sur celui-ci, vous pouvez consulter le site web qui lui est dédié ou encore la documentation officielle. Pour l’installation, c’est par ici. Pour utiliser Phoenix, il est donc nécessaire d’avoir des bases en Elixir. Si vous ne savez pas par où commencer pour apprendre à utiliser ce langage, leur site web propose une sélection de livres, cours en ligne, etc. N’hésitez donc pas à y jeter un œil !
Passons à la suite ! Une fois qu’Elixir est présent sur votre machine et que vous en avez appris les bases, on va tout d’abord installer l’application Phoenix à l’aide de la commande suivante :
mix archive.install hex phx_new
Cette commande installe l’application Phoenix dans le dossier dans lequel vous l’exécutez. Vous remarquerez l’utilisation de « mix » qui est disponible immédiatement après l’installation d’Elixir sur votre machine. Celle-ci aura différentes utilités dans le cadre de votre projet.
Maintenant que notre application Phoenix est prête, on va créer un nouveau projet Phoenix. Ce projet sera une application bancaire qui vous permettra de connaître votre solde par exemple. Pour ce faire, utilisez la commande suivante :
mix phx.new bank_account
Un nouveau projet est désormais créé, celui-ci se présente sous la forme d’un dossier comprenant plusieurs fichiers et sous-dossiers.
Pour utiliser pleinement notre application et nos points d’API, nous allons avoir besoin d’une base de données. Pour ce faire, différents choix s'offrent à vous : MySQL, postgres… dans notre cas nous utiliserons postgres, car c’est ce qui nous est proposé par défaut par Phoenix. Il faudra alors avoir postgres ou tout autre système de gestion de base de données installé sur votre machine.
Pour interagir avec notre base de données, un outil très pratique va être mis à notre disposition : Ecto. Ecto est un wrapper de base de données et le générateur de requêtes pour Elixir. Il va vous permettre de gérer simplement et efficacement tout ce qui touche à vos bases de données.
Par exemple, vous pouvez commencer par créer votre première BDD en tapant la commande suivante :
mix ecto.create
Une fois celle-ci créée, on va devoir la remplir. On doit donc créer des schémas. Voici une façon simple de créer un schéma :
mix phx.gen.schema User users first_name:string last_name:string balance:float
Cette commande va générer automatiquement un modèle contenant le schéma « users » pour vous. Elle va aussi créer un script qui va permettre de migrer les informations nécessaires sur notre base de données. On indique dans cette commande que nos utilisateurs sont caractérisés par un nom et un prénom sous la forme d’une chaîne de caractères, ainsi qu’un solde bancaire sous la forme d’un nombre réel.
Une autre manière de faire consiste à créer un contexte. Ce dernier sert à créer un regroupement de modules qui ont des fonctionnalités communes.
Par exemple un Context Account contiendrait des users et tout autre module pouvant être en relation avec un compte bancaire. La commande à utiliser serait alors :
mix phx.gen.context Account User users first_name:string last_name:string balance:float
De nouveaux fichiers sont alors générés dans notre projet. Dans un premier temps, un fichier contenant notre schéma utilisateur (user) et définissant ses champs (first_name, last_name et balance) ainsi que leur type.
Un fichier “Account” qui regroupe toutes les opérations du CRUD (Create, Read, Update, Delete) concernant les utilisateurs. Ces opérations sont générées par la commande “mix” précédente sans avoir rien à faire ! Plutôt pratique n’est-ce pas ?
Et enfin un fichier de migration qui va vous permettre de migrer vos schémas vers la base de données pour définir ce que celle-ci va contenir, ainsi que des fichiers de tests.
Pour lancer la migration vers la BDD, il faut exécuter la commande suivante :
mix ecto.migrate
Maintenant que nous avons notre application, notre base de données, nos schémas et nos opérations du CRUD, passons à la chose qui nous intéresse : l’utilisation d’une API pour effectuer nos opérations du CRUD.
À partir d’ici, deux choix s’offrent à nous : utiliser une commande pour générer automatiquement nos opérations et nos points d’API ou les écrire nous-mêmes.
La première option consiste à exécuter la commande suivante :
mix phx.gen.json Account User users first_name:string last_name:string balance:float –no-context –no-schema
Ici, on précise qu’on ne veut pas générer de “Context”, ni de schéma, car ceux-ci sont déjà présents dans notre projet. La prochaine fois, vous pourrez simplement générer vos Contexts et Schémas à l’aide de cette seule et unique commande.
Une fois que vous aurez exécuté cette commande, vos points d’API seront déjà presque prêts à être utilisés. Il suffit de rajouter la ligne de code ci-dessous dans votre fichier « router.ex » à l’intérieur du scope :api pour que les routes soient créées.
Cette simple ligne va définir vos points d’API utilisables avec votre application. Voici les différentes routes que cette ligne de code va créer :
Pour en savoir plus sur le routing, n'hésitez pas à consulter la documentation officielle.
La deuxième option est de créer vous-même vos propres fonctions pour que celles-ci correspondent à vos besoins.
Vous aurez alors besoin dans un premier temps de vous rendre dans votre fichier “router.ex” et d’y ajouter la même ligne que précédemment :
Vous devriez alors avoir ceci :
Once this is done, go to your "user_controller.ex" file
Une fois cela fait, rendez-vous dans votre fichier “user_controller.ex”. Vous pouvez alors y créer les fonctions suivantes :
Chacune de vos fonctions sera exécutée en fonction du point d’API que vous utilisez. Par exemple lorsque vous voudrez récupérer un utilisateur à partir de son ID, vous devrez utiliser cette route :
C’est la fonction “show” de votre Controller qui sera alors exécutée.
Suite à quoi, c’est la fonction du CRUD contenu dans votre fichier “account.ex” qui sera exécutée. Si aucune erreur n’est à signaler, c’est la fonction “render” qui rentre en jeu. Cette fonction doit être créée dans votre fichier “user_view.ex”, c’est dans celui-ci que vous allez déterminer comment va se passer le rendu.
Voici à quoi pourraient ressembler les fonctions que vous aurez à créer :
Chaque fonction ici est différente, bien que leurs noms soient les mêmes. On va exécuter celle dont nous avons besoin grâce au pattern matching. Le premier “render” va servir à afficher plusieurs utilisateurs. Le second fera de même, mais pour un seul utilisateur. Le troisième est celui qui est utilisé par les deux premières pour l’affichage de chaque attribut ou des utilisateur(s).
Une fois cela fait, vous pouvez tester vos fonctions ! Si celles-ci sont fonctionnelles, alors vos points d’API sont prêts à être utilisés !
Vous pouvez par exemple, pour l’affichage d’un utilisateur, avoir recours à cette requête :
Ici on crée une requête HTTP GET, on passe en paramètre la connexion et la route que notre routeur s’est chargé de créer pour nous en y passant la connexion, la fonction à exécuter (ici “show”) et l’ID de l’utilisateur que nous voulons récupérer et afficher.
Vous venez de faire votre première requête API !
Pour vérifier que tout fonctionne correctement, vous pouvez utiliser Postman qui est un utilitaire très pratique pour tester vos points d’API !
Phoenix Framework un outil qui facilite l’utilisation d’API
Comme vous avez pu le constater, Phoenix Framework est un outil très pratique pour créer des applications web, c’est aussi un outil qui facilite grandement l’utilisation des API dans vos projets. En effet, avec des fonctions dédiées ainsi que des outils pouvant générer directement un projet fonctionnel avec des points d’API, celui-ci offre un gain de temps considérable. Bien évidemment, pour des projets plus poussés, il faudra réaliser vos propres fonctionnalités. Néanmoins, Phoenix fournit ici tous les outils nécessaires à la bonne réalisation de votre projet et permet aux débutants de commencer en toute sérénité.
Alors, prêt à en apprendre plus sur les API REST, Elixir ou encore Phoenix Framework ? On vous en dit plus chez Cryptr ! N’oubliez pas de nous suivre sur Twitter et Linkedin pour être au courant des dernières nouvelles !
Add enterprise SSO for free
Cryptr simplifies user management for your business: quick setup, guaranteed security, and multiple free features. With robust authentication and easy, fast configuration, we meet businesses' security needs hassle-free.