Kurs
Beherrschung von Python-APIs: Ein umfassender Leitfaden zur Erstellung und Nutzung von APIs in Python
APIs, also Anwendungsprogrammierschnittstellen, sind die Helden der modernen Softwareentwicklung. Sie ermöglichen es, dass verschiedene Softwaresysteme miteinander kommunizieren können, so dass Dienste integriert und Anwendungen erstellt werden können. Die Beherrschung von APIs ist eine wichtige Fähigkeit für jeden, der mit Daten in Python arbeiten möchte, vor allem wenn du ein Entwickler bist. Du wirst überrascht sein, welche Türen sich dir öffnen, denn wenn du diese Fähigkeit erlernt hast, kannst du Webanwendungen erstellen, Verbindungen zu externen Diensten herstellen oder sogar Echtzeitdaten in Machine-Learning-Projekten nutzen.
In diesem Leitfaden werden wir die Welt der APIs erkunden, lernen, wie man sie in Python verwendet, wie man mit FastAPI eigene APIs erstellt und wie man mit den häufigsten Herausforderungen umgeht, die mit Sicherheit auftreten werden. Am Ende dieses Tutorials wirst du ein solides Verständnis dafür haben, wie du APIs in deinen Projekten nutzen kannst, um deinen Entwicklungsprozess effizienter und deine Anwendungen leistungsfähiger zu machen. Wenn du mit all den Informationen nicht weiterkommst, kannst du unseren Kurs Einführung in APIs in Python ausprobieren, in dem jeder einzelne Teil detailliert besprochen wird.
Was ist eine API?
Eine API ist wie eine Brücke zwischen verschiedenen Softwareanwendungen. Sie ermöglicht es diesen Anwendungen, miteinander zu kommunizieren und Informationen auszutauschen.
Stell dir eine API als Kellner in einem Restaurant vor. Du sagst dem Kellner, was du willst (deine Bestellung), und er gibt deinen Wunsch an die Küche weiter. Die Küche bereitet dein Essen zu, und der Kellner bringt es dir zurück. Auf ähnliche Weise sendest du eine Anfrage an eine API, die deine Anfrage verarbeitet und die Ergebnisse zurückgibt.
Um dies zu verdeutlichen, lass uns einige reale Anwendungen betrachten: Du könntest z.B. eine öffentliche API nutzen, um Finanzdaten für eine Börsenanalyse abzurufen oder um auf Echtzeit-Wetterdaten für ein Klimavorhersagemodell zuzugreifen. Wie du vielleicht schon gemerkt hast, sind APIs besonders wichtig, wenn du mit großen Datenmengen arbeitest und/oder Daten in Echtzeit benötigst; andernfalls hättest du vielleicht keine Probleme mit der Integration.
Wie eine Python-API funktioniert. Bild von Napkin.AI
Verwendung von APIs in Python
Die Verwendung von APIs in Python ist eine leistungsstarke Methode, um mit externen Diensten zu interagieren, Daten abzurufen und verschiedene Funktionen in deine Anwendungen zu integrieren. Python macht die Arbeit mit APIs einfach und effizient, vor allem durch die Bibliothek requests, mit der du HTTP-Anfragen senden kannst, um mit APIs zu interagieren.
Einführung in APIs in Python
In Python ist die Interaktion mit APIs dank der Bibliothek requests
ein unkomplizierter Prozess. Diese Bibliothek vereinfacht das Senden von HTTP-Anfragen und ermöglicht es dir, mit APIs zu kommunizieren und Daten abzurufen oder zu senden.
API-Anfragen in Python stellen
Bevor du API-Anfragen in Python stellen kannst, brauchst du die Bibliothekrequests
. Du kannst es mit diesem Befehl installieren:
pip install requests
Die Grundlagen von API-Anfragen
Verknüpfen wir unser konzeptionelles Beispiel mit dem Restaurant mit dem, was tatsächlich in Python passiert. Hier ist die vereinfachte Aufschlüsselung:
Finde den richtigen Ort: Bestimme den API-Endpunkt, d.h. die spezifische Webadresse, an die du deine Anfrage sendest.
Gib deine Bestellung auf: Verwende die
requests
Bibliothek von Python, um die Anfrage an die API zu senden. Du gibst an, welche Art von Aktion du durchführen willst (z. B. Daten abrufen oder Daten senden).Hol dir dein Essen: Die API sendet eine Antwort zurück, die du verarbeiten kannst, um die benötigten Informationen zu erhalten.
GET-Anfragen
Wenn du eine URL in deinen Browser eingibst und die Eingabetaste drückst, sendest du im Grunde eine GET-Anfrage an den Server und gibst die gewünschte Ressource an, die der Server verarbeitet, um die angeforderten Daten zu finden und aufzubereiten, bevor er sie in einem Format wie JSON oder XML zurückschickt.
import requestsresponse = requests.get('https://api.example.com/data')data = response.json()print(data)
In diesem Beispiel senden wir eine GET-Anfrage an eine fiktive API und drucken die JSON-Antwort aus. GET-Anfragen werden in der Regel verwendet, um Daten abzurufen, ohne sie zu verändern.
POST-Anfragen
Während GET-Anfragen Daten abrufen, senden POST-Anfragen Anweisungen an einen Server. Sie werden oft verwendet, um neue Ressourcen zu erstellen (wie das Hinzufügen eines Benutzers) oder bestehende zu aktualisieren (wie das Bearbeiten eines Profils).
Stell dir vor, du füllst ein Online-Formular aus, um dich für einen Dienst zu registrieren. Wenn du auf "Absenden" klickst, sendest du eine POST-Anfrage mit deinen Informationen. Hier ist ein vereinfachtes Beispiel:
# Data to send (like user information)data = {'name': 'John Doe', 'email': 'john.doe@example.com'}# Send the data to the API (replace the URL with the actual API endpoint)response = requests.post('https://api.example.com/users', json=data)# Check if the request was successful (usually a status code of 201 for creation)if response.status_code == 201: print("User created successfully!")else: print("Error:", response.status_code)
Dieses Beispiel sendet ein Wörterbuch mit Benutzerinformationen als JSON-Daten an die API. Dann überprüfen wir den Antwortstatuscode, um zu sehen, ob der Benutzer erfolgreich erstellt wurde.
Umgang mit Antworten
Wenn du eine API-Anfrage stellst, sendet der Server eine Antwort zurück, die zwei wichtige Informationen enthält:
- Status Code: Eine Zahl, die den Erfolg oder Misserfolg der Anfrage anzeigt. Zum Beispiel bedeutet 200 normalerweise Erfolg, während 404 bedeutet, dass die Ressource nicht gefunden wurde.
- Daten: Die von dir angeforderten Informationen liegen oft im JSON-Format vor. Das ist der Ort, an dem sich die wertvollen Inhalte befinden.
Hier ist ein Python-Beispiel:
response = requests.get('https://api.example.com/data')if response.status_code == 200: data = response.json() print(data) else: print(f"Request failed with status code {response.status_code}")
Python API Status Codes verstehen
API-Statuscodes sind standardisierte Antworten, die Server zurücksenden, um das Ergebnis der Anfrage eines Kunden anzuzeigen. Diese Codes helfen Entwicklern zu verstehen, ob eine Anfrage erfolgreich war, ob ein Fehler aufgetreten ist oder ob weitere Maßnahmen erforderlich sind.
Allgemeine Statuscodes
200 OK: Dieser Statuscode zeigt an, dass die Anfrage erfolgreich war. Wenn du zum Beispiel eine GET-Anfrage stellst, um Daten von einer API abzurufen, bedeutet eine
200 OK
Antwort, dass die Daten korrekt abgerufen wurden.
404 Nicht gefunden: Dieser Code wird zurückgegeben, wenn der Server die angeforderte Ressource nicht finden kann. Wenn du zum Beispiel versuchst, auf einen Endpunkt zuzugreifen, der nicht existiert, erhältst du die Fehlermeldung
404 Not Found
.
500 Interner Serverfehler: Dieser Code signalisiert, dass auf der Seite des Servers etwas schief gelaufen ist. Es handelt sich um eine allgemeine Fehlermeldung, die aufgrund verschiedener Probleme auftreten kann, z. B. durch Fehler im Servercode oder Probleme mit der Datenbank.
Umgang mit verschiedenen Statuscodes
Ein effektiver Umgang mit API-Statuscodes in deinen Python-Anwendungen stellt sicher, dass sich dein Code vorhersehbar verhält und Fehler elegant behandelt werden können. Wenn die Antwort 200 lautet, fährst du mit der Verarbeitung der zurückgegebenen Daten fort. Wenn du auf einen 404-Fehler stößt, überprüfe, ob die Endpunkt-URL korrekt ist, und implementiere bei Bedarf eine Fallback-Logik oder informiere den Nutzer, dass die Ressource nicht verfügbar ist. Bei 500-Fehlern solltest du die Anfrage nach einer kurzen Verzögerung erneut versuchen oder den Fehler für weitere Untersuchungen protokollieren. Vermeide jedoch übermäßige Wiederholungsversuche, um eine Überlastung des Servers zu vermeiden.
Python-APIs erstellen
Die Erstellung von APIs mit Python ermöglicht es dir, leistungsstarke und effiziente Anwendungsschnittstellen zu erstellen. Die Einfachheit von Python und seine robusten Bibliotheken machen es zu einer hervorragenden Wahl für die API-Entwicklung.
Einführung in die FastAPI
Da du nun weißt, wie du APIs nutzen kannst, wollen wir nun herausfinden, wie wir unsere eigenen erstellen können. FastAPI ist ein modernes, schnelles (Hochleistungs-)Web-Framework für die Erstellung von APIs mit Python. Wie der Name schon sagt, ist es so konzipiert, dass es einfach zu bedienen ist. Eine Sache, die ich an FastAPI mag, ist, dass es auch automatisch eine interaktive Dokumentation erstellt.
FastAPI einrichten
Um loszulegen, musst du Python und seinen Paketmanager pip installiert haben. Anschließend installierst du FastAPI und Uvicorn, einen leistungsstarken ASGI-Server:
pip install fastapi uvicorn
Nebenbei bemerkt: Wenn du Probleme mit Python oder der Pip-Einrichtung hast, schau dir unser Tutorial an: Wie man Python und Pip unter Windows, MacOS und Linux aktualisiert.
Erstellen einer einfachen API
Lass uns eine einfache API konstruieren, die eine einfache Begrüßung zurückgibt:
from fastapi import FastAPIapp = FastAPI()@app.get("/")def read_root(): return {"Hello": "World"}
Um diese API zu starten, führe den folgenden Befehl aus:
uvicorn main:app --reload
Dieser Befehl initiiert den Uvicorn-Server, der deine API auf http://127.0.0.1:8000
bereitstellt. Wenn du diese URL in deinem Webbrowser aufrufst, erhältst du die Antwort {"Hello": "World"}
.
Erweiterte Funktionen der FastAPI
Mit FastAPI lassen sich nicht nur einfache APIs schnell erstellen, sondern es bietet auch eine Reihe von fortschrittlichen Funktionen, die es für komplexe und leistungsstarke Anwendungen geeignet machen. Hier sind einige der wichtigsten Funktionen:
Abfrage-Parameter
In der FastAPI ist das Hinzufügen und Bearbeiten von Abfrageparametern dank der Python-Typ-Hinweise ganz einfach. Abfrageparameter sind Teil der URL und werden verwendet, um optionale Daten an den API-Endpunkt zu übergeben, oft um die zurückgegebenen Daten zu filtern oder zu ändern.
Hinzufügen von Abfrageparametern
Um einen Abfrageparameter in FastAPI hinzuzufügen, definierst du ihn einfach als Funktionsargument in deiner Pfadoperationsfunktion. Wenn ein Parameter optional ist, kannst du ihm einen Standardwert zuweisen, wie z.B. None
. Nehmen wir zum Beispiel an, du hast einen Endpunkt, der Elemente aus einer Datenbank abruft. Du möchtest es den Nutzern ermöglichen, Artikel nach einer Suchanfrage zu filtern:
app = FastAPI()@app.get("/items/")def read_items(q: str = None): if q: return {"items": ["Item 1", "Item 2", "Item 3"], "query": q} return {"items": ["Item 1", "Item 2", "Item 3"]}
In diesem Beispiel ist q
ein optionaler Abfrageparameter. Wenn wir einen Wert für q
angeben, filtert er die Ergebnisse auf der Grundlage dieser Abfrage. Wenn q
nicht angegeben wird, gibt der Endpunkt alle Elemente zurück.
Umgang mit Abfrageparametern
FastAPI verarbeitet die Abfrageparameter automatisch, einschließlich der Typvalidierung und Konvertierung. Wenn du zum Beispiel einen Abfrageparameter als Ganzzahl angibst, überprüft die FastAPI, ob die Eingabe tatsächlich eine Ganzzahl ist. Wenn die Eingabe nicht mit dem erwarteten Typ übereinstimmt, gibt FastAPI eine eindeutige Fehlermeldung zurück.
Hier ist ein Beispiel mit einem erforderlichen Abfrageparameter und einer Typüberprüfung:
@app.get("/items/{item_id}")def read_item(item_id: int, q: str = None): return {"item_id": item_id, "query": q}
In diesem Fall ist item_id
ein Pfadparameter und q
ist ein optionaler Abfrageparameter. Die FastAPI stellt sicher, dass item_id
eine ganze Zahl ist und verarbeitet den Abfrageparameter q
, wenn er angegeben wird.
Umgang mit verschiedenen HTTP-Methoden
Die Implementierung verschiedener HTTP-Methoden wie GET, POST, PUT und DELETE ist einfach und spiegelt wider, wie du Routen in anderen Frameworks definierst. Jede Methode ist an einen bestimmten Vorgangstyp gebunden, z. B. das Abrufen von Daten (GET), das Erstellen neuer Daten (POST), das Aktualisieren vorhandener Daten (PUT) oder das Löschen von Daten (DELETE).
GET-Methode
Die Methode GET
wird verwendet, um Daten vom Server abzurufen. In FastAPI definierst du einen GET
Endpunkt wie folgt:
@app.get("/items/")def get_items(): return {"items": ["Item 1", "Item 2", "Item 3"]}
POST-Methode
Die Methode POST
wird verwendet, um neue Daten zu erstellen. Du kannst einen POST
Endpunkt definieren und Daten im Request Body empfangen:
@app.post("/items/")def create_item(item: dict): return {"item": item}
PUT-Methode
Die Methode PUT
wird verwendet, um bestehende Daten zu aktualisieren. Normalerweise werden sowohl ein Identifikator als auch die neuen Daten benötigt:
@app.put("/items/{item_id}")def update_item(item_id: int, item: dict): return {"item_id": item_id, "updated_item": item}
DELETE-Methode
Die Methode DELETE
wird verwendet, um Daten zu entfernen. In FastAPI ist ein DELETE
Endpunkt wie folgt definiert:
@app.delete("/items/{item_id}")def delete_item(item_id: int): return {"message": f"Item {item_id} deleted"}
Authentifizierung und Sicherheit
Die FastAPI bietet mehrere Mechanismen zur Umsetzung von Authentifizierung und Sicherheit:
- HTTP Basic Auth: Eine unkomplizierte Methode, die aber aufgrund von Sicherheitsbedenken nicht für Produktionsumgebungen empfohlen wird.
- API-Schlüssel: Eine sicherere Option ist die Generierung eindeutiger Schlüssel für die Kunden.
- OAuth 2.0: Ein komplexer, aber robuster Standard für die Autorisierung, der häufig für die Integration von Drittanbietern verwendet wird.
- JSON Web Tokens (JWT): Ein beliebter Ansatz, um Ansprüche zwischen zwei Parteien sicher darzustellen.
Leistungsüberlegungen zur Python-API
Lass uns über einige Überlegungen zur Leistung der Python-API nachdenken.
Effizienz von API-Anfragen
Die Effizienz von API-Anfragen kann sich erheblich auf die Gesamtleistung deiner Anwendung auswirken. Die verschiedenen API-Anforderungsmethoden sind unterschiedlich zeitaufwendig:
- GET-Anfragen: Sie sind in der Regel schnell, da sie Daten abrufen, ohne Änderungen auf dem Server zu verursachen. Allerdings kann die Leistung bei großen Datensätzen abnehmen.
- POST-Anfragen: Diese können länger dauern, da sie das Senden von Daten an den Server zur Verarbeitung oder Speicherung beinhalten.
- PUT- und DELETE-Anfragen: Der Zeitaufwand kann hier je nach Antwortzeit des Servers und den durchgeführten Operationen variieren.
Um die Effizienz zu steigern, solltest du die Größe der gesendeten oder abgerufenen Daten so gering wie möglich halten und, wenn möglich, Massenoperationen verwenden.
Optimierung der API-Nutzung
Hier sind einige Tipps, wie du die Leistung deiner API-Aufrufe in Python optimieren kannst:
- Batch Requests: Kombiniere mehrere API-Aufrufe in einer einzigen Anfrage, wenn möglich, um den Overhead zu reduzieren.
- Antworten zwischenspeichern: Speichere häufig angeforderte Daten lokal, um die Anzahl der API-Aufrufe zu reduzieren.
- Asynchrone Abfragen: Verwende asynchrone Bibliotheken wie
aiohttp
, um mehrere Anfragen gleichzeitig zu bearbeiten und so Wartezeiten zu verkürzen. - Pooling von Verbindungen: Du kannst Verbindungen wiederverwenden, anstatt für jede Anfrage eine neue zu erstellen, was die Latenzzeit verringern kann.
Häufige Python-API-Fehler und ihr Umgang mit ihnen
Bei der Arbeit mit APIs können verschiedene Fehler auftreten, die die Funktionalität deiner Anwendung stören können. Hier sind zwei häufige Probleme und wie du sie effektiv angehen kannst.
Umgang mit Timeout-Fehlern
Timeout-Fehler entstehen, wenn eine API-Anfrage nicht innerhalb der vorgegebenen Zeit beantwortet wird. Diese Fehler können durch eine Vielzahl von Faktoren verursacht werden, z. B. Netzwerküberlastung, Serverüberlastung, umfangreiche Datenverarbeitung oder API-Ratenbeschränkungen. Um diesen Fehlern entgegenzuwirken, ist es ratsam, Strategien wie die Verlängerung der Timeout-Dauer, exponentielle Backoff-Wiederholungsmechanismen, die Optimierung von Request Payloads und asynchrone Programmierung einzusetzen. Es kann auch hilfreich sein, robuste Verfahren zur Fehlerbehandlung und -protokollierung einzuführen, um die Ursache von Timeouts zu ermitteln und die notwendigen Gegenmaßnahmen zu ergreifen.
Verwaltung von Tarifgrenzen
Ratenbeschränkungen werden häufig von APIs durchgesetzt, um Missbrauch zu verhindern, eine gerechte Nutzung zu gewährleisten und die Stabilität des Dienstes zu erhalten. Diese Begrenzungen, die in der Regel als Anfragen pro Minute oder Stunde angegeben werden, begrenzen die Gesamtzahl der Anfragen, die in einem bestimmten Zeitraum gestellt werden können. Wenn diese Schwellenwerte überschritten werden, kann es zu zeitweiligen Blockaden, schleppenden Antworten oder zur völligen Verweigerung des API-Zugangs kommen. Nutze Techniken wie exponentielles Backoff, verwende Caching und behalte die API-Nutzung genau im Auge, um die Ratenbeschränkungen zu kontrollieren. Es ist wichtig, dass du die Richtlinien der API zur Tarifbegrenzung verstehst, um Serviceunterbrechungen zu vermeiden.
Alternativen zu Standard-API-Anfragen
APIs sind zwar die gängigste Methode für den Datenzugriff, aber es gibt Situationen, in denen Alternativen besser geeignet sind. Im Folgenden findest du zwei gängige Alternativen zur Verwendung von Standard-API-Anfragen in Python.
Web Scraping verwenden
Wenn APIs nicht verfügbar, unzureichend oder nicht praktikabel sind, ist Web Scraping eine Technik, um Daten von Websites zu sammeln. Durch die Verarbeitung von HTML-Text kannst du Informationen erhalten, die sonst vielleicht nicht zur Verfügung stehen. Es ist jedoch wichtig, dass du dich an die Nutzungsbedingungen der Websites hältst, keine Server überflutest und die ethischen und rechtlichen Konsequenzen bedenkst. Web Scraping wird durch bekannte Python-Module wie BeautifulSoup, Scrapy und Selenium erleichtert.
Direkter Datenbankzugriff
Der direkte Datenbankzugriff bietet im Vergleich zu APIs einen direkteren und potenziell schnelleren Ansatz zum Abrufen von Daten. Wenn du die nötigen Rechte und ein klares Verständnis der Datenbankstruktur hast, kannst du die API-Beschränkungen umgehen und benutzerdefinierte Abfragen mit Tools wie SQLAlchemy oder psycopg2 ausführen. Diese Methode erfordert jedoch eine sorgfältige Abwägung von Sicherheit, Leistung und Datenintegrität, da direkte Datenbankinteraktionen bei unsachgemäßer Handhabung zu Schwachstellen führen können.
Fazit
Du kennst jetzt die Grundlagen für die Erstellung und Verwendung von APIs und weißt, wie du das flexible FastAPI-Framework nutzen kannst. Außerdem weißt du jetzt, wie du häufige Hindernisse wie Tarifbeschränkungen und Zeitüberschreitungen überwinden kannst. Eine effektive API-Interaktion ist für eine zeitgemäße Python-Entwicklung unerlässlich, da sie es dir ermöglicht, große Datenmengen zu nutzen und kreative Lösungen zu entwickeln.
Natürlich ändern sich die Prozesse ständig. Der Schlüssel zu einem Experten sind Experimente, ständiges Lernen und die Anwendung in der Praxis. Das ist der Grund, warum DataCamp so viel Aufwand in Ressourcen wie unseren Kurs Einführung in APIs in Python gesteckt hat, damit du wirklich üben und ein Experte werden kannst. Auch unser Kurs "Streamlined Data Ingestion with Pandas " ist eine gute Option. Also melde dich noch heute an!
Technischer Redakteur, der sich auf KI, ML und Datenwissenschaft spezialisiert hat und komplexe Ideen verständlich und nachvollziehbar macht.
Lerne Python mit DataCamp
Kurs
Introduction to APIs in Python
Kurs
Working with the OpenAI API

Der Blog
Lehrer/innen und Schüler/innen erhalten das Premium DataCamp kostenlos für ihre gesamte akademische Laufbahn
Der Blog
Die 32 besten AWS-Interview-Fragen und Antworten für 2024
Der Blog
Die 20 besten Snowflake-Interview-Fragen für alle Niveaus

Nisha Arya Ahmed
20 Min.
Der Blog
Q2 2023 DataCamp Donates Digest
Der Blog
Top 30 Generative KI Interview Fragen und Antworten für 2024

Hesam Sheikh Hassani
15 Min.
Der Blog