
Wenn Sie diesen Artikel lesen, sind Sie wahrscheinlich bereits mit den Möglichkeiten vertraut, die sich durch die API (Application Programming Interface) eröffnen.
Durch Hinzufügen einer der vielen offenen APIs zu Ihrer Anwendung können Sie die Funktionalität dieser Anwendung erweitern oder durch die erforderlichen Daten ergänzen. Aber was ist, wenn Sie eine einzigartige Funktion entwickelt haben, die Sie mit der Community teilen möchten?
Die Antwort ist einfach: Sie müssen
Ihre eigene API erstellen .
Trotz der Tatsache, dass es auf den ersten Blick wie eine entmutigende Aufgabe erscheint, ist tatsächlich alles einfach. Wir zeigen Ihnen, wie das mit Python geht.
Was Sie brauchen, um loszulegen
Um die API zu entwickeln, benötigen Sie:
- Python 3
- Flask - ein einfaches und benutzerfreundliches Framework zum Erstellen von Webanwendungen;
- Flask-RESTful ist eine Erweiterung für Flask, mit der Sie schnell und mit minimaler Konfiguration eine REST-API entwickeln können.
Die Installation wird mit dem folgenden Befehl ausgeführt:
pip install flask-restful
Empfohlene kostenlose Intensivprogrammierung für Anfänger:
Telegramm-Bot-Entwicklung in C # - 26. bis 28. August. Kostenloses Intensivprogramm, mit dem Sie verstehen, wie die Assistenten-Bots in den Funktionen der Arbeit mit der Telegramm-API und anderen Nuancen funktionieren. Die drei besten Teilnehmer erhalten 30.000 Rubel von Skillbox .
Bevor Sie anfangenWir werden eine RESTful-API mit grundlegenden
CRUID-Funktionen entwickeln .
Um das Problem vollständig zu verstehen, schauen wir uns die beiden oben genannten Begriffe an.
Was ist REST?Die REST-API (Representational State Transfer) ist eine API, die HTTP-Anforderungen zum Datenaustausch verwendet.
REST-APIs müssen bestimmte Kriterien erfüllen:
- Client-Server-Architektur: Der Client interagiert mit der Benutzeroberfläche und der Server interagiert mit dem Backend und dem Data Warehouse. Der Client und der Server sind unabhängig voneinander. Jeder von ihnen kann separat vom anderen ersetzt werden.
- Statuslos - Auf dem Server werden keine Clientdaten gespeichert. Der Sitzungsstatus wird auf der Clientseite gespeichert.
- Cachefähigkeit - Clients können Serverantworten zwischenspeichern, um die Gesamtleistung zu verbessern.
Was ist ein CRUD?CRUD ist ein Programmierkonzept, das vier grundlegende Aktionen beschreibt (Erstellen, Lesen, Aktualisieren und Löschen).
In der REST-API sind Anforderungstypen und Anforderungsmethoden für Aktionen wie Veröffentlichen, Abrufen, Setzen, Löschen verantwortlich.
Nachdem wir die grundlegenden Begriffe herausgefunden haben, können Sie mit der Erstellung der API beginnen.
Entwicklung
Lassen Sie uns ein Repository mit Zitaten über künstliche Intelligenz erstellen. KI ist heute eine der am schnellsten wachsenden Technologien, und Python ist ein beliebtes Werkzeug für die Arbeit mit KI.
Mit dieser API kann ein Python-Entwickler schnell Informationen über KI erhalten und sich von neuen Entwicklungen inspirieren lassen. Wenn der Entwickler wertvolle Gedanken zu diesem Thema hat, kann er diese dem Repository hinzufügen.
Beginnen wir mit dem Importieren der erforderlichen Module und der Konfiguration von Flask:
from flask import Flask from flask_restful import Api, Resource, reqparse import random app = Flask(__name__) api = Api(app)
In diesem Snippet sind Flask, Api und Resource die Klassen, die wir benötigen.
Reqparse ist eine Flask-RESTful-Anforderungsanalyse-Schnittstelle ... Sie benötigen außerdem ein Zufallsmodul, um ein Zufallszitat anzuzeigen.
Jetzt erstellen wir ein AI Quotes Repository.
Jeder Repo-Eintrag enthält:
- Digitale ID
- Name des Autors des Zitats;
- Zitat.
Da dies nur ein Beispiel für das Training ist, speichern wir alle Einträge in einer Python-Liste. In einer realen Anwendung würden wir höchstwahrscheinlich stattdessen eine Datenbank verwenden.
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." } ]
Jetzt müssen wir ein Ressourcenklassen-Angebot erstellen, das die Operationen der Endpunkte unserer API bestimmt. Innerhalb der Klasse müssen vier Methoden deklariert werden: get, post, put, delete.
Beginnen wir mit der GET-Methode.Es ist möglich, ein bestimmtes Angebot durch Angabe seiner ID oder eines zufälligen Angebots zu erhalten, wenn die ID nicht angegeben ist.
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
Die GET-Methode gibt ein zufälliges Anführungszeichen zurück, wenn die ID einen Standardwert enthält, d. H. Beim Aufruf der Methode wurde keine ID festgelegt.
Wenn es angegeben ist, sucht die Methode in Anführungszeichen und findet eines, das die angegebene ID enthält. Wird nichts gefunden, wird die Meldung „Angebot nicht gefunden, 404“ angezeigt.
Denken Sie daran: Die Methode gibt einen HTTP-Status von 200 zurück, wenn die Anforderung erfolgreich ist, und 404, wenn der Datensatz nicht gefunden wird.
Erstellen wir nun eine POST-Methode, um dem Repository ein neues Angebot hinzuzufügen
Während der Eingabe erhält es die Kennung jedes neuen Angebots. Darüber hinaus verwendet POST reqparse, um die Parameter zu analysieren, die im Anforderungshauptteil (Autor und Zitiertext) gespeichert werden.
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
Im obigen Code hat die POST-Methode die Angebots-ID akzeptiert. Dann holte er mit reqparse den Autor und ein Zitat aus der Abfrage und speicherte sie im params-Wörterbuch.
Wenn bereits ein Angebot mit der angegebenen ID vorhanden ist, zeigt das Verfahren die entsprechende Nachricht und den entsprechenden Code 400 an.
Wenn noch kein Angebot mit der angegebenen ID erstellt wurde, erstellt die Methode einen neuen Datensatz mit der angegebenen ID und dem angegebenen Autor sowie anderen Parametern. Anschließend fügt er der Liste ai_quotes einen Eintrag hinzu und gibt einen Eintrag mit einem neuen Anführungszeichen zusammen mit dem Code 201 zurück.
Erstellen Sie nun eine PUT-Methode, um ein vorhandenes Angebot im Repository zu ändern.
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
Die PUT-Methode verwendet ähnlich wie im vorherigen Beispiel ID und Eingabe und analysiert Anführungszeichenparameter mithilfe von reqparse.
Wenn ein Angebot mit der angegebenen ID vorhanden ist, aktualisiert das Verfahren es mit neuen Parametern und zeigt dann ein aktualisiertes Angebot mit dem Code 200 an. Wenn kein Angebot mit der angegebenen ID vorhanden ist, wird ein neuer Datensatz mit dem Code 201 erstellt.
Lassen Sie uns abschließend eine DELETE-Methode erstellen, um ein Zitat zu entfernen, das nicht mehr inspirierend ist.
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
Diese Methode ruft während der Eingabe die Angebots-ID ab und aktualisiert die Liste ai_quotes mithilfe einer allgemeinen Liste.
Nachdem wir alle Methoden erstellt haben, müssen wir nur noch die Ressource zur API hinzufügen, den Pfad festlegen und Flask ausführen.
api.add_resource(Quote, "/ai-quotes", "/ai-quotes/", "/ai-quotes/<int:id>") if __name__ == '__main__': app.run(debug=True)
Unser REST API Service ist fertig!
Als Nächstes können wir den Code in der Datei app.py speichern, indem wir ihn in der Konsole mit dem folgenden Befehl ausführen:
python3 app.py
Wenn alles in Ordnung ist, bekommen wir so etwas:
* Debug-Modus: Ein
* Läuft unter 127.0.0.1 : 5000 / (Drücken Sie STRG + C, um das Programm zu beenden.)
* Neustart mit stat
* Debugger ist aktiv!
* Debugger-PIN: XXXXXXXAPI testenNachdem die API erstellt wurde, muss sie getestet werden.
Dies kann mit dem Curl Console-Dienstprogramm oder dem Insomnia REST-Client oder durch Veröffentlichen der API in der Rapid-API erfolgen.
Veröffentlichen Sie unsere APIRapidAPI ist der weltweit größte Marktplatz mit mehr als 10.000 APIs (und etwa 1 Million Entwicklern).
RapidAPI bietet nicht nur eine einzige Schnittstelle für die Arbeit mit APIs von Drittanbietern, sondern bietet Ihnen auch die Möglichkeit, Ihre eigene API schnell und einfach zu veröffentlichen.
Dazu müssen Sie es zunächst auf einem Server im Netzwerk veröffentlichen. In unserem Fall werden wir
Heroku verwenden . Die Arbeit mit ihm sollte keine Schwierigkeiten bereiten (
mehr über ihn erfahren Sie hier ).
So veröffentlichen Sie Ihre API auf Heroku1. Installieren Sie Heroku.Der erste Schritt besteht darin, die Heroku Command Line Interface (CLI) zu registrieren und zu installieren. Dies funktioniert unter Ubuntu 16+.
sudo snap install heroku --classicDann melden Sie sich an:
Heroku Login2. Fügen Sie die erforderlichen Dateien hinzu.Jetzt müssen wir die Dateien zur Veröffentlichung dem Ordner in unserer Anwendung hinzufügen:
- require.txt mit einer Liste der erforderlichen Python-Module;
- Procfile, das angibt, welche Befehle ausgeführt werden müssen, um die Anwendung zu starten.
- .gitignore - um Dateien auszuschließen, die auf dem Server nicht benötigt werden.
Die Datei require.txt enthält die folgenden Zeilen:
- Flasche
- flaschenruhe
- Gunicorn
Bitte beachten Sie: Wir haben Gunicorn (Python WSGI HTTP Server) zur Liste hinzugefügt, da wir unsere Anwendung auf dem Server ausführen müssen.
Procfile enthält:
Web: Gunicorn App: AppDer Inhalt von .gitignore:
*.pyc __pycache__/
Nachdem die Dateien erstellt wurden, initialisieren wir das Git-Repo und legen fest:
git init git add git commit -m "First API commit"
3. Erstellen Sie eine neue Heroku-Anwendung. heroku create
Wir senden den Hauptzweig an das entfernte Heroku-Repo:
git push heroku master
Jetzt können Sie den API-Dienst mit den folgenden Befehlen öffnen:
heroku ps:scale web=1 heroku open
Die API ist unter
your-random-heroku-name.herokuapp.com/ai-quotes verfügbar.
So fügen Sie Ihre Python-API zum RapidAPI-Marktplatz hinzuNachdem der API-Dienst auf Heroku veröffentlicht wurde, können Sie ihn der Rapid-API hinzufügen. Hier finden Sie die
ausführliche Dokumentation zu diesem Thema.
1. Erstellen Sie ein RapidAPI-Konto.
Registrieren Sie ein kostenloses Konto - dies kann über Facebook, Google, GitHub erfolgen.
2. Fügen Sie die API zur Systemsteuerung hinzu.
3. Geben Sie als Nächstes allgemeine Informationen zu Ihrer API ein.
4. Nachdem Sie auf "API hinzufügen" geklickt haben, wird eine neue Seite angezeigt, auf der Sie Informationen zu unserer API eingeben können.
5. Jetzt können Sie entweder die API-Endpunkte manuell eingeben oder die Swagger-Datei mit OpenAPI herunterladen.
Nun müssen wir die Endpunkte unserer API auf der Seite Endpunkte festlegen. In unserem Fall entsprechen die Endpunkte dem CRUD-Konzept (abrufen, veröffentlichen, setzen, löschen).

Als Nächstes müssen Sie den Endpunkt GET AI Quote erstellen, auf dem ein zufälliges Anführungszeichen (falls die ID Standard ist) oder ein Anführungszeichen für die angegebene ID angezeigt wird.
Klicken Sie zum Erstellen eines Endpunkts auf die Schaltfläche „Endpunkt erstellen“.

Wiederholen Sie diesen Vorgang für alle anderen API-Endpunkte. Das ist alles! Herzlichen Glückwunsch, Sie haben Ihre API veröffentlicht!
Wenn alles in Ordnung ist, sieht die API-Seite ungefähr so aus:

Fazit
In diesem Artikel haben wir den Prozess des Erstellens eines eigenen RESTful API-Dienstes in Python sowie den Prozess des Publizierens einer API in der Heroku-Cloud und des Hinzufügens zum RapidAPI-Verzeichnis untersucht.
In der Testversion wurden jedoch nur die Grundprinzipien der API-Entwicklung gezeigt - Nuancen wie Sicherheit, Fehlertoleranz und Skalierbarkeit wurden nicht berücksichtigt.
Bei der Entwicklung einer echten API muss all dies berücksichtigt werden.