
Si vous lisez cet article, vous connaissez probablement déjà les possibilités qui s'ouvrent à l'aide de l'API (Application Programming Interface).
En ajoutant l'une des nombreuses API ouvertes à votre application, vous pouvez étendre les fonctionnalités de cette application ou la compléter avec les données nécessaires. Mais que se passe-t-il si vous développez une fonctionnalité unique que vous souhaitez partager avec la communauté?
La réponse est simple: vous devez
créer votre propre API .
MalgrĂ© le fait qu'au dĂ©but, cela semble ĂȘtre une tĂąche intimidante, en fait, tout est simple. Nous allons vous montrer comment procĂ©der avec Python.
Ce dont vous avez besoin pour commencer
Pour développer l'API dont vous avez besoin:
- Python 3
- Flask - un cadre simple et facile à utiliser pour créer des applications Web;
- Flask-RESTful est une extension pour Flask qui vous permet de développer une API REST rapidement et avec une configuration minimale.
L'installation est effectuée par la commande:
pip install flask-restful
Programmation intensive gratuite recommandée pour les débutants:
Développement de bots de télégrammes en C # - 26-28 août. Intensif gratuit qui vous permet de comprendre le fonctionnement des robots assistants, dans les fonctionnalités de travail avec l'API Telegram et d'autres nuances. Les trois meilleurs participants recevront 30 000 roubles de Skillbox .
Avant de commencerNous allons développer une API RESTful avec des
fonctionnalités CRUID de base.
Pour bien comprendre le problÚme, regardons les deux termes mentionnés ci-dessus.
Qu'est-ce que REST?L'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 et le serveur interagit avec le backend et l'entrepĂŽt de donnĂ©es. Le client et le serveur sont indĂ©pendants, chacun d'eux peut ĂȘtre remplacĂ© sĂ©parĂ©ment de l'autre.
- Sans état - aucune donnée client n'est stockée sur le serveur. L'état de 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 qu'un CRUD?CRUD est un concept de programmation qui décrit quatre actions de base (créer, lire, mettre à jour et supprimer).
Dans l'API REST, les types de demande et les méthodes de demande sont responsables des actions telles que publier, obtenir, mettre, supprimer.
Maintenant que nous avons compris les termes de base, vous pouvez commencer à créer l'API.
Développement
Créons un référentiel de citations sur l'intelligence artificielle. L'IA est l'une des technologies à la croissance la plus rapide aujourd'hui, et Python est un outil populaire pour travailler avec l'IA.
Avec cette API, un développeur Python peut rapidement obtenir des informations sur l'IA et s'inspirer des nouveaux développements. Si le développeur a de précieuses réflexions sur ce sujet, il pourra les ajouter au référentiel.
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 d'analyse de requĂȘte Flask-RESTful ... Vous aurez Ă©galement besoin d'un module alĂ©atoire pour afficher un devis alĂ©atoire.
Nous allons maintenant créer un référentiel de citations AI.
Chaque entrée de repo contiendra:
- ID numérique
- nom de l'auteur de la citation;
- citation.
Comme il ne s'agit que d'un exemple de formation, nous enregistrerons toutes les entrées dans une liste Python. Dans une application réelle, nous utiliserions trÚs probablement une base de données à la place.
ai_quotes = [ { "id": 0, "author": "Kevin Kelly", "quote": "The business plans of the next 10,000 startups are easy to forecast: " + "Take X and add AI." }, { "id": 1, "author": "Stephen Hawking", "quote": "The development of full artificial intelligence could " + "spell the end of the human race⊠" + "It would take off on its own, and re-design " + "itself at an ever increasing rate. " + "Humans, who are limited by slow biological evolution, " + "couldn't compete, and would be superseded." }, { "id": 2, "author": "Claude Shannon", "quote": "I visualize a time when we will be to robots what " + "dogs are to humans, " + "and I'm rooting for the machines." }, { "id": 3, "author": "Elon Musk", "quote": "The pace of progress in artificial intelligence " + "(I'm not referring to narrow AI) " + "is incredibly fast. Unless you have direct " + "exposure to groups like Deepmind, " + "you have no idea how fast â it is growing " + "at a pace close to exponential. " + "The risk of something seriously dangerous " + "happening is in the five-year timeframe." + "10 years at most." }, { "id": 4, "author": "Geoffrey Hinton", "quote": "I have always been convinced that the only way " + "to get artificial intelligence to work " + "is to do the computation in a way similar to the human brain. " + "That is the goal I have been pursuing. We are making progress, " + "though we still have lots to learn about " + "how the brain actually works." }, { "id": 5, "author": "Pedro Domingos", "quote": "People worry that computers will " + "get too smart and take over the world, " + "but the real problem is that they're too stupid " + "and they've already taken over the world." }, { "id": 6, "author": "Alan Turing", "quote": "It seems probable that once the machine thinking " + "method had started, it would not take long " + "to outstrip our feeble powers⊠" + "They would be able to converse " + "with each other to sharpen their wits. " + "At some stage therefore, we should " + "have to expect the machines to take control." }, { "id": 7, "author": "Ray Kurzweil", "quote": "Artificial intelligence will reach " + "human levels by around 2029. " + "Follow that out further to, say, 2045, " + "we will have multiplied the intelligence, " + "the human biological machine intelligence " + "of our civilization a billion-fold." }, { "id": 8, "author": "Sebastian Thrun", "quote": "Nobody phrases it this way, but I think " + "that artificial intelligence " + "is almost a humanities discipline. It's really an attempt " + "to understand human intelligence and human cognition." }, { "id": 9, "author": "Andrew Ng", "quote": "We're making this analogy that AI is the new electricity." + "Electricity transformed industries: agriculture, " + "transportation, communication, manufacturing." } ]
Nous devons maintenant crĂ©er une classe de ressources Quote, qui dĂ©terminera les opĂ©rations des points de terminaison de notre API. Quatre mĂ©thodes doivent ĂȘtre dĂ©clarĂ©es dans la classe: get, post, put, delete.
Commençons par la méthode GET.Il permet d'obtenir un devis spécifique en spécifiant son ID ou un devis 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 "Quote not found", 404
La méthode GET renvoie un devis aléatoire si l'ID contient une valeur par défaut, c'est-à -dire Lors de l'appel de la méthode, aucun ID n'a été défini.
S'il est spécifié, la méthode recherche parmi les guillemets et en trouve un qui contient l'ID spécifié. Si rien n'est trouvé, le message «Devis introuvable, 404» s'affiche.
N'oubliez pas: la méthode renvoie un état HTTP de 200 si la demande aboutit et 404 si l'enregistrement n'est pas trouvé.
Créons maintenant une méthode POST pour ajouter un nouveau devis au référentiel
Il recevra l'identifiant de chaque nouveau devis au fur et Ă mesure de votre saisie. De plus, POST utilisera reqparse pour analyser les paramĂštres qui iront dans le corps de la requĂȘte (auteur et texte de citation).
def post(self, id): parser = reqparse.RequestParser() parser.add_argument("author") parser.add_argument("quote") params = parser.parse_args() for quote in ai_quotes: if(id == quote["id"]): return f"Quote with id {id} already exists", 400 quote = { "id": int(id), "author": params["author"], "quote": params["quote"] } ai_quotes.append(quote) return quote, 201
Dans le code ci-dessus, la mĂ©thode POST a acceptĂ© l'ID de devis. Puis, en utilisant reqparse, il a obtenu l'auteur et un devis de la requĂȘte, les stockant dans le dictionnaire params.
S'il existe déjà un devis avec l'ID spécifié, la méthode affiche le message et le code 400 correspondants.
Si un devis avec l'ID spécifié n'a pas encore été créé, la méthode crée un nouvel enregistrement avec l'ID et l'auteur spécifiés, ainsi que d'autres paramÚtres. Il ajoute ensuite une entrée à la liste ai_quotes et renvoie une entrée avec une nouvelle citation avec le code 201.
Créez maintenant une méthode PUT pour modifier un devis existant dans le référentiel.
def put(self, id): parser = reqparse.RequestParser() parser.add_argument("author") parser.add_argument("quote") params = parser.parse_args() for quote in ai_quotes: if(id == quote["id"]): quote["author"] = params["author"] quote["quote"] = params["quote"] return quote, 200 quote = { "id": id, "author": params["author"], "quote": params["quote"] } ai_quotes.append(quote) return quote, 201
La méthode PUT, similaire à l'exemple précédent, prend l'ID et l'entrée et analyse les paramÚtres de devis à l'aide de reqparse.
S'il existe un devis avec l'ID spécifié, la méthode le mettra à jour avec de nouveaux paramÚtres, puis affichera un devis mis à jour avec le code 200. S'il n'y a pas de devis avec l'ID spécifié, un nouvel enregistrement sera créé avec le code 201.
Enfin, créons une méthode DELETE pour supprimer une citation qui n'est plus une source d'inspiration.
def delete(self, id): global ai_quotes ai_quotes = [qoute for qoute in ai_quotes if qoute["id"] != id] return f"Quote with id {id} is deleted.", 200
Cette méthode obtient l'ID de devis lors de la frappe et met à jour la liste ai_quotes à l'aide d'une liste commune.
Maintenant que nous avons créé toutes les méthodes, il ne nous reste plus qu'à ajouter la ressource à l'API, définir le chemin et exécuter Flask.
api.add_resource(Quote, "/ai-quotes", "/ai-quotes/", "/ai-quotes/<int:id>") if __name__ == '__main__': app.run(debug=True)
Notre service API REST est prĂȘt!
Ensuite, nous pouvons enregistrer le code dans le fichier app.py en l'exécutant dans la console à l'aide de la commande:
python3 app.py
Si tout va bien, nous obtenons quelque chose comme ceci:
* Mode de débogage: activé
* Fonctionnant sur 127.0.0.1 : 5000 / (Appuyez sur CTRL + C pour quitter)
* Redémarrage avec stat
* Le débogueur est actif!
* NIP du dĂ©bogueur: XXXXXXXAPI de testUne fois l'API créée, elle doit ĂȘtre testĂ©e.
Cela peut ĂȘtre fait Ă l'aide de l'utilitaire curl console ou du client Insomnia REST ou en publiant l'API sur l'API Rapid.
Publiez notre APIRapidAPI est le plus grand marché du monde avec plus de 10 000 API (et environ 1 million de développeurs).
RapidAPI fournit non seulement une interface unique pour travailler avec des API tierces, mais vous donne également la possibilité de publier rapidement et facilement votre propre API.
Pour
ce faire , vous devez d'abord le publier sur un serveur du réseau. Dans notre cas, nous utiliserons
Heroku . Travailler avec lui ne devrait pas poser de problĂšme (
vous pouvez en savoir plus sur lui ici ).
Comment publier votre API sur Heroku1. Installez Heroku.La premiÚre étape consiste à enregistrer et installer l'interface de ligne de commande Heroku (CLI). Cela fonctionne sur Ubuntu 16+.
sudo snap install heroku --classicConnectez-vous ensuite:
connexion Heroku2. Ajoutez les fichiers nécessaires.Maintenant, nous devons ajouter les fichiers à publier dans le dossier de notre application:
- requirements.txt avec une liste des modules Python requis;
- Procfile, qui indique quelles commandes doivent ĂȘtre exĂ©cutĂ©es pour lancer l'application;
- .gitignore - pour exclure les fichiers qui ne sont pas nécessaires sur le serveur.
Le fichier requirements.txt contiendra les lignes suivantes:
- flacon
- flacon reposant
- gunicorn
Remarque: nous avons ajouté gunicorn (Python WSGI HTTP Server) à la liste, car nous devons exécuter notre application sur le serveur.
Procfile contiendra:
web: application gunicorn: applicationLe contenu de .gitignore:
*.pyc __pycache__/
Maintenant que les fichiers sont créés, initialisons le dépÎt git et validons:
git init git add git commit -m "First API commit"
3. Créez une nouvelle application Heroku. heroku create
Nous envoyons la branche principale au dépÎt Heroku distant:
git push heroku master
Vous pouvez maintenant commencer par ouvrir le service API Ă l'aide des commandes:
heroku ps:scale web=1 heroku open
L'API sera disponible sur
your-random-heroku-name.herokuapp.com/ai-quotes .
Comment ajouter votre API Python au marché RapidAPIUne fois le service API publié sur Heroku, vous pouvez l'ajouter à l'API Rapid. Voici la
documentation détaillée sur ce sujet.
1. Créez un compte RapidAPI.
Enregistrez un compte gratuit - cela peut ĂȘtre fait en utilisant Facebook, Google, GitHub.
2. Ajoutez l'API au panneau de configuration.
3. Ensuite, entrez des informations générales sur votre API.
4. AprĂšs avoir cliquĂ© sur «Ajouter une API», une nouvelle page apparaĂźt oĂč vous pouvez saisir des informations sur notre API.
5. Vous pouvez maintenant saisir manuellement les points de terminaison de l'API ou télécharger le fichier swagger à l' aide d'OpenAPI.
Eh bien, nous devons maintenant définir les points de terminaison de notre API sur la page Endpoints. Dans notre cas, les endpoints correspondent au concept CRUD (get, post, put, delete).

Ensuite, vous devez crĂ©er le point d'extrĂ©mitĂ© GET AI Quote, qui affiche un devis alĂ©atoire (au cas oĂč l'ID est par dĂ©faut) ou un devis pour l'ID spĂ©cifiĂ©.
Pour créer un 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 API. Câest tout! FĂ©licitations, vous avez publiĂ© votre API!
Si tout va bien, la page API ressemblera Ă ceci:

Conclusion
Dans cet article, nous avons exploré le processus de création de votre propre service d'API RESTful en Python, ainsi que le processus de publication d'une 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é présentés - des nuances telles que la sécurité, la tolérance aux pannes et l'évolutivité n'ont pas été prises en compte.
Lors du dĂ©veloppement d'une vĂ©ritable API, tout cela doit ĂȘtre pris en compte.