{"id":56446,"date":"2022-11-29T13:08:34","date_gmt":"2022-11-29T12:08:34","guid":{"rendered":"https:\/\/kinsta.com\/de\/?p=56446&#038;preview=true&#038;preview_id=56446"},"modified":"2023-07-27T11:45:23","modified_gmt":"2023-07-27T10:45:23","slug":"fastapi","status":"publish","type":"post","link":"https:\/\/kinsta.com\/de\/blog\/fastapi\/","title":{"rendered":"Eine App mit FastAPI f\u00fcr Python erstellen"},"content":{"rendered":"<p>FastAPI ist ein schnelles und leichtgewichtiges Web-Framework f\u00fcr die Erstellung moderner Anwendungsprogrammierschnittstellen mit <a href=\"https:\/\/kinsta.com\/de\/blog\/objektorientierten-programmierung-python\/\">Python<\/a> 3.6 und h\u00f6her. In diesem Lernprogramm gehen wir die Grundlagen der Erstellung einer App mit FastAPI durch und du bekommst eine Ahnung davon, warum es zu einem der <a href=\"https:\/\/www.infoworld.com\/article\/3637038\/the-best-open-source-software-of-2021.html#slide5\" target=\"_blank\" rel=\"noopener noreferrer\">besten Open-Source-Frameworks des Jahres 2021<\/a> gek\u00fcrt wurde.<\/p>\n<p>Wenn du bereit bist, deine eigenen FastAPI-Apps zu entwickeln, musst du nicht lange suchen, um einen Ort zu finden, an dem du sie hosten kannst. Das <a href=\"https:\/\/sevalla.com\/application-hosting\/\">Anwendungs-<\/a> und <a href=\"https:\/\/sevalla.com\/database-hosting\/\">Datenbank-Hosting<\/a> von Kinsta bietet eine Plattform als Service, die stark auf Python basiert.<\/p>\n<p>Lass uns zuerst die Grundlagen lernen.<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>Vorteile von FastAPI<\/h2>\n<p>Im Folgenden sind einige der Vorteile aufgef\u00fchrt, die das <a href=\"https:\/\/fastapi.tiangolo.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">FastAPI-Framework<\/a> f\u00fcr ein Projekt mit sich bringt.<\/p>\n<ul>\n<li><strong>Geschwindigkeit:<\/strong> Wie der Name schon sagt, ist FastAPI ein sehr schnelles Framework. Seine Geschwindigkeit ist vergleichbar mit der von <a href=\"https:\/\/docs.sevalla.com\/templates\/overview\">Go<\/a> und <a href=\"https:\/\/docs.sevalla.com\/templates\/overview\">Node.js<\/a>, die allgemein als eine der schnellsten Optionen f\u00fcr die Erstellung von APIs gelten.<\/li>\n<li><strong>Einfach zu lernen und zu programmieren:<\/strong> FastAPI hat fast alles, was du f\u00fcr eine produktionsreife API brauchst, bereits bedacht. Als Entwickler, der FastAPI nutzt, musst du nicht alles von Grund auf neu programmieren. Mit nur wenigen Zeilen Code ist eine RESTful-API zum Einsatz bereit.<\/li>\n<li><strong>Umfassende Dokumentation:<\/strong> FastAPI nutzt die OpenAPI-Dokumentationsstandards, so dass die Dokumentation dynamisch erstellt werden kann. Diese Dokumentation enth\u00e4lt detaillierte Informationen \u00fcber die Endpunkte, Antworten, Parameter und R\u00fcckgabecodes von FastAPI.<\/li>\n<li><strong>APIs mit weniger Fehlern:<\/strong> FastAPI unterst\u00fctzt eine <a href=\"https:\/\/fastapi.tiangolo.com\/tutorial\/query-params-str-validations\/#add-more-validations\" target=\"_blank\" rel=\"noopener noreferrer\">benutzerdefinierte Datenvalidierung<\/a>, die es Entwicklern erm\u00f6glicht, APIs mit weniger Fehlern zu erstellen. Die Entwickler von FastAPI r\u00fchmen sich, dass das Framework zu weniger von Menschen verursachten Fehlern f\u00fchrt &#8211; bis zu 40 % weniger.<\/li>\n<li><strong>Typ-Hinweise:<\/strong> Das Modul types wurde in Python 3.5 eingef\u00fchrt. Es erm\u00f6glicht dir, die <code>type<\/code> einer Variablen zu deklarieren. Wenn der Typ einer Variablen deklariert ist, k\u00f6nnen IDEs bessere Unterst\u00fctzung bieten und Fehler genauer vorhersagen.<\/li>\n<\/ul>\n\n<h2>Wie man mit FastAPI anf\u00e4ngt<\/h2>\n<p>Um diesem Tutorial zu folgen und mit FastAPI loszulegen, musst du zun\u00e4chst ein paar Dinge tun.<\/p>\n<p>Vergewissere dich, dass du einen Texteditor\/IDE f\u00fcr Programmierer hast, wie z. B. <a href=\"https:\/\/code.visualstudio.com\/download\" target=\"_blank\" rel=\"noopener noreferrer\">Visual Studio Code<\/a>. Andere M\u00f6glichkeiten sind <a href=\"https:\/\/kinsta.com\/de\/blog\/wie-man-sublime-text-benutzt\/\" rel=\"noopener\">Sublime Text<\/a> und <a href=\"https:\/\/www.espressoapp.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Espresso<\/a>.<\/p>\n<p>Es ist eine g\u00e4ngige Praxis, deine Python-Anwendungen und ihre Instanzen in virtuellen Umgebungen laufen zu lassen. Virtuelle Umgebungen erm\u00f6glichen es, verschiedene Pakets\u00e4tze und Konfigurationen gleichzeitig auszuf\u00fchren und Konflikte aufgrund von inkompatiblen Paketversionen zu vermeiden.<\/p>\n<p>Um eine virtuelle Umgebung zu erstellen, \u00f6ffne <a href=\"https:\/\/kinsta.com\/de\/blog\/python-befehle\/#introduction-to-the-cli\">dein Terminal<\/a> und f\u00fchre diesen Befehl aus:<\/p>\n<pre><code class=\"language-bash\">$ python3 -m venv env<\/code><\/pre>\n<p>Au\u00dferdem musst du die virtuelle Umgebung aktivieren. Der entsprechende Befehl h\u00e4ngt von deinem Betriebssystem und der verwendeten Shell ab. Hier sind einige Beispiele f\u00fcr die CLI-Aktivierung f\u00fcr verschiedene Umgebungen:<\/p>\n<pre><code class=\"language-bash\"># On Unix or MacOS (bash shell): \n\/path\/to\/venv\/bin\/activate\n\n# On Unix or MacOS (csh shell):\n\/path\/to\/venv\/bin\/activate.csh\n\n# On Unix or MacOS (fish shell):\n\/path\/to\/venv\/bin\/activate.fish\n\n# On Windows (command prompt):\npathtovenvScriptsactivate.bat\n\n# On Windows (PowerShell):\npathtovenvScriptsActivate.ps1\n<\/code><\/pre>\n<p>(Einige Python-f\u00e4hige IDEs k\u00f6nnen auch so konfiguriert werden, dass sie die aktuelle virtuelle Umgebung aktivieren.)<\/p>\n<p>Installiere nun FastAPI:<\/p>\n<pre><code class=\"language-bash\">$ pip3 install fastapi<\/code><\/pre>\n<p>FastAPI ist ein Framework zum Erstellen von APIs, aber um deine APIs zu testen, brauchst du einen lokalen Webserver. <a href=\"https:\/\/www.uvicorn.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">Uvicorn<\/a> ist ein blitzschneller Asynchronous Server Gateway Interface (ASGI) Webserver f\u00fcr Python, der sich hervorragend f\u00fcr die Entwicklung eignet. Um Uvicorn zu installieren, f\u00fchre diesen Befehl aus:<\/p>\n<pre><code class=\"language-bash\">$ pip3 install \"uvicorn[standard]\"<\/code><\/pre>\n<p>Nach erfolgreicher Installation erstellst du eine Datei namens <strong>main.py<\/strong> im Arbeitsverzeichnis deines Projekts. Diese Datei wird der Einstiegspunkt f\u00fcr deine Anwendung sein.<\/p>\n<figure style=\"width: 1151px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/11\/fastapi-project-layout.png\" alt=\"Ansicht eines einfachen FastAPI-Projekts in einer IDE\" width=\"1151\" height=\"475\"><figcaption class=\"wp-caption-text\">Ansicht eines einfachen FastAPI-Projekts in einer IDE<\/figcaption><\/figure>\n<h3>Ein schnelles FastAPI-Beispiel<\/h3>\n<p>Du kannst deine FastAPI-Installation testen, indem du schnell einen Beispiel-Endpunkt einrichtest. F\u00fcge in deine Datei <strong>main.py<\/strong> den folgenden Code ein und speichere die Datei:<\/p>\n<pre><code class=\"language-python\"># main.py\nfrom fastapi import FastAPI\napp = FastAPI()\n@app.get(\"\/\")\nasync def root():\n return {\"greeting\":\"Hello world\"}\n<\/code><\/pre>\n<p>Das obige Snippet erstellt einen einfachen FastAPI-Endpunkt. Nachfolgend findest du eine Zusammenfassung der Funktionen der einzelnen Zeilen:<\/p>\n<ul>\n<li><code>from fastapi import FastAPI<\/code>: Die Funktionalit\u00e4t f\u00fcr deine API wird von der Python-Klasse FastAPI bereitgestellt.<\/li>\n<li><code>app = FastAPI()<\/code>: Damit wird eine FastAPI-Instanz erstellt.<\/li>\n<li><code>@app.get(\"\/\")<\/code>: Dies ist ein Python-Dekorator, der der FastAPI mitteilt, dass die darunter liegende Funktion f\u00fcr die Bearbeitung der Anfragen zust\u00e4ndig ist.<\/li>\n<li><code>@app.get(\"\/\")<\/code>: Dies ist ein Dekorator, der die Route angibt. Damit wird eine <code>GET<\/code> Methode auf der Route der Website erstellt. Das Ergebnis wird dann von der gewickelten Funktion zur\u00fcckgegeben.<\/li>\n<li>Andere m\u00f6gliche Operationen, die zur Kommunikation verwendet werden, sind <code>@app.post()<\/code>, <code>@app.put()<\/code>, <code>@app.delete()<\/code>, <code>@app.options()<\/code>, <code>@app.head()<\/code>, <code>@app.patch()<\/code> und <code>@app.trace()<\/code>.<\/li>\n<\/ul>\n<p>Im Dateiverzeichnis f\u00fchrst du den folgenden Befehl in deinem Terminal aus, um den API-Server zu starten:<\/p>\n<pre><code class=\"language-bash\">$ uvicorn main:app --reload<\/code><\/pre>\n<p>In diesem Befehl ist <code>main<\/code> der Name deines Moduls. Das Objekt <code>app<\/code> ist eine Instanz deiner Anwendung und wird in den ASGI-Server importiert. Mit dem Flag <code>--reload<\/code> wird der Server angewiesen, automatisch neu zu laden, wenn du \u00c4nderungen vornimmst.<\/p>\n<p>In deinem Terminal solltest du etwa folgendes sehen:<\/p>\n<pre><code> $ uvicorn main:app --reload\nINFO: Will watch for changes in these directories: ['D:\\WEB DEV\\Eunit\\Tests\\fast-api']\nINFO: Uvicorn running on http:\/\/127.0.0.1:8000 (Press CTRL+C to quit)\nINFO: Started reloader process [26888] using WatchFiles\nINFO: Started server process [14956]\nINFO: Waiting for application startup.\nINFO: Application startup complete.\n<\/code><\/pre>\n<p>Navigiere in deinem Browser zu <code>http:\/\/localhost:8000<\/code>, um zu \u00fcberpr\u00fcfen, ob deine API funktioniert. Du solltest &#8222;Hallo&#8220;: &#8222;World&#8220; als JSON-Objekt auf der Seite sehen. Dies zeigt, wie einfach es ist, mit FastAPI eine API zu erstellen. Du musstest nur eine Route definieren und dein Python-W\u00f6rterbuch zur\u00fcckgeben, wie in Zeile sechs des obigen Schnipsels zu sehen ist.<\/p>\n<figure style=\"width: 900px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/11\/fastapi-hello-world-in-browser.png\" alt=\"FastAPI Hello World Anwendung in einem Webbrowser\" width=\"900\" height=\"340\"><figcaption class=\"wp-caption-text\">FastAPI Hello World Anwendung in einem Webbrowser<\/figcaption><\/figure>\n<h3>Typ-Hinweise verwenden<\/h3>\n<p>Wenn du Python verwendest, bist du es gewohnt, Variablen mit grundlegenden Datentypen wie <code>int<\/code>, <code>str<\/code>, <code>float<\/code> und <code>bool<\/code> zu kennzeichnen. Ab Python Version 3.9 wurden jedoch erweiterte Datenstrukturen eingef\u00fchrt. Damit kannst du mit Datenstrukturen wie <code>dictionaries<\/code>, <code>tuples<\/code> und <code>lists<\/code> arbeiten. Mit den Typ-Hinweisen der FastAPI kannst du das Schema deiner Daten mithilfe von <a href=\"https:\/\/pydantic-docs.helpmanual.io\/usage\/models\/\" target=\"_blank\" rel=\"noopener noreferrer\">pydantischen<\/a> Modellen strukturieren und dann die pydantischen Modelle f\u00fcr die Typ-Hinweise verwenden und von der Datenvalidierung profitieren, die bereitgestellt wird.<\/p>\n<p>Im folgenden Beispiel wird die Verwendung von Type Hints in Python anhand eines einfachen Essenspreisrechners ( <code>calculate_meal_fee<\/code>) demonstriert:<\/p>\n<pre><code class=\"language-python\">def calculate_meal_fee(beef_price: int, meal_price: int) -&gt; int:\n total_price: int = beef_price + meal_price\n return total_price\nprint(\"Calculated meal fee\", calculate_meal_fee(75, 19))\n<\/code><\/pre>\n<p>Beachte, dass Type Hints die Ausf\u00fchrung deines Codes nicht ver\u00e4ndern.<\/p>\n<h3>Interaktive FastAPI-API-Dokumentation<\/h3>\n<p>FastAPI verwendet <a href=\"https:\/\/github.com\/swagger-api\/swagger-ui\" target=\"_blank\" rel=\"noopener noreferrer\">Swagger UI<\/a>, um eine automatische interaktive API-Dokumentation bereitzustellen. Um darauf zuzugreifen, navigiere zu <code>http:\/\/localhost:8000\/docs<\/code> und du wirst einen Bildschirm mit all deinen Endpunkten, Methoden und Schemas sehen.<\/p>\n<figure style=\"width: 900px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/11\/swagger-ui-fastapi-documentation-interface.png\" alt=\"Swagger UI's Dokumentation f\u00fcr FastAPI\" width=\"900\" height=\"1013\"><figcaption class=\"wp-caption-text\">Swagger UI&#8217;s Dokumentation f\u00fcr FastAPI<\/figcaption><\/figure>\n<p>Diese automatische, browserbasierte API-Dokumentation wird von FastAPI bereitgestellt, und du musst nichts weiter tun, um sie zu nutzen.<\/p>\n<p>Eine alternative browserbasierte API-Dokumentation, die ebenfalls von FastAPI bereitgestellt wird, ist <a href=\"https:\/\/github.com\/Redocly\/redoc\" target=\"_blank\" rel=\"noopener noreferrer\">Redoc<\/a>. Um auf Redoc zuzugreifen, navigiere zu <code>http:\/\/localhost:8000\/redoc<\/code>. Dort wird dir eine Liste deiner Endpunkte, der Methoden und der jeweiligen Antworten angezeigt.<\/p>\n<figure style=\"width: 900px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/11\/redoc-fastapi-documentation-interface.png\" alt=\"Die Dokumentation von Redoc f\u00fcr FastAPI\" width=\"900\" height=\"1112\"><figcaption class=\"wp-caption-text\">Die Dokumentation von Redoc f\u00fcr FastAPI<\/figcaption><\/figure>\n<h3>Einrichten von Routes in FastAPI<\/h3>\n<p>Mit dem Dekorator <code>@app<\/code> kannst du die <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Methods\" target=\"_blank\" rel=\"noopener noreferrer\">Methode<\/a> der Route angeben, z. B. <code>@app.get<\/code> oder <code>@app.post<\/code>, und unterst\u00fctzt werden\u00a0 <code>GET<\/code>, <code>POST<\/code>, <code>PUT<\/code> und <code>DELETE<\/code>, sowie die weniger verbreiteten Optionen <code>HEAD<\/code>, <code>PATCH<\/code> und <code>TRACE<\/code>.<\/p>\n<h2>Deine App mit FastAPI erstellen<\/h2>\n<p>In diesem Tutorium lernst du, wie du eine <a href=\"https:\/\/www.codecademy.com\/article\/what-is-crud\" target=\"_blank\" rel=\"noopener noreferrer\">CRUD<\/a>-Anwendung mit FastAPI erstellst. Die Anwendung wird in der Lage sein:<\/p>\n<ul>\n<li>Einen Benutzer zu erstellen<\/li>\n<li>Den Datenbankeintrag eines Benutzers zu lesen<\/li>\n<li>Einen bestehenden Benutzer zu aktualisieren<\/li>\n<li>Einen bestimmten Benutzer zu l\u00f6schen<\/li>\n<\/ul>\n<p>Um diese CRUD-Operationen auszuf\u00fchren, erstellst du Methoden, die die API-Endpunkte offenlegen. Das Ergebnis wird eine In-Memory-Datenbank sein, die eine Liste von Benutzern speichern kann.<\/p>\n<figure style=\"width: 864px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/11\/database-table-fastapi-crud-example.png\" alt=\"Datenbank-Tabellenstruktur f\u00fcr CRUD-Beispiele\" width=\"864\" height=\"551\"><figcaption class=\"wp-caption-text\">Datenbank-Tabellenstruktur f\u00fcr CRUD-Beispiele<\/figcaption><\/figure>\n<p>Du verwendest die <a href=\"https:\/\/pydantic-docs.helpmanual.io\/\" target=\"_blank\" rel=\"noopener noreferrer\">pydantic<\/a>-Bibliothek, um Datenvalidierung und Einstellungsmanagement mit Python-Typ-Annotationen durchzuf\u00fchren. F\u00fcr diesen Lehrgang deklarierst du die Form deiner Daten als Klassen mit Attributen.<\/p>\n<p>In diesem Tutorium wird die In-Memory-Datenbank verwendet. Dies dient dazu, dir einen schnellen Einstieg in die Nutzung von FastAPI f\u00fcr die Erstellung deiner APIs zu erm\u00f6glichen. F\u00fcr die Produktion kannst du jedoch jede beliebige Datenbank verwenden, z. B. <a href=\"https:\/\/kinsta.com\/de\/blog\/was-ist-postgresql\/\">PostgreSQL<\/a>, <a href=\"https:\/\/kinsta.com\/de\/blog\/was-ist-mysql\/\">MySQL<\/a>, <a href=\"https:\/\/kinsta.com\/de\/blog\/mysql-vs-sqlite\/#what-is-sqlite\">SQLite<\/a> oder sogar Oracle.<\/p>\n<h3>Erstellen der App<\/h3>\n<p>Du beginnst mit der Erstellung deines Benutzermodells. Das Benutzermodell wird die folgenden Attribute haben:<\/p>\n<ul>\n<li><code>id<\/code>: Ein Universal Unique Identifier (UUID)<\/li>\n<li><code>first_name<\/code>: Der erste Name des Benutzers<\/li>\n<li><code>last_name<\/code>: Der Nachname des Nutzers<\/li>\n<li><code>gender<\/code>: Das Geschlecht des Benutzers<\/li>\n<li><code>roles<\/code>das ist eine Liste mit den Rollen <code>admin<\/code> und <code>user<\/code><\/li>\n<\/ul>\n<p>Erstelle zun\u00e4chst eine neue Datei namens <strong>models.py<\/strong> in deinem Arbeitsverzeichnis und f\u00fcge dann den folgenden Code in <strong>models.py<\/strong> ein, um dein Modell zu erstellen:<\/p>\n<pre><code class=\"language-python\">\n# models.py\nfrom typing import List, Optional\nfrom uuid import UUID, uuid4\nfrom pydantic import BaseModel\nfrom enum import Enum\nfrom pydantic import BaseModel\nclass Gender(str, Enum):\n male = \"male\"\n female = \"female\"\nclass Role(str, Enum):\n admin = \"admin\"\n user = \"user\"\nclass User(BaseModel):\n id: Optional[UUID] = uuid4()\n first_name: str\n last_name: str\n gender: Gender\n roles: List[Role]\n<\/code><\/pre>\n<p>Im obigen Code:<\/p>\n<ul>\n<li>Deine Klasse <code>User<\/code> erweitert <code>BaseModel<\/code>, die dann von <code>pydantic<\/code> importiert wird.<\/li>\n<li>Du hast die Attribute des Benutzers definiert, wie oben beschrieben.<\/li>\n<\/ul>\n<p>Der n\u00e4chste Schritt ist die Erstellung deiner Datenbank. Ersetze den Inhalt deiner Datei <strong>main.py<\/strong> durch den folgenden Code:<\/p>\n<pre><code class=\"language-python\">\n# main.py\nfrom typing import List\nfrom uuid import uuid4\nfrom fastapi import FastAPI\nfrom models import Gender, Role, User\napp = FastAPI()\ndb: List[User] = [\n User(\n id=uuid4(),\n first_name=\"John\",\n last_name=\"Doe\",\n gender=Gender.male,\n roles=[Role.user],\n ),\n User(\n id=uuid4(),\n first_name=\"Jane\",\n last_name=\"Doe\",\n gender=Gender.female,\n roles=[Role.user],\n ),\n User(\n id=uuid4(),\n first_name=\"James\",\n last_name=\"Gabriel\",\n gender=Gender.male,\n roles=[Role.user],\n ),\n User(\n id=uuid4(),\n first_name=\"Eunit\",\n last_name=\"Eunit\",\n gender=Gender.male,\n roles=[Role.admin, Role.user],\n ),\n]\n<\/code><\/pre>\n<p>In <strong>main.py<\/strong>:<\/p>\n<ul>\n<li>Du hast <code>db<\/code> mit einem Typ von <code>List<\/code> initialisiert und das Modell <code>User<\/code> \u00fcbergeben<\/li>\n<li>Du hast eine In-Memory-Datenbank mit vier Benutzern erstellt, jeder mit den erforderlichen Attributen wie <code>first_name<\/code>, <code>last_name<\/code>, <code>gender<\/code> und <code>roles<\/code>. Dem Benutzer <code>Eunit<\/code> werden die Rollen <code>admin<\/code> und <code>user<\/code> zugewiesen, w\u00e4hrend den anderen drei Benutzern nur die Rolle <code>user<\/code> zugewiesen wird.<\/li>\n<\/ul>\n<h3>Datenbankeintr\u00e4ge lesen<\/h3>\n<p>Nachdem du deine In-Memory-Datenbank erfolgreich eingerichtet und mit Benutzern gef\u00fcllt hast, musst du nun einen Endpunkt einrichten, der eine Liste aller Benutzer zur\u00fcckgibt. Hier kommt die FastAPI ins Spiel.<\/p>\n<p>F\u00fcge in deiner Datei <strong>main.py<\/strong> den folgenden Code direkt unter deinem Endpunkt <code>Hello World<\/code> ein:<\/p>\n<pre><code class=\"language-python\">\n# main.py\n @app.get(\"\/api\/v1\/users\")\n async def get_users():\n return db\n<\/code><\/pre>\n<p>Dieser Code definiert den Endpunkt <code>\/api\/v1\/users<\/code> und erstellt eine asynchrone Funktion, <code>get_users<\/code>, die den gesamten Inhalt der Datenbank, <code>db<\/code>, zur\u00fcckgibt.<\/p>\n<p>Speichere deine Datei und du kannst deinen Benutzerendpunkt testen. F\u00fchre den folgenden Befehl in deinem Terminal aus, um den API-Server zu starten:<\/p>\n<pre><code class=\"language-bash\">$ uvicorn main:app --reload<\/code><\/pre>\n<p>Navigiere in deinem Browser zu <code>http:\/\/localhost:8000\/api\/v1\/users<\/code>. Du solltest eine Liste aller deiner Nutzer\/innen erhalten, wie unten zu sehen:<\/p>\n<figure style=\"width: 685px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/11\/fastapi-results-read-request.png\" alt=\"Benutzerdaten, die durch eine FastAPI-Datenbank-Leseanfrage abgerufen wurden\" width=\"685\" height=\"1029\"><figcaption class=\"wp-caption-text\">Benutzerdaten, die durch eine FastAPI-Datenbank-Leseanfrage abgerufen wurden<\/figcaption><\/figure>\n<p>In diesem Stadium wird deine Datei <strong>main.py<\/strong> wie folgt aussehen:<\/p>\n<pre><code class=\"language-python\">\n# main.py\nfrom typing import List\nfrom uuid import uuid4\nfrom fastapi import FastAPI\nfrom models import Gender, Role, User\napp = FastAPI()\ndb: List[User] = [\n User(\n id=uuid4(),\n first_name=\"John\",\n last_name=\"Doe\",\n gender=Gender.male,\n roles=[Role.user],\n ),\n User(\n id=uuid4(),\n first_name=\"Jane\",\n last_name=\"Doe\",\n gender=Gender.female,\n roles=[Role.user],\n ),\n User(\n id=uuid4(),\n first_name=\"James\",\n last_name=\"Gabriel\",\n gender=Gender.male,\n roles=[Role.user],\n ),\n User(\n id=uuid4(),\n first_name=\"Eunit\",\n last_name=\"Eunit\",\n gender=Gender.male,\n roles=[Role.admin, Role.user],\n ),\n]\n@app.get(\"\/\")\nasync def root():\n return {\"Hello\": \"World\",}\n@app.get(\"\/api\/v1\/users\")\nasync def get_users():\n return db\n<\/code><\/pre>\n<h3>Datenbankeintr\u00e4ge erstellen<\/h3>\n<p>Im n\u00e4chsten Schritt musst du einen Endpunkt erstellen, um einen neuen Benutzer in deiner Datenbank anzulegen. F\u00fcge den folgenden Ausschnitt in deine <strong>main.py<\/strong>-Datei ein:<\/p>\n<pre><code class=\"language-python\">\n# main.py\n@app.post(\"\/api\/v1\/users\")\nasync def create_user(user: User):\n db.append(user)\n return {\"id\": user.id}\n<\/code><\/pre>\n<p>In diesem Schnipsel hast du den Endpunkt f\u00fcr die Anmeldung eines neuen Benutzers definiert und den <code>@app.post<\/code> Dekorator verwendet, um eine <code>POST<\/code> Methode zu erstellen.<\/p>\n<p>Au\u00dferdem hast du die Funktion <code>create_user<\/code> erstellt, die <code>user<\/code> des Modells <code>User<\/code> akzeptiert, und das neu erstellte <code>user<\/code> an die Datenbank <code>db<\/code> angeh\u00e4ngt (hinzugef\u00fcgt). Zum Schluss gibt der Endpunkt ein JSON-Objekt mit den Daten des neu angelegten Benutzers <code>id<\/code> zur\u00fcck.<\/p>\n<p>Du musst die automatische API-Dokumentation von FastAPI verwenden, um deinen Endpunkt zu testen, wie oben gezeigt. Das liegt daran, dass du mit dem Webbrowser keine Post-Anfrage stellen kannst. Navigiere zu <code>http:\/\/localhost:8000\/docs<\/code>, um mit der von <a href=\"https:\/\/github.com\/swagger-api\/swagger-ui\">SwaggerUI<\/a> bereitgestellten Dokumentation zu testen.<\/p>\n<figure style=\"width: 685px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/11\/fastapi-parameters-post-request.png\" alt=\"Parameter f\u00fcr eine FastAPI POST-Anfrage\" width=\"685\" height=\"1029\"><figcaption class=\"wp-caption-text\">Parameter f\u00fcr eine FastAPI POST-Anfrage<\/figcaption><\/figure>\n<h3>Datenbankeintr\u00e4ge l\u00f6schen<\/h3>\n<p>Da du eine CRUD-Anwendung entwickelst, muss deine Anwendung die M\u00f6glichkeit haben, eine bestimmte Ressource zu <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Methods\/DELETE\">l\u00f6schen<\/a>. In diesem Tutorial wirst du einen Endpunkt zum L\u00f6schen eines Benutzers erstellen.<\/p>\n<p>F\u00fcge den folgenden Code in deine Datei <strong>main.py<\/strong> ein:<\/p>\n<pre><code class=\"language-python\">\n# main.py\nfrom uuid import UUID\nfrom fastapi HTTPException\n@app.delete(\"\/api\/v1\/users\/{id}\")\nasync def delete_user(id: UUID):\nfor user in db:\n if user.id == id:\n db.remove(user)\n return\nraise HTTPException(\n status_code=404, detail=f\"Delete user failed, id {id} not found.\"\n )\n<\/code><\/pre>\n<p>Hier siehst du Zeile f\u00fcr Zeile, wie der Code funktioniert:<\/p>\n<ul>\n<li><code>@app.delete(\"\/api\/v1\/users\/{id}\")<\/code>: Du hast den Delete-Endpunkt mit dem <code>@app.delete()<\/code> Dekorator erstellt. Der Pfad ist immer noch <code>\/api\/v1\/users\/{id}<\/code>, aber dann ruft er die <code>id<\/code> ab, die eine Pfadvariable ist, die der ID des Benutzers entspricht.<\/li>\n<li><code>async def delete_user(id: UUID):<\/code>: Erstellt die Funktion <code>delete_user<\/code>, die die <code>id<\/code> aus der URL abruft.<\/li>\n<li><code>for user in db:<\/code>: Damit wird die App angewiesen, eine Schleife durch die Benutzer in der Datenbank zu ziehen und zu pr\u00fcfen, ob die \u00fcbergebene <code>id<\/code> mit einem Benutzer in der Datenbank \u00fcbereinstimmt.<\/li>\n<li><code>db.remove(user)<\/code>: Wenn die <code>id<\/code> mit einem Benutzer \u00fcbereinstimmt, wird dieser gel\u00f6scht; andernfalls wird eine <code>HTTPException<\/code> mit dem <a href=\"https:\/\/kinsta.com\/de\/blog\/http-statuscodes\/\">Statuscode<\/a> 404 ausgegeben.<\/li>\n<\/ul>\n<figure style=\"width: 594px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/11\/fastapi-parameters-delete-request.png\" alt=\"Parameter f\u00fcr eine FastAPI DELETE-Anfrage\" width=\"594\" height=\"1030\"><figcaption class=\"wp-caption-text\">Parameter f\u00fcr eine FastAPI DELETE-Anfrage<\/figcaption><\/figure>\n<h3>Datenbankeintr\u00e4ge aktualisieren<\/h3>\n<p>Du wirst einen Endpunkt erstellen, um die Daten eines Benutzers zu aktualisieren. Zu den Details, die aktualisiert werden k\u00f6nnen, geh\u00f6ren die folgenden Parameter: <code>first_name<\/code>, <code>last_name<\/code>, und <code>roles<\/code>.<\/p>\n<p>F\u00fcge in deiner Datei <strong>models.py<\/strong> den folgenden Code unter deinem Modell <code>User<\/code> ein, also nach der Klasse <code>User(BaseModel):<\/code>:<\/p>\n<pre><code class=\"language-python\"> # models.py\n class UpdateUser(BaseModel):\n first_name: Optional[str]\n last_name: Optional[str]\n roles: Optional[List[Role]]\n<\/code><\/pre>\n<p>In diesem Schnipsel erweitert die Klasse <code>UpdateUser<\/code> <code>BaseModel<\/code> . Dann legst du fest, dass die aktualisierbaren Benutzerparameter, wie <code>first_name<\/code>, <code>last_name<\/code> und <code>roles<\/code>, optional sind.<\/p>\n<p>Jetzt erstellst du einen Endpunkt, um die Daten eines bestimmten Benutzers zu aktualisieren. F\u00fcge in deiner Datei <strong>main.py<\/strong> den folgenden Code nach dem Dekorator <code>@app.delete<\/code> ein:<\/p>\n<pre><code class=\"language-python\"># main.py\n@app.put(\"\/api\/v1\/users\/{id}\")\nasync def update_user(user_update: UpdateUser, id: UUID):\n for user in db:\n if user.id == id:\n if user_update.first_name is not None:\n user.first_name = user_update.first_name\n if user_update.last_name is not None:\n user.last_name = user_update.last_name\n if user_update.roles is not None:\n user.roles = user_update.roles\n return user.id\n raise HTTPException(status_code=404, detail=f\"Could not find user with id: {id}\")\n<\/code><\/pre>\n<p>Im obigen Code hast du Folgendes getan:<\/p>\n<ul>\n<li>Erstellt <code>@app.put(\"\/api\/v1\/users\/{id}\")<\/code>, den Aktualisierungsendpunkt. Er hat einen variablen Parameter <code>id<\/code>, der der ID des Benutzers entspricht.<\/li>\n<li>Erstelle eine Methode namens <code>update_user<\/code>, die die Klasse <code>UpdateUser<\/code> und <code>id<\/code> aufnimmt.<\/li>\n<li>\u00dcberpr\u00fcfe in einer <code>for<\/code> -Schleife, ob der Benutzer, der mit dem \u00fcbergebenen <code>id<\/code> verbunden ist, in der Datenbank vorhanden ist.<\/li>\n<li>\u00dcberpr\u00fcft, ob einer der Parameter des Benutzers <code>is not None<\/code> (nicht null) ist. Wenn ein Parameter, wie <code>first_name<\/code>, <code>last_name<\/code> oder <code>roles<\/code>, nicht null ist, wird er aktualisiert.<\/li>\n<li>Wenn der Vorgang erfolgreich war, wird die Benutzer-ID zur\u00fcckgegeben.<\/li>\n<li>Wenn der Benutzer nicht gefunden wurde, wird eine <code>HTTPException<\/code> Ausnahme mit dem Statuscode 404 und der Meldung <code>Could not find user with id: {id}<\/code> ausgel\u00f6st.<\/li>\n<\/ul>\n<p>Um diesen Endpunkt zu testen, stelle sicher, dass dein Uvicorn-Server l\u00e4uft. Wenn er nicht l\u00e4uft, gib diesen Befehl ein:<\/p>\n<pre><code class=\"language-bash\">uvicorn main:app --reload<\/code><\/pre>\n<p>Unten siehst du einen Screenshot des Tests.<\/p>\n<figure style=\"width: 593px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/11\/fastapi-parameters-update-request.png\" alt=\"Parameter f\u00fcr eine FastAPI UPDATE Anfrage\" width=\"593\" height=\"954\"><figcaption class=\"wp-caption-text\">Parameter f\u00fcr eine FastAPI UPDATE Anfrage<\/figcaption><\/figure>\n\n<h2>Zusammenfassung<\/h2>\n<p>In diesem Tutorial hast du das FastAPI-Framework f\u00fcr Python kennengelernt und selbst gesehen, wie schnell du eine FastAPI-gest\u00fctzte Anwendung zum Laufen bringen kannst. Du hast gelernt, wie du mit dem Framework CRUD-API-Endpunkte erstellst &#8211; also das Erstellen, Lesen, Aktualisieren und L\u00f6schen von Datenbankeintr\u00e4gen.<\/p>\n<p>Wenn du die Entwicklung deiner Webanwendung auf die n\u00e4chste Stufe heben willst, solltest du dir die Plattform von Kinsta f\u00fcr <a href=\"https:\/\/kinsta.com\/de\/changelog\/anwendungs-hosting-datenbank-hosting\/\">Application Hosting und Database Hosting<\/a> ansehen. Wie FastAPI ist auch sie einfach und leistungsstark.<\/p>\n<kinsta-video src=\"https:\/\/www.youtube.com\/watch?v=vmNem6wxfSQ\"><\/kinsta-video>\n","protected":false},"excerpt":{"rendered":"<p>FastAPI ist ein schnelles und leichtgewichtiges Web-Framework f\u00fcr die Erstellung moderner Anwendungsprogrammierschnittstellen mit Python 3.6 und h\u00f6her. In diesem Lernprogramm gehen wir die Grundlagen der Erstellung &#8230;<\/p>\n","protected":false},"author":270,"featured_media":56447,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[351,464,852,276],"topic":[974],"class_list":["post-56446","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-api","tag-python","tag-web-applications","tag-web-development","topic-python"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Eine App mit FastAPI f\u00fcr Python erstellen<\/title>\n<meta name=\"description\" content=\"Es hei\u00dft nicht umsonst &quot;fast&quot;! Hier erf\u00e4hrst du, was du \u00fcber FastAPI wissen musst, um mit Python schnell Programmierschnittstellen f\u00fcr Anwendungen zu erstellen.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/de\/blog\/fastapi\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Eine App mit FastAPI f\u00fcr Python erstellen\" \/>\n<meta property=\"og:description\" content=\"Es hei\u00dft nicht umsonst &quot;fast&quot;! Hier erf\u00e4hrst du, was du \u00fcber FastAPI wissen musst, um mit Python schnell Programmierschnittstellen f\u00fcr Anwendungen zu erstellen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/de\/blog\/fastapi\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/\" \/>\n<meta property=\"article:published_time\" content=\"2022-11-29T12:08:34+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-07-27T10:45:23+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2022\/11\/fastapi.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1460\" \/>\n\t<meta property=\"og:image:height\" content=\"730\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Emmanuel Uchenna\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Es hei\u00dft nicht umsonst &quot;fast&quot;! Hier erf\u00e4hrst du, was du \u00fcber FastAPI wissen musst, um mit Python schnell Programmierschnittstellen f\u00fcr Anwendungen zu erstellen.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2022\/11\/fastapi.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@Kinsta_DE\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_DE\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Emmanuel Uchenna\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"14\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/fastapi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/fastapi\/\"},\"author\":{\"name\":\"Emmanuel Uchenna\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/person\/8deb20857e9f90e6cc3c2426da8f343f\"},\"headline\":\"Eine App mit FastAPI f\u00fcr Python erstellen\",\"datePublished\":\"2022-11-29T12:08:34+00:00\",\"dateModified\":\"2023-07-27T10:45:23+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/fastapi\/\"},\"wordCount\":2165,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/de\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/fastapi\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2022\/11\/fastapi.jpg\",\"keywords\":[\"API\",\"Python\",\"web applications\",\"web development\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/de\/blog\/fastapi\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/fastapi\/\",\"url\":\"https:\/\/kinsta.com\/de\/blog\/fastapi\/\",\"name\":\"Eine App mit FastAPI f\u00fcr Python erstellen\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/de\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/fastapi\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/fastapi\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2022\/11\/fastapi.jpg\",\"datePublished\":\"2022-11-29T12:08:34+00:00\",\"dateModified\":\"2023-07-27T10:45:23+00:00\",\"description\":\"Es hei\u00dft nicht umsonst \\\"fast\\\"! Hier erf\u00e4hrst du, was du \u00fcber FastAPI wissen musst, um mit Python schnell Programmierschnittstellen f\u00fcr Anwendungen zu erstellen.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/fastapi\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/de\/blog\/fastapi\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/fastapi\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2022\/11\/fastapi.jpg\",\"contentUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2022\/11\/fastapi.jpg\",\"width\":1460,\"height\":730},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/fastapi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/de\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Python\",\"item\":\"https:\/\/kinsta.com\/de\/thema\/python\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Eine App mit FastAPI f\u00fcr Python erstellen\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/de\/#website\",\"url\":\"https:\/\/kinsta.com\/de\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Schnelle, sichere und hochwertige Hosting-L\u00f6sungen\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/de\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/de\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/de\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/de\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/\",\"https:\/\/x.com\/Kinsta_DE\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/person\/8deb20857e9f90e6cc3c2426da8f343f\",\"name\":\"Emmanuel Uchenna\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/ad8b6a83415f2708e437768feb16d3da?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/ad8b6a83415f2708e437768feb16d3da?s=96&d=mm&r=g\",\"caption\":\"Emmanuel Uchenna\"},\"description\":\"Emmanuel is an experienced, passionate, and enthusiastic software developer and technical writer with proven years of professional experience. He focuses on full-stack web development. He's fluent in ReactJS, JavaScript, VueJS, and NodeJS and familiar with industry-standard technologies such as Git, GitHub, and TDD. He helps individuals, businesses, and brands build responsive, accessible, beautiful, and intuitive websites to improve their online presence. He is also a technical writer for various websites and his own projects.\",\"url\":\"https:\/\/kinsta.com\/de\/blog\/author\/emmanueluchenna\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Eine App mit FastAPI f\u00fcr Python erstellen","description":"Es hei\u00dft nicht umsonst \"fast\"! Hier erf\u00e4hrst du, was du \u00fcber FastAPI wissen musst, um mit Python schnell Programmierschnittstellen f\u00fcr Anwendungen zu erstellen.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/de\/blog\/fastapi\/","og_locale":"de_DE","og_type":"article","og_title":"Eine App mit FastAPI f\u00fcr Python erstellen","og_description":"Es hei\u00dft nicht umsonst \"fast\"! Hier erf\u00e4hrst du, was du \u00fcber FastAPI wissen musst, um mit Python schnell Programmierschnittstellen f\u00fcr Anwendungen zu erstellen.","og_url":"https:\/\/kinsta.com\/de\/blog\/fastapi\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/","article_published_time":"2022-11-29T12:08:34+00:00","article_modified_time":"2023-07-27T10:45:23+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2022\/11\/fastapi.jpg","type":"image\/jpeg"}],"author":"Emmanuel Uchenna","twitter_card":"summary_large_image","twitter_description":"Es hei\u00dft nicht umsonst \"fast\"! Hier erf\u00e4hrst du, was du \u00fcber FastAPI wissen musst, um mit Python schnell Programmierschnittstellen f\u00fcr Anwendungen zu erstellen.","twitter_image":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2022\/11\/fastapi.jpg","twitter_creator":"@Kinsta_DE","twitter_site":"@Kinsta_DE","twitter_misc":{"Verfasst von":"Emmanuel Uchenna","Gesch\u00e4tzte Lesezeit":"14\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/de\/blog\/fastapi\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/de\/blog\/fastapi\/"},"author":{"name":"Emmanuel Uchenna","@id":"https:\/\/kinsta.com\/de\/#\/schema\/person\/8deb20857e9f90e6cc3c2426da8f343f"},"headline":"Eine App mit FastAPI f\u00fcr Python erstellen","datePublished":"2022-11-29T12:08:34+00:00","dateModified":"2023-07-27T10:45:23+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/de\/blog\/fastapi\/"},"wordCount":2165,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/de\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/de\/blog\/fastapi\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2022\/11\/fastapi.jpg","keywords":["API","Python","web applications","web development"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/de\/blog\/fastapi\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/de\/blog\/fastapi\/","url":"https:\/\/kinsta.com\/de\/blog\/fastapi\/","name":"Eine App mit FastAPI f\u00fcr Python erstellen","isPartOf":{"@id":"https:\/\/kinsta.com\/de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/de\/blog\/fastapi\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/de\/blog\/fastapi\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2022\/11\/fastapi.jpg","datePublished":"2022-11-29T12:08:34+00:00","dateModified":"2023-07-27T10:45:23+00:00","description":"Es hei\u00dft nicht umsonst \"fast\"! Hier erf\u00e4hrst du, was du \u00fcber FastAPI wissen musst, um mit Python schnell Programmierschnittstellen f\u00fcr Anwendungen zu erstellen.","breadcrumb":{"@id":"https:\/\/kinsta.com\/de\/blog\/fastapi\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/de\/blog\/fastapi\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/kinsta.com\/de\/blog\/fastapi\/#primaryimage","url":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2022\/11\/fastapi.jpg","contentUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2022\/11\/fastapi.jpg","width":1460,"height":730},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/de\/blog\/fastapi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/de\/"},{"@type":"ListItem","position":2,"name":"Python","item":"https:\/\/kinsta.com\/de\/thema\/python\/"},{"@type":"ListItem","position":3,"name":"Eine App mit FastAPI f\u00fcr Python erstellen"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/de\/#website","url":"https:\/\/kinsta.com\/de\/","name":"Kinsta\u00ae","description":"Schnelle, sichere und hochwertige Hosting-L\u00f6sungen","publisher":{"@id":"https:\/\/kinsta.com\/de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/de\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/","https:\/\/x.com\/Kinsta_DE","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/de\/#\/schema\/person\/8deb20857e9f90e6cc3c2426da8f343f","name":"Emmanuel Uchenna","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/kinsta.com\/de\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/ad8b6a83415f2708e437768feb16d3da?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/ad8b6a83415f2708e437768feb16d3da?s=96&d=mm&r=g","caption":"Emmanuel Uchenna"},"description":"Emmanuel is an experienced, passionate, and enthusiastic software developer and technical writer with proven years of professional experience. He focuses on full-stack web development. He's fluent in ReactJS, JavaScript, VueJS, and NodeJS and familiar with industry-standard technologies such as Git, GitHub, and TDD. He helps individuals, businesses, and brands build responsive, accessible, beautiful, and intuitive websites to improve their online presence. He is also a technical writer for various websites and his own projects.","url":"https:\/\/kinsta.com\/de\/blog\/author\/emmanueluchenna\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts\/56446","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/users\/270"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/comments?post=56446"}],"version-history":[{"count":12,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts\/56446\/revisions"}],"predecessor-version":[{"id":62434,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts\/56446\/revisions\/62434"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/56446\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/56446\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/56446\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/56446\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/56446\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/56446\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/56446\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/56446\/translations\/es"},{"embeddable":true,"hreflang":"sv","title":"Swedish","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/56446\/translations\/se"},{"embeddable":true,"hreflang":"da","title":"Danish","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/56446\/translations\/dk"},{"href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/56446\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/media\/56447"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/media?parent=56446"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/tags?post=56446"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/topic?post=56446"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}