1. Programmer des API avec Python et Flask

Publié le par berenger benam

Objectifs :

 Les API (Application Programming Interfaces) Web sont des outils permettant de rendre de l’information et des fonctionnalités accessibles via internet.

Qu’est-ce qu’une API ?

• Une API web permet à de l’information et à des fonctionnalités d’être manipulées par des programmes informatiques via internet.

Par exemple, avec l’API web Twitter, on peut écrire un programme dans un langage comme Python ou Javascript qui collecte des métadonnées sur les tweets.

Qu’est-ce qu’une API ?

• Plus généralement, en programmation, le terme API (abréviation de Application Programming Interface) réfère à une partie d’un programme informatique conçue pour être utilisée ou manipulée par un autre programme, contrairement aux interfaces qui sont conçues pour être utilisées ou manipulées par des humains.

• Les programmes informatiques ont souvent besoin de communiquer entre eux ou avec le système d’exploitation sous-jacent et les API sont une façon de le faire.

• Dans la suite, toutefois, on se limitera aux API Web.

Quand créer une API ?

• Si on dispose de données qu’on souhaite partager avec le monde entier, créer une API est une façon de le faire.

• Toutefois, les API ne sont pas toujours la meilleurs façon de partager des données avec des utilisateurs.

• Si le volume des données qu’on souhaite partager est relativement faible, il vaut mieux proposer un « data dump » sous la forme d’un fichier JSON, XML, CSV ou Sqlite. Selon les ressources dont on dispose, cette approche peut être viable jusqu’à un volume de quelques Gigaoctets.

Notons qu’on peut fournir à la fois un data dump et une API; à charge des utilisateurs de choisir ce qui leur convient le mieux. Terminologie des API

• Lorsqu’on construit ou qu’on utilise une API, on rencontre fréquemment les termes suivants :

• HTTP (HyperText Transfert Protocol) : c’est le principal moyen de communiquer de l’information sur Internet.HTTP implémente un certain nombre de « méthodes » qui disent dans quelle direction les données doivent se déplacer et ce qui doit en être fait. Les deux plus fréquentes sont GET, qui récupère les données à partir d’un serveur, et POST, qui envoie de nouvelles données vers un serveur. URL (Uniform Ressource Locator) : Adresse d’une ressource sur le web, comme http://www-facultesciences.univ-ubs.fr/fr. Une URL consiste en unprotocole (http://),

un domaine (www-facultesciences.univ-ubs.fr), un chemin optionnel (/fr). Elle décrit l’emplacement d’une ressource spécifique, comme une page Web. Dans le domaine des API, les termes URL,request, URI, endpoint désignent des idées similaires.Dans la suite, on utilisera uniquement les termes URL et request, pour être plus clair. Pour effectuer une requête GET ou suivre un lien, il suffit de disposer d’un navigateur Web.JSON (JavaScript Object Notation) : c’est un format texte de stockage des données conçu pour être lisible à la fois par les êtres humains et les machines. JSON est le format le plus usuel des données récupérées par API, le deuxième plus usuel étant XML.

 

• REST (REpresentational State Transfer) : c’est une méthodologie qui regroupe les meilleurs pratiques en termes de conception et d’implémentation d’APIs. Les API conçues selon les principes de la méthodologie REST sont appelées des API REST (REST APIs). Il y a toutefois de nombreuses polémiques autour de la signification exacte du terme. Dans la suite, on parlera plus simplement d’API Web ou d’API HTTP.

Implémenter une API

• Dans la suite, on va voir comment créer une API en utilisant Python et le cadre de travail Flask.

• Notre exemple d’API portera sur un catalogue de livres allant au delà de l’information bibliographique standard.

• Plus précisément, en plus du titre et de la date de publication, notre API fournira la première phrase de chaque livre.

Flask

• Flash est un cadre de travail (framework) Web pour Python. Ainsi, il fournit des fonctionnalités permettant de construire des applications Web, ce qui inclut la gestion des requêtes HTTP et des canevas de présentation.

• Nous allons créer une application Flask très simple, à partir de laquelle nous construirons notre API.

Pourquoi Flask ?

• Python dispose de plusieurs cadre de développement permettant de produire des pages Web et des API.

• Le plus connu est Django, qui est très riche.

• Django peut toutefois être écrasant pour les utilisateurs non expérimentés.

• Les applications Flask sont construites à partir de canevas très simples et sont donc plus adaptées au prototypage d’APIs.

On commence par créer un nouveau répertoire sur notre ordinateur, qui servira de répertoire de projet et qu’on nommera projects.

