
Si vous lisez cet article, vous ĂȘtes probablement dĂ©jĂ familier avec les possibilitĂ©s offertes par l'utilisation d'une API (Interface de Programmation d'Application).
En ajoutant l'une des nombreuses API ouvertes à votre application, vous pouvez étendre ses fonctionnalités ou y ajouter les données nécessaires. Mais que faire si vous avez développé une fonctionnalité unique que vous souhaitez partager avec la communauté ?
La réponse est simple : il faut .
Bien que cela puisse sembler difficile au départ, c'est en réalité assez simple. Nous allons vous expliquer comment faire cela avec Python.
Que faut-il pour commencer ?
Pour développer une API, vous avez besoin de :
- Python 3 ;
- â un framework simple et facile Ă utiliser pour crĂ©er des applications web ;
- â une extension pour Flask qui permet de dĂ©velopper rapidement et avec un minimum de configuration une API REST.
L'installation s'effectue avec la commande :
pip install flask-restfulNous recommandons un intensif gratuit de programmation pour débutants :
â du 26 au 28 aoĂ»t. Un intensif gratuit qui permet de comprendre comment fonctionnent les bots d'assistance, les spĂ©cificitĂ©s de l'API de Telegram et d'autres nuances. Les trois meilleurs participants recevront 30 000 roubles de Skillbox..
Avant de commencer
Nous allons développer une API RESTful avec des fonctionnalités de base .
Pour bien comprendre la tùche, examinons deux termes mentionnés ci-dessus.
Qu'est-ce que REST ?
Une API REST (Representational State Transfer) est une API qui utilise des requĂȘtes HTTP pour Ă©changer des donnĂ©es.
Les API REST doivent répondre à certains critÚres :
- Architecture client-serveur : le client interagit avec l'interface utilisateur, tandis que le serveur interagit avec le backend et le stockage des donnĂ©es. Le client et le serveur sont indĂ©pendants, chacun peut ĂȘtre remplacĂ© sĂ©parĂ©ment de l'autre.
- Sans Ă©tat â aucune donnĂ©e client n'est conservĂ©e sur le serveur. L'Ă©tat de la session est stockĂ© cĂŽtĂ© client.
- Mise en cache â les clients peuvent mettre en cache les rĂ©ponses du serveur pour amĂ©liorer les performances globales.
Qu'est-ce que CRUD ?
CRUD â un concept de programmation qui dĂ©crit quatre actions de base (create, read, update et delete).
Dans une API REST, les types de requĂȘtes et les mĂ©thodes de requĂȘte sont responsables d'actions telles que post, get, put, delete.
Maintenant que nous avons clarifié les termes de base, nous pouvons commencer à créer l'API.
Développement
Créons un dépÎt de citations sur l'intelligence artificielle. L'IA est l'une des technologies les plus en croissance aujourd'hui, et Python est un outil populaire pour travailler avec l'IA.
Avec cette API, un développeur Python pourra rapidement obtenir des informations sur l'IA et s'inspirer des nouvelles réalisations. Si le développeur a des réflexions précieuses sur ce sujet, il pourra les ajouter au dépÎt.
Commençons par importer les modules nécessaires et configurer Flask :
from flask import Flask
from flask_restful import Api, Resource, reqparse
import random
app = Flask(__name__)
api = Api(app)Dans cet extrait Flask, Api et Resource sont les classes dont nous avons besoin.
Reqparse est une interface de parsing des requĂȘtes Flask-RESTful⊠Il nous faudra Ă©galement le module random pour afficher une citation alĂ©atoire.
Nous allons maintenant créer un dépÎt de citations sur l'IA.
Chaque entrée du dépÎt contiendra :
- un ID numérique;
- le nom de l'auteur de la citation;
- la citation.
Puisqu'il ne s'agit que d'un exemple pour l'apprentissage, nous conserverons toutes les entrées dans une liste Python. Dans une application réelle, nous utiliserions probablement une base de données à la place.
ai_quotes = [
{
"id": 0,
"author": "Kevin Kelly",
"quote": "Les plans d'affaires des 10 000 startups suivantes sont faciles à prévoir : " +
"Prenez X et ajoutez l'IA."
},
{
"id": 1,
"author": "Stephen Hawking",
"quote": "Le développement d'une intelligence artificielle complÚte pourrait " +
"marquer la fin de la race humaine⊠" +
"Elle prendrait son envol d'elle-mĂȘme et se redessinera " +
"Ă un rythme toujours croissant. " +
"Les humains, limités par l'évolution biologique lente, " +
"ne pourraient pas rivaliser et seraient supplantés."
},
{
"id": 2,
"author": "Claude Shannon",
"quote": "J'imagine un temps oĂč nous serons pour les robots ce que " +
"les chiens sont pour les humains, " +
"et je soutiens les machines."
},
{
"id": 3,
"author": "Elon Musk",
"quote": "Le rythme des progrĂšs dans l'intelligence artificielle " +
"(je ne fais pas référence à l'IA étroite) " +
"est incroyablement rapide. Ă moins que vous n'ayez une exposition directe " +
"Ă des groupes comme Deepmind, " +
"vous n'avez aucune idĂ©e de la rapiditĂ© Ă laquelle â cela croĂźt " +
"Ă un rythme proche de l'exponentiel. " +
"Le risque que quelque chose de sérieusement dangereux " +
"se produise est dans un délai de cinq ans. " +
"10 ans tout au plus."
},
{
"id": 4,
"author": "Geoffrey Hinton",
"quote": "J'ai toujours été convaincu que la seule façon " +
"de faire fonctionner l'intelligence artificielle " +
"est de réaliser le calcul d'une maniÚre semblable à celle du cerveau humain. " +
"C'est le but que je poursuis. Nous faisons des progrĂšs, " +
"bien que nous ayons encore beaucoup Ă apprendre sur " +
"le fonctionnement réel du cerveau."
},
{
"id": 5,
"author": "Pedro Domingos",
"quote": "Les gens s'inquiĂštent que les ordinateurs deviennent " +
"trop intelligents et prennent le contrĂŽle du monde, " +
"mais le véritable problÚme est qu'ils sont trop stupides " +
"et qu'ils ont déjà pris le contrÎle du monde."
},
{
"id": 6,
"author": "Alan Turing",
"quote": "Il semble probable qu'une fois que la méthode de pensée de la machine " +
"aura commencé, il ne faudra pas longtemps " +
"pour dépasser nos faibles capacités⊠" +
"Elles seraient capables de converser " +
"entre elles pour aiguiser leur intelligence. " +
"à un moment donné, par conséquent, nous devrions " +
"nous attendre Ă ce que les machines prennent le contrĂŽle."
},
{
"id": 7,
"author": "Ray Kurzweil",
"quote": "L'intelligence artificielle atteindra " +
"des niveaux humains vers 2029. " +
"Si l'on pousse cela plus loin, disons, jusqu'en 2045, " +
"nous aurons multiplié l'intelligence, " +
"l'intelligence biologique humaine " +
"de notre civilisation par un milliard."
},
{
"id": 8,
"author": "Sebastian Thrun",
"quote": "Personne ne le formule ainsi, mais je pense " +
"que l'intelligence artificielle " +
"est presque une discipline des sciences humaines. C'est vraiment une tentative " +
"de comprendre l'intelligence humaine et la cognition humaine."
},
{
"id": 9,
"author": "Andrew Ng",
"quote": "Nous faisons cette analogie selon laquelle l'IA est la nouvelle électricité." +
"L'électricité a transformé les industries : agriculture, " +
"transport, communication, fabrication."
}
]Nous devons maintenant créer une classe de ressource Quote, qui définira les opérations des points de terminaison de notre API. à l'intérieur de la classe, nous devons déclarer quatre méthodes : get, post, put, delete.
Commençons par la méthode GET
Elle permet d'obtenir une citation spécifique en indiquant son ID ou bien une citation aléatoire si l'ID n'est pas spécifié.
class Quote(Resource):
def get(self, id=0):
if id == 0:
return random.choice(ai_quotes), 200
for quote in ai_quotes:
if(quote["id"] == id):
return quote, 200
return "Citation non trouvée", 404La méthode GET retourne une citation aléatoire si l'ID a la valeur par défaut, c'est-à -dire si aucun ID n'a été spécifié lors de l'appel de la méthode.
Si un ID est spécifié, la méthode cherche parmi les citations et trouve celle qui correspond à l'ID donné. Si aucune citation n'est trouvée, elle affiche le message « Citation non trouvée, 404 ».
Rappelez-vous : la méthode retourne le statut HTTP 200 en cas de demande réussie et 404 si l'enregistrement n'est pas trouvé.
Créons maintenant une méthode POST pour ajouter une nouvelle citation au repository.
Elle prendra l'identifiant de chaque nouvelle citation lors de la saisie. De plus, le POST utilisera reqparse pour analyser les paramĂštres qui seront envoyĂ©s dans le corps de la requĂȘte (auteur et texte de la citation).
def post(self, id):
parser = reqparse.RequestParser()
parser.add_argument("auteur")
parser.add_argument("citation")
params = parser.parse_args()
for quote in ai_quotes:
if(id == quote["id"]):
return f"La citation avec l'ID {id} existe déjà ", 400
quote = {
"id": int(id),
"auteur": params["auteur"],
"citation": params["citation"]
}
ai_quotes.append(quote)
return quote, 201Dans le code ci-dessus, la mĂ©thode POST a reçu l'ID de la citation. Ensuite, en utilisant reqparse, elle a obtenu l'auteur et la citation de la requĂȘte, les enregistrant dans le dictionnaire params.
Si une citation avec l'ID spécifié existe déjà , la méthode affiche un message approprié et le code 400.
Si la citation avec l'ID spécifié n'avait pas encore été créée, la méthode crée un nouvel enregistrement avec l'ID et l'auteur spécifiés, ainsi que d'autres paramÚtres. Elle ajoute ensuite l'enregistrement à la liste ai_quotes et retourne l'enregistrement avec la nouvelle citation, accompagné du code 201.
Créons maintenant la méthode PUT pour modifier une citation existante dans le repository.
def put(self, id):
parser = reqparse.RequestParser()
parser.add_argument("auteur")
parser.add_argument("citation")
params = parser.parse_args()
for quote in ai_quotes:
if(id == quote["id"]):
quote["auteur"] = params["auteur"]
quote["citation"] = params["citation"]
return quote, 200
quote = {
"id": id,
"auteur": params["auteur"],
"citation": params["citation"]
}
ai_quotes.append(quote)
return quote, 201La méthode PUT, similaire à l'exemple précédent, prend l'ID et l'input et analyse les paramÚtres de la citation en utilisant reqparse.
Si la citation avec l'ID spécifié existe, la méthode la mettra à jour avec les nouveaux paramÚtres, puis affichera la citation mise à jour avec un code 200. Si la citation avec l'ID spécifié n'existe pas encore, un nouvel enregistrement sera créé avec un code 201.
Enfin, créons une méthode DELETE pour supprimer la citation qui n'inspire plus.
def delete(self, id):
global ai_quotes
ai_quotes = [quote for quote in ai_quotes if quote["id"] != id]
return f"Citation avec l'id {id} a été supprimée.", 200Cette méthode récupÚre l'ID de la citation lorsque l'on l'entrera et met à jour la liste ai_quotes en utilisant la liste globale.
Maintenant que nous avons créé toutes les méthodes, tout ce que nous devons faire est d'ajouter la ressource à l'API, de définir le chemin et de lancer Flask.
api.add_resource(Quote, "\/ai-quotes", "\/ai-quotes\/", "\/ai-quotes\/<int:id>")
if __name__ == '__main__':
app.run(debug=True)Notre service REST API est prĂȘt !
Ensuite, nous pouvons sauvegarder le code dans un fichier app.py, en l'exécutant dans la console avec la commande :
python3 app.pySi tout va bien, nous devrions obtenir quelque chose comme ceci :
* Mode debug : activé
* En cours d'exécution sur :5000\/ (Appuyez sur CTRL+C pour quitter)
* Redémarrage avec stat
* Débogueur actif !
* Code PIN du débogueur : XXXXXXX
Testons l'API
AprÚs la création de l'API, il est nécessaire de le tester.
Cela peut ĂȘtre fait avec l'utilitaire en ligne de commande curl, le client Insomnia REST, ou en publiant l'API sur Rapid API.

Publions notre API
RapidAPI est le plus grand marché au monde avec plus de 10 000 API (et environ 1 million de développeurs).
RapidAPI ne fournit pas seulement une interface unifiée pour travailler avec des API tierces, mais il permet aussi de publier rapidement et facilement votre propre API.
Pour cela , il faut d'abord le publier sur un serveur en ligne. Dans notre cas, utilisons . Travailler avec ne devrait pas poser de problĂšmes, ().
Comment publier votre API sur Heroku
1. Installer Heroku.
Tout d'abord, vous devez vous inscrire et installer l'interface de ligne de commande Heroku (CLI). Cela fonctionne sur Ubuntu 16+.
sudo snap install heroku --classic
Ensuite, connectez-vous :
heroku login
2. Ajoutez les fichiers nécessaires.
Maintenant, il faut ajouter les fichiers Ă publier dans le dossier de notre application :
- requirements.txt avec la liste des modules Python nécessaires ;
- Procfile, qui indique quelles commandes doivent ĂȘtre exĂ©cutĂ©es pour dĂ©marrer l'application ;
- .gitignore â pour exclure les fichiers qui ne sont pas nĂ©cessaires sur le serveur.
Le fichier requirements.txt contiendra les lignes suivantes :
- flask
- flask-restful
- gunicorn
Veuillez noter que nous avons ajouté gunicorn (serveur HTTP WSGI pour Python) à la liste, car il est nécessaire de lancer notre application sur le serveur.
Le Procfile contiendra :
web: gunicorn app:app
Le contenu de .gitignore :
*.pyc
__pycache__/Maintenant que les fichiers sont créés, initialisons le dépÎt git et faisons un commit :
git init
git add
git commit -m "Premier commit de l'API"3. Créons une nouvelle application Heroku.
heroku createEnvoyons la branche master vers le dépÎt distant Heroku :
git push heroku masterNous pouvons maintenant commencer en ouvrant le service API avec les commandes :
heroku ps:scale web=1
heroku open
L'API sera accessible Ă l'adresse .
Comment ajouter votre API Python au marketplace RapidAPI
Une fois que le service API est publié sur Heroku, vous pouvez l'ajouter à RapidAPI. Ici sur ce sujet.
1. Créez un compte RapidAPI.
![]()
Inscrivez-vous pour un compte gratuit â cela peut ĂȘtre fait via Facebook, Google, GitHub.

2. Ajoutez l'API au tableau de bord.

3. Ensuite, saisissez les informations générales sur votre API.

4. AprĂšs avoir cliquĂ© sur "Ajouter l'API", une nouvelle page s'affiche oĂč vous pouvez entrer des informations sur notre API.

5. Vous pouvez maintenant soit entrer manuellement les points de terminaison de l'API, soit télécharger avec OpenAPI.

Il est maintenant nécessaire de définir les points de terminaison de notre API sur la page des points de terminaison. Dans notre cas, les points de terminaison correspondent au concept CRUD (get, post, put, delete).

Ensuite, il faut créer un point de terminaison GET AI Quote qui renvoie une citation aléatoire (si l'ID est par défaut) ou une citation pour l'ID spécifié.
Pour créer le point de terminaison, cliquez sur le bouton "Créer un point de terminaison".

Répétez ce processus pour tous les autres points de terminaison de l'API. C'est tout ! Félicitations, vous avez publié votre API !
Si tout se passe bien, la page de l'API ressemblera Ă ceci :

Conclusion
Dans cet article, nous avons examiné le processus de création de notre propre service API RESTful en Python, ainsi que le processus de publication de l'API dans le cloud Heroku et de son ajout au répertoire RapidAPI.
Mais dans la version de test, seuls les principes de base du dĂ©veloppement d'API ont Ă©tĂ© abordĂ©s â des aspects tels que la sĂ©curitĂ©, la tolĂ©rance aux pannes et la scalability n'ont pas Ă©tĂ© discutĂ©s.
Lors de la conception d'une API rĂ©elle, tout cela doit ĂȘtre pris en compte.
Source : habr.com
