Tuto : comment réaliser une API REST en Golang ?
Dans un monde de plus en plus digitalisé où l’échange d’informations se fait en moins d’une seconde, les API sont devenues indispensables pour les développeurs. En effet, plus besoin de recréer un service ou une application qui existe déjà pour l’exploiter. Il suffit de faire communiquer notre application avec une application ou un service qui a les fonctions ou les données dont on a besoin. Les API qui utilisent différents protocoles et peuvent être programmées en différents langages. Dans cet article, YPSI fera un focus sur les API REST (protocole HTTPS) ayant comme langage de programmation en Golang.
YPSI vous propose de créer votre API REST en Golang car c’est un langage peu connu contrairement aux géants Flask (Python) ou Spring (Java). C’est un avantage puisqu’il peut être vu comme “un océan bleu” avec lequel les développeurs peuvent innover. Dans la suite de cet article, découvrez comment faire.
Qu'est-ce qu'une API REST et le langage Golang ?
Le Golang est un langage de programmation compilé développé par Google en 2009 et inspiré des langages C et Pascal. Ce langage renforce sa popularité au fil des années. Selon le site Jet Brains, environ 2,7 millions de développeurs professionnels utilisent ce langage dans le monde.
Une API (Application Programming Interface) peut être considérée comme un contrat faisant le lien entre un fournisseur d’informations et un utilisateur d’informations. Son rôle est de permettre la communication et l’échange de données entre deux applications distinctes. Par exemple, une API GOOGLE MAPS, va vous permettre d’ajouter la carte google maps sur votre site web, donc pas besoin de recréer une carte dans votre site web.
Une API REST (REpresentational State Transfer) est une API respectant un ensemble de contraintes architecturales. Elle a la particularité d’utiliser le protocole HTTPS, qui va permettre que des applications ayant des systèmes d’exploitation et des applications différents, puissent communiquer.
Afin de réaliser une API en Golang, plusieurs frameworks existent mais les plus connus sont Gin et Echo qui sont différents sur plusieurs points.
Frameworks Golang : Gin VS Echo
Gin est un framework rapide avec une petite empreinte mémoire. De plus, il comporte une excellente gestion des erreurs et notamment une protection contre les collisions. Cependant, il n’est pas aussi flexible que Echo dans le développement et comporte une documentation de qualité inférieure et une syntaxe moins concise.
Echo est un framework Web extensible et minimaliste. De plus, il contient une excellente prise en charge des modèles permettant une certaine flexibilité lors de la création d’applications Web plus volumineuses. Il permet l’installation automatique de certificats TLS rendant les applications Web plus sûres par défaut. Enfin, il prend en charge une variété de types de fichiers (JSON, XML et HTML) pour les réponses HTTP. Cependant, son principal inconvénient est la petite communauté pour le support.
YPSI vous propose de créer vos API avec GIN, parce que c’est le framework le plus utilisé pour créer spécifiquement des API REST et il est simple d’utilisation. De plus, grâce à sa forte communauté d’utilisateurs, vous bénéficiez de conseils et tutos pour avancer plus rapidement et sereinement dans votre travail.
Comment développer son API REST avec GIN ?
Étape 1 : initatiation du projet
Pour commencer, créons un dossier pour le projet contenant un fichier “main.go”, ainsi que deux dossiers “controllers” et “models”. Initialisons un nouveau Go module pour gérer les dépendances de notre projet et installer le framework Gin.
go mod init
go get github.com/gin-gonic/gin
Étape 2 : création du serveur
Nous allons commencer par créer un serveur Hello World dans le fichier “main.go”.
Serveur Hello World
Dans ce code, nous créons la fonction “main” qui est le point d’entrée de notre application. Dans celle-ci, nous définissons une variable “r” représentant le routeur par défaut de Gin.
Puis, nous créons une route ayant pour endpoint “/” et pour gestionnaire une fonction renvoyant un code HTTP OK et un JSON comportant “hello world”. Ces deux éléments sont obligatoires pour définir une route avec Gin.
Enfin, il est possible de démarrer le serveur avec la commande suivante et d’effectuer une requête avec Postman vérifiant son bon fonctionnement.
go run main.go
Test de la requête serveur
Étape 3 : création de la base de données
Pour simplifier ce tutoriel, nous n’utilisons pas de persistance des données avec une base de données. Cependant, pour ajouter de la persistance, il est possible d’utiliser le framework Gorm qui fera l’objet d’un futur article.
Dans un premier temps, nous allons créer une classe “métier” représentant un livre dans le dossier “models” dans un fichier nommé “book.go”. Dans notre cas, un livre sera représenté par un ID, un Titre et un Auteur.
Création d'un livre
Puis, dans le dossier “controllers”, nous allons créer un fichier “book.go” qui va contenir toutes les fonctions, nous permettant de gérer nos livres. La première fonction à créer est la fonction d’initialisation de la base de données. Pour ce faire, nous créons une variable “Library” qui correspond à un tableau de livres dans lequel nous allons ajouter un premier livre.
Création d'un tableau de livre
Enfin, dans le fichier “main.go”, nous allons initialiser la base de données en faisant appel à la fonction précédemment créée.
Initiation de la base de données
Étape 4 : création des routes REST
Pour ce tutoriel, nous allons apprendre à créer trois routes (GET, POST, DELETE) permettant d’agir sur nos livres, il est bien sûr possible d’en créer beaucoup plus.
Obtenir tous les livres
Pour cela, nous devons créer une route de type GET dans le fichier “main.go” ayant pour endpoint “/books”
Route type GET
Puis, nous implémentons une fonction “FindBooks” dans le fichier “controllers/book.go” permettant de récupérer l’ensemble des livres présents dans la librairie.
Implantation de la fonction "FindBooks"
Une fois le serveur démarré, il est possible de tester cette requête GET dans Postman afin de vérifier la récupération des livres.
Test de la requête GET
Création d’un livre
Pour créer un livre à travers l’API, nous devons créer une route de type POST dans le fichier “main.go” ayant pour endpoint “/books”.
Route de type POST
Puis, nous créons la fonction “CreateBook” dans le fichier “controllers/book.go”. Elle permet de vérifier que le livre passé par l’utilisateur dans le corps de la requête est valide, de créer le livre et de l’ajouter dans la librairie en retournant à l’utilisateur le livre créé.
Fonction "CreateBook"
Enfin, il est possible de vérifier la requête avec Postman après avoir redémarré le serveur.
Test de la requête POST
Suppression d'un livre
Pour supprimer un livre à travers l’API, nous devons créer une route de type DELETE dans le fichier “main.go” ayant pour endpoint “/books” et un paramètre “id”.
Route de type DELETE
Puis, nous créons la fonction “DeleteBook” dans le fichier “controllers/book.go”. Elle permet de vérifier que l’ID passé par l’utilisateur correspond à un livre présent dans la librairie. Avec cette fonction, vous allez pouvoir supprimer le livre de la librairie et retourner à l’utilisateur “true” signifiant que tout s’est bien déroulé. Pour la suppression, une fonction “removeIt” est créée, réalisant la suppression dans un tableau.
Fonction "removelt"
Enfin, il est possible de vérifier la requête avec Postman après avoir redémarré le serveur.
Test de la requête DELETE
L’intégralité du code présenté dans ce tutoriel est sur mon GitHub. Il est possible de le cloner sur votre ordinateur.
git clone https://github.com/MelissaB79/Golang-API-tutoriel.git
Quels sont les avantages et inconvénients de Golang ?
L’un des principaux avantages de Golang, est qu’il est facilement maintenable, avec une syntaxe propre et soignée. Cela rend son processus d’apprentissage plus aisé pour les développeurs débutants. De plus, il possède une gestion très efficace de la concurrence et du multithreading, grâce aux goroutines. Enfin, Golang est connu pour créer un binaire léger pour chaque système d’exploitation, rendant la distribution du programme beaucoup plus facile que d’autres langages.
Les principaux inconvénients de Golang, sont qu’il ne contient aucun type générique et qu’il est partiellement orienté objet car les classes, l’héritage et les constructeurs n’existent pas dans ce dernier. De plus, il peut être difficile de transcrire en Golang un programme développé en Java et C++ qui sont des langages classiques orientés objet. Enfin, la gestion des erreurs peut être complexe puisqu’il n’existe pas d’interceptions. De plus, le champ de ce qui rentre dans la catégorie erreur est assez vaste et un grand nombre de fonctions finissent par renvoyer une erreur.
Conclusion
Golang offre de nombreux avantages dans son utilisation avec sa syntaxe propre et soignée et sa possibilité de créer un binaire pour chaque système d’exploitation. Il existe plusieurs frameworks permettant la création d’API en Golang mais les plus connus sont Gin et Echo. Gin est le plus utilisé et il a la plus forte gestion d’erreur.
Chez YPSI, nous réalisons des API (mais pas seulement en Go) pour nos clients afin d’automatiser leurs tâches de déploiement, de supervision et d’analyse. N’hésitez pas à nous contacter pour toutes questions ou projets.
Partagez cet article :