• Les fichiers de notre projet seront stockés dans un sous-répertoire de projects, nommé api.

On sauvegarde ensuite le programme sous le nom api.py dans le répertoire api précédemment créé. Pour l’exécuter, on exécute le programme.

Comment fonctionne Flask ?

• Flask envoie des requêtes HTTP à des fonctions Python.

• Dans notre cas, nous avons appliqué un chemin d’URL (‘/‘) sur une fonction : home. Flask exécute le code de la fonction et affiche le résultat dans le navigateur.

• Dans notre cas, le résultat est un code HTML de bienvenue sur le site hébergeant notre API.

• Le processus consistant à appliquer des URL sur des fonctions est appelé routage (routing).

• L’instruction : @app.route('/', methods=[‘GET']) apparaissant dans le programme indique à Flask que la fonction home correspond au chemin /.

La liste methods (methods=['GET']) est un argument mot-clef qui indique à Flask le type de requêtes HTTP autorisées.

• On utilisera uniquement des requêtes GET dans la suite,mais de nombreuses application Web utilisent à la fois des requêtes GET (pour envoyer des données de l’application aux utilisateurs) et POST (pour recevoir les données des utilisateurs).

import Flask : Cette instruction permet d’importer la bibliothèque Flask, qui est disponible par défaut sous Anaconda.

app = flask.Flask(__name__) : Crée l’objet application Flask, qui contient les données de l’application et les méthodes correspondant aux actions susceptibles d’être effectuées sur l’objet. La dernière instruction app.run( ) est un exemple d’utilisation de méthode.

app.config[« DEBUG » = True] : lance le débogueur, ce qui permet d’afficher un message autre que « Bad Gateway » s’il y a une erreur dans l’application.

app.run( ) : permet d’exécuter l’application.

 

Création de l’API

• Afin de créer l’API, on va spécifier nos données sous la forme d’une liste de dictionnaires Python.

• A titre d’exemple, on va fournir des données sur trois romans de Science-Fiction. Chaque dictionnaire contiendra un numéro d’identification, le titre, l’auteur, la première phrase et l’année de publication d’un livre.

• On introduira également une nouvelle fonction : une route permettant aux visiteurs d’accéder à nos données.

•créer un nouveau fichier api1.py par le code suivant :

•On exécute le code et on met à jour la fenêtre du navigateur, ce qui donne :

 

Pour accéder à l’ensemble des données, il suffit de saisir dans le navigateur l’adresse : http://127.0.0.1:5000/api/v1/ resources/books/all

 

• On a utilisé la fonction jsonify de Flask. Celle-ci permet de convertir les listes et les dictionnaires au format JSON.

• Via la route qu’on a créé, nos données sur les livres sont converties d’une liste de dictionnaires vers le format JSON, avant d’être fournies à l’utilisateur.

• A ce stade, nous avons créé une API fonctionnelle, bien que limitée.

• Dans la suite, nous verrons comment permettre aux utilisateurs d’effectuer des recherches spécifiques, par exemple à partir de l’identifiant d’un livre.

Accéder à des ressources spécifiques

• En l’état actuel de notre API, les utilisateurs ne peuvent accéder qu’à l’intégralité de nos données; il ne peuvent spécifier de filtre pour trouver des ressources spécifiques.

• Bien que cela ne pose pas problème sur nos données de test, peu nombreuses, cela devient problématique au fur et à mesure qu’on rajoute des données.

• Dans la suite, on va introduire une fonction permettant aux utilisateurs de filtrer les résultats renvoyés à l’aide de requêtes plus spécifiques.

 

Conception d’une API REST

• Action : Create, Verbe HTTP : POST, Chemin d’URL : /api/people, Description : définit une URL unique pour créer une nouvelle personne.

• Action : Read, Verbe HTTP : GET, Chemin d’URL : /api/people, Description : définit une URL unique pour lire le catalogue de personnes .

• Action : Read, Verbe HTTP : GET, Chemin d’URL : /api/people/Farrell, Description : définit une URL unique pour lire les données d’une personne particulière du catalogue

• Action : Update, Verbe HTTP : PUT, Chemin d’URL : /api/people/Farrell, Description : définit une URL unique pour mettre à jour les données d’une personne du catalogue

• Action : Delete, Verbe HTTP : DELETE, Chemin d’URL : /api/people/Farrell, Description : définit une URL unique pour supprimer les données d’une personne du catalogue

 

Premier pas

• On va commencer par créer un serveur web très simple à l’aide du micro-cadre de développement Flask

. • On crée un répertoire api, un sous-répertoire version_1,puis un sous-répertoire templates ou on sauvegarde les programmes suivants : Python (server.py) voici le contenu du code.

on crée le dossier templates

on édite le fichier home.html dans templates

 

Le programme HTML est nommé home.html plutôt que index.html comme il est d’usage, car index.html pose problème lorsqu’on importe le module Connexion, ce qu’on fera dans la suite.

• On obtient le résultat suivant en saisissant http://127.0.0.1:5000 dans la barre du navigateur :

CURL :

Curl est un langage de balisage comme le HTML, c'est-à-dire que le texte brut s'affiche en tant que texte ; il inclut également un langage de programmation orientée objet qui permet l'héritage multiple.

cURL sous Linux: ce qu’il faut savoir pour débuter

Le logiciel libre cURL est l’un des projets open source les plus anciens et les plus appréciés. Écrit en C, ce programme sert à envoyer des données dans les réseaux d’ordinateurs. Le nom cURL renvoie à « client URL »

. La licence ouverte accorde un droit d’utilisation à n’importe quelle fin. À l’heure actuelle, cURL est utilisé dans de très nombreux appareils.

 

Le programme d’invite de commande cURL agit quant à lui comme une interface basée sur du texte et interagit avec libcurl via l’invite de commande. Ce programme est un outil essentiel pour le développement Web car il permet aux développeurs de communiquer directement avec les serveurs plutôt que de devoir passer par un navigateur. Les scripts basés sur les commandes cURL (également appelées « cURL commands » en anglais) sont utilisés pour automatiser les processus ainsi que pour procéder à des tests et au débogage.

Comment fonctionne cURL ?

Les deux composantes de cURL fonctionnent différemment. Comment libcurl est-il utilisé ? La bibliothèque du programme libcurl met à disposition des fonctionnalités permettant d’envoyer des données dans des réseaux d’ordinateurs. Il existe des « bindings de langage » (que l’on peut traduire par « liaisons de langage ») pour des douzaines de langages de programmation populaires. Ces bindings permettent à un grand nombre de logiciels communiquant avec des serveurs d’utiliser les fonctionnalités de libcurl.

Comment cURL est-il utilisé ?

Le programme d’invite de commande cURL est utilisé dans le développement Web. La méthode la plus simple consiste à saisir les commandes cURL dans l’invite de commande. Avec le savoir-faire correspondant, vous pourrez ainsi tester et déboguer des serveurs et des API. Plutôt que de saisir manuellement les commandes dans l’interface de commande, vous pouvez également les regrouper dans des scripts. Ceci permet de standardiser et d’automatiser des opérations laborieuses, qu’il s’agisse du chargement/du téléchargement de données, du remplissage automatique de formulaires ou de la mise en miroir de sites internet entiers. La structure d’une commande cURL se présente généralement comme suit :

INSTALLATION : on installe le paquet : apt-get install curl

on peut vérifier la version installé par la commande :

on crée un compte au format simple pour pouvoir exécuter avec le client curl

on crée aussi un fichier jeson

TEST :

on lance deux terminaux un pour le json et l’autre pour exécuter la commande CURL

on lance le curl

on voit avec curl il affiche le compte json pour voir le 1er compte dans notre fichier db.json il suffit de copier cette url dans un navigateur.

résultat :

 

il affiche juste le 1er compte -si on veut afficher tous les comptes il suffit de copier cette url

on visualise tous les comptes et on démarre le json puis lancer un autre terminal pour utiliser la methode POST dans le curl.

quand on lance le curl il va créer le compte qui affiche sur le terminal dans db.json

on voit le compte a été ajouté - on essai avec la méthode PUT on édite le fichier fichier et changer le compte.

on crée le compte onelove et on laisse l’id 3

on peut voir ce que la méthode PUT fait sur l’autre terminal.

on test aussi la méthode GET si on fait cat db.son

 

il a fait une mise a jours et le compte onelove est la

- on utilise la méthode DELETE pour supprimer le compte onelove qui a l’id 3

il supprime le compte onlove dont l’id égale 3

- Dans cette partie on va créer un dossier dans API pour pouvoir gérer des codes html et php avec le fichier json.

puis créer le fichier ajoutjson.php

TEST :

on peut voir l’insertion réussie

sur cette capture on voit le code 201 qui signifie on vient de faire une insertion en utilisant la méthode POST si on fait cat db.json.

on voit le compte Benoit16 on ajoute le compte toto

coté json

 

- Dans cette partie on va créer notre api

on importe l’api (parce qu’elle contient tous les tables)

on va créer un utilisateur et lui attribue tous les privilèges

on constate sur l’api elle crée deux tables dans la base de donnée transaction

voici la description de la table compte et idem pour users

 

TEST : sur le terminal on lance le programme

 

puis copier l’url

 

voici la page d’api pour le Fournisseur et il a tous les taches a effectués comme création de compte,ajouter un user etc...

- Le fournisseur va créer trois utilisateur Berenger,Nasry et Morez voir la capture ci-dessous

selon le fournisseur chaque utilisateur a une tache bien précise . maintenant on fait un feed-back dans la base de donnée pour voir les users crées.

oui tout marche bien Le Fournisseur va transférer un montant sur le compte de revendeur (1002).

il rempli le champ

il clique sur Execute

il peut voir son solde sur l’interface y compris le montant envoyé et idem sur la base de donnée on peut voir tous ses informations.

On constate que le solde de Fournisseur a été diminué avant il a 60000 sur son compte et son transfert vers le client il a seulement 50000.

maintenant le Fournisseur peut recharger son compte il suffit de définir une fonction qui va gérer cette transaction et dans mon cas la fonction c’est L’Ajout qui permet a fournisseur de recharger son compte.

sur cette capture le Fournisseur recharger son compte

on voit bel et bien son solde est rechargé

 

donc le fournisseur on le considère comme l’Administrateur il a le droit a tout.

● Hébergement d’Api(WSGI) avec Apache2

Étape 1 : (hébergement de l’ apitrans.py)

Installation de paquet libapache2-mod-wsgi-py3 et il faut désinstaller la version libapache2-mod-wsgi souvent ça bloque Apache2 et le fichier virtuel donc c’est important de purger ce paquet pour installer la version libapache2-mod-wsgi-py3

● les paquets a installés -il faut installer nodejs version 14

● install snap,snap install postman,npm install g jsonser

copie le code apitrans.py a __init__.py

 

on va créer le fichier virtuel de notre site dans /etc/apache2/sites-available

on créer le fichier apitrans.conf on édite le fichier apitrans.conf

création du script wsgi, on va créer le fichier apitrans.wsgi dans /var/www/html/API et voici son contenu.

vue que on a pas le nom de domaine on va dans /etc/hosts pour faire la correspondance qu’on a définit tout a l’heure dans notre fichier virtuel qui se trouve dans /etc/apache2/sites-available

si tout marche bien on prend un navigateur et taper juste le nom api.apitrans.sn pour afficher la page d’Api

Test :

on clique sur AffciheComptes :

on voit les trois comptes qui ont été crées avant l’hébergement. résultat on arrive a héberger l’api nickel .

➢ Interaction des formulaires via

l’api le but est de crée un formulaire et faire des actions comme ajout,insertion etc... via l’api on crée le fichier formulaireAjoutCompte.html

voici le code :

voici le code html et on respect les champs de notre api

on crée le deuxième fichier php pour interagir a notre fichier formulaire : formulaire.php

 

TEST : on tape cette url : localhost/API/formulaireAjoutCompte.html

puis cliquer sur valider

on voit l’insertion marche bien maintenant on va au niveau de L’API pour voir s’il a crée l’utilisateur Latyr.

on clique sur AfficheComptes

on voit le compte Latyr idem dans la base de donnée

super on crée le fichier : formulaireModifier.html pour faire l’ajout sur le compte de Fournisseur.

idem pour le fichier : formulaireModifier.php

voici le compte de Fournisseur

on voit sur cette capture le Fournisseur a 50000 sur son compte maintenant on lance le formulaireModifier.html

TEST :

on remplit les champs

 

cliquer sur valider

tout marche bien on va lancer l’api pour voir le changement sur le compte Fournisseur

on voit avant il a 50000 maintenant c’est 60000 donc le formulaireModifier marche sans problème.

- On créer un formulaire qui permet de supprimer un compte user voici le code : formulaireDELETE.html

et le code : formulaireDELETE.php

maintenant on va essayer de supprimer le compte Latyr donc on va faire un feedback dans la base de donnée pour connaître son id.

on sait que le compte Latyr a comme ID 5

TEST :  on tape localhost/API/formulaireDELETE.html

on clique sur valider

nickel on lance L’API pour vérifier le compte Latyr qui a comme id 5

le compte Latyr a été supprimé idem dans la base de donnée

Conclusion : Les développeurs travaillent avec des API pour créer des logiciels et des applications. Il est rare que vous, l’utilisateur final, interagissiez directement avec une API.

Les API fonctionnent comme une porte d’entrée, permettant aux entreprises de partager des informations sélectionnées, mais aussi de garder les demandes non désirées.

Pour être informé des derniers articles, inscrivez vous :
Commenter cet article