{"id":48131,"date":"2022-11-29T13:09:47","date_gmt":"2022-11-29T12:09:47","guid":{"rendered":"https:\/\/kinqsta.com\/nl\/?p=48131&#038;preview=true&#038;preview_id=48131"},"modified":"2023-06-09T09:30:23","modified_gmt":"2023-06-09T07:30:23","slug":"fastapi","status":"publish","type":"post","link":"https:\/\/kinqsta.com\/nl\/blog\/fastapi\/","title":{"rendered":"Een app bouwen met FastAPI voor Python"},"content":{"rendered":"<p>FastAPI is een snel en lichtgewicht webframework voor het bouwen van moderne applicatieprogrammeer-interfaces met <a href=\"https:\/\/kinqsta.com\/nl\/blog\/python-object-oriented-programming\/\">Python<\/a> 3.6 en hoger. In deze tutorial lopen we door de basis van het bouwen van een app met FastAPI, en krijg je een idee waarom het is genomineerd als een van de <a href=\"https:\/\/www.infoworld.com\/article\/3637038\/the-best-open-source-software-of-2021.html#slide5\" target=\"_blank\" rel=\"noopener noreferrer\">beste open-source frameworks van 2021<\/a>.<\/p>\n<p>Als je eenmaal klaar bent om je eigen FastAPI apps te ontwikkelen, hoef je niet ver te zoeken naar een plek om ze te hosten. Kinsta&#8217;s <a href=\"https:\/\/sevalla.com\/application-hosting\/\">Applicatie Hosting<\/a> en <a href=\"https:\/\/sevalla.com\/database-hosting\/\">Database Hosting<\/a> diensten bieden een Platform as a Service dat enorm goed werkt met Python.<\/p>\n<p>Maar eerst is het tijd om de basics te leren.<\/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>Voordelen van FastAPI<\/h2>\n<p>Hieronder staan enkele van de voordelen die het <a href=\"https:\/\/fastapi.tiangolo.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">FastAPI framework<\/a>\u00a0aan een project toevoegt.<\/p>\n<ul>\n<li><strong>Snelheid:<\/strong> Zoals de naam al aangeeft, is FastAPI een zeer snel framework. Zijn snelheid is vergelijkbaar met die van <a href=\"https:\/\/docs.sevalla.com\/templates\/overview\">Go<\/a> en <a href=\"https:\/\/docs.sevalla.com\/templates\/overview\">Node.js<\/a>, die algemeen beschouwd worden als de snelste opties voor het bouwen van API&#8217;s.<\/li>\n<li><strong>Gemakkelijk te leren en te coderen:<\/strong> FastAPI heeft bijna alles wat je nodig hebt om een productieklare API te maken al bedacht. Als developer die FastAPI gebruikt, hoef je niet alles vanaf nul te coderen. Met slechts een paar regels code kun je een RESTful API klaar hebben voor deployment.<\/li>\n<li><strong>Uitgebreide documentatie:<\/strong> FastAPI maakt gebruik van de OpenAPI documentatiestandaarden, zodat documentatie dynamisch kan worden gegenereerd. Deze documentatie geeft gedetailleerde informatie over FastAPI&#8217;s endpoints, responses, parameters en returncodes.<\/li>\n<li><strong>API&#8217;s met minder bugs:<\/strong> FastAPI ondersteunt <a href=\"https:\/\/fastapi.tiangolo.com\/tutorial\/query-params-str-validations\/#add-more-validations\" target=\"_blank\" rel=\"noopener noreferrer\">aangepaste gegevensvalidatie<\/a>, waardoor developers API&#8217;s kunnen bouwen met minder bugs. De developers van FastAPI scheppen op dat het framework resulteert in minder door mensen veroorzaakte bugs &#8211; wel 40% minder.<\/li>\n<li><strong>Type hints:<\/strong> De types module werd ge\u00efntroduceerd in Python 3.5. Hiermee kun je de <code>type<\/code> van een variabele declaren. Wanneer het type van een variabele wordt gedeclared, kunnen IDE&#8217;s betere ondersteuning bieden en fouten nauwkeuriger voorspellen.<\/li>\n<\/ul>\n\n<h2>Zo begin je met FastAPI<\/h2>\n<p>Om deze tutorial te volgen en met FastAPI aan de slag te gaan, moet je eerst een paar dingen doen.<\/p>\n<p>Zorg ervoor dat je een teksteditor\/IDE voor programmeurs hebt, zoals <a href=\"https:\/\/code.visualstudio.com\/download\" target=\"_blank\" rel=\"noopener noreferrer\">Visual Studio Code<\/a>. Andere opties zijn <a href=\"https:\/\/kinqsta.com\/blog\/how-to-use-sublime-text\/\" rel=\"noopener\">Sublime Text<\/a> en <a href=\"https:\/\/www.espressoapp.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Espresso<\/a>.<\/p>\n<p>Het is gebruikelijk om je Python apps en hun instanties in virtuele omgevingen te laten draaien. Virtuele omgevingen laten verschillende pakketsets en configuraties tegelijkertijd draaien, en voorkomen conflicten door incompatibele pakketversies.<\/p>\n<p>Om een virtuele omgeving aan te maken, open <a href=\"https:\/\/kinqsta.com\/nl\/blog\/python-commandos\/#introduction-to-the-cli\">je terminal<\/a> en voer je dit commando uit:<\/p>\n<pre><code class=\"language-bash\">$ python3 -m venv env<\/code><\/pre>\n<p>Ook moet je de virtuele omgeving activeren. Het commando om dat te doen varieert afhankelijk van het besturingssysteem en de shell die je gebruikt. Hier zijn enkele CLI activeringsvoorbeelden voor een aantal omgevingen:<\/p>\n<pre><code class=\"language-bash\"># Op Unix of MacOS (bash shell): \n\/path\/to\/venv\/bin\/activate\n\n# Op Unix of MacOS (csh shell):\n\/path\/to\/venv\/bin\/activate.csh\n\n# Op Unix of MacOS (fish shell):\n\/path\/to\/venv\/bin\/activate.fish\n\n# Op Windows (command prompt):\npathtovenvScriptsactivate.bat\n\n# Op Windows (PowerShell):\npathtovenvScriptsActivate.ps1\n<\/code><\/pre>\n<p>(Sommige Python bewuste IDE&#8217;s kunnen ook geconfigureerd worden om de huidige virtuele omgeving te activeren.)<\/p>\n<p>Installeer nu FastAPI:<\/p>\n<pre><code class=\"language-bash\">$ pip3 install fastapi<\/code><\/pre>\n<p>FastAPI is een framework voor het bouwen van API&#8217;s, maar om je API&#8217;s te testen heb je een lokale webserver nodig. <a href=\"https:\/\/www.uvicorn.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">Uvicorn<\/a> is een bliksemsnelle Asynchronous Server Gateway Interface (ASGI) webserver voor Python die geweldig is voor development. Om Uvicorn te installeren voer je dit commando uit:<\/p>\n<pre><code class=\"language-bash\">$ pip3 install \"uvicorn[standard]\"<\/code><\/pre>\n<p>Na een succesvolle installatie maak je een bestand aan met de naam <strong>main.py<\/strong> in de werkdirectory van je project. Dit bestand wordt het beginpunt van je applicatie.<\/p>\n<figure style=\"width: 1151px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2022\/11\/fastapi-project-layout.png\" alt=\"De layout van een FastAPI project binnen een IDE.\" width=\"1151\" height=\"475\"><figcaption class=\"wp-caption-text\">Weergave van een basic FastAPI project binnen een IDE.<\/figcaption><\/figure>\n<h3>Een kort FastAPI voorbeeld<\/h3>\n<p>Je gaat je FastAPI installatie testen door snel een voorbeeld eindpunt op te zetten. Plak in je <strong>main.py<\/strong> bestand de volgende code en sla het bestand op:<\/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>Bovenstaand codefragment maakt een basic FastAPI endpoint aan. Hieronder staat een samenvatting van wat elke regel doet:<\/p>\n<ul>\n<li><code>from fastapi import FastAPI<\/code>: De functionaliteit voor je API wordt geleverd door de FastAPI Python class.<\/li>\n<li><code>app = FastAPI()<\/code>: Hiermee wordt een FastAPI instantie gecre\u00eberd.<\/li>\n<li><code>@app.get(\"\/\")<\/code>: Dit is een python decorator die FastAPI specificeert dat de functie eronder verantwoordelijk is voor de verzoekafhandeling.<\/li>\n<li><code>@app.get(\"\/\")<\/code>: Dit is een decorator die de route specificeert. Dit cre\u00ebert een <code>GET<\/code> methode op de route van de site. Het resultaat wordt dan teruggegeven door de ingepakte functie.<\/li>\n<li>Andere mogelijke operaties die gebruikt worden om te communiceren zijn <code>@app.post()<\/code>, <code>@app.put()<\/code>, <code>@app.delete()<\/code>, <code>@app.options()<\/code>, <code>@app.head()<\/code>, <code>@app.patch()<\/code>, en <code>@app.trace()<\/code>.<\/li>\n<\/ul>\n<p>Voer in de files map het volgende commando in je terminal uit om de API server te starten:<\/p>\n<pre><code class=\"language-bash\">$ uvicorn main:app --reload<\/code><\/pre>\n<p>In dit commando is <code>main<\/code> de naam van je module. Het <code>app<\/code> object is een instantie van je applicatie, en wordt ge\u00efmporteerd in de ASGI server. De <code>--reload<\/code> flag vertelt de server om automatisch te herladen als je wijzigingen aanbrengt.<\/p>\n<p>Je zou zoiets als dit in je terminal moeten zien:<\/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>Navigeer in je browser naar <code>http:\/\/localhost:8000<\/code> om te bevestigen dat je API werkt. Je zou &#8220;Hello&#8221;: &#8220;World&#8221; als JSON object op de pagina moeten zien. Dit illustreert hoe eenvoudig het is om een API te maken met FastAPI. Je hoefde alleen maar een route te defini\u00ebren en je Python dictionary terug te geven, zoals te zien is op regel zes van het fargment hierboven.<\/p>\n<figure style=\"width: 900px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2022\/11\/fastapi-hello-world-in-browser.png\" alt=\"Een FastAPI Hello World applicatie die wordt uitgevoerd in een webbrowser.\" width=\"900\" height=\"340\"><figcaption class=\"wp-caption-text\">FastAPI Hello World applicatie in een webbrowser.<\/figcaption><\/figure>\n<h3>Type hints gebruiken<\/h3>\n<p>Als je Python gebruikt, ben je gewend om variabelen te annoteren met basisgegevenstypes als <code>int<\/code>, <code>str<\/code>, <code>float<\/code>, en <code>bool<\/code>. Vanaf Python versie 3.9 zijn echter geavanceerde gegevensstructuren ge\u00efntroduceerd. Hierdoor kun je werken met gegevensstructuren als <code>dictionaries<\/code>, <code>tuples<\/code>, en <code>lists<\/code>. Met de typehints van FastAPI kun je het schema van je gegevens structureren met behulp van <a href=\"https:\/\/pydantic-docs.helpmanual.io\/usage\/models\/\" target=\"_blank\" rel=\"noopener noreferrer\">pydantische<\/a> modellen en vervolgens de pydantische modellen gebruiken om typehints te maken en te profiteren van de geboden datavalidatie.<\/p>\n<p>In het onderstaande voorbeeld wordt het gebruik van typehints in Python gedemonstreerd met een eenvoudige maaltijdprijscalculator, <code>calculate_meal_fee<\/code>:<\/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>Merk op dat type hints niet veranderen hoe je code draait.<\/p>\n<h3>Interactieve API documentatie van FastAPI<\/h3>\n<p>FastAPI gebruikt <a href=\"https:\/\/github.com\/swagger-api\/swagger-ui\" target=\"_blank\" rel=\"noopener noreferrer\">Swagger UI<\/a> om automatisch interactieve API documentatie te bieden. Om toegang te krijgen, navigeer je naar <code>http:\/\/localhost:8000\/docs<\/code> en je ziet een scherm met al je endpoints, methoden en schema&#8217;s.<\/p>\n<figure style=\"width: 900px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2022\/11\/swagger-ui-fastapi-documentation-interface.png\" alt=\"Screenshot van de Swagger UI interface voor documentatie.\" width=\"900\" height=\"1013\"><figcaption class=\"wp-caption-text\">Swagger UI&#8217;s documentatie voor FastAPI.<\/figcaption><\/figure>\n<p>Deze automatische, browser gebaseerde API documentatie wordt geleverd door FastAPI, en je hoeft verder niets te doen om ervan te profiteren.<\/p>\n<p>Een alternatieve browser gebaseerde API documentatie, ook geleverd door FastAPI, is <a href=\"https:\/\/github.com\/Redocly\/redoc\" target=\"_blank\" rel=\"noopener noreferrer\">Redoc<\/a>. Om Redoc te openen, navigeer je naar <code>http:\/\/localhost:8000\/redoc<\/code>, waar je een lijst krijgt van je endpoints, de methoden en hun respectievelijke antwoorden.<\/p>\n<figure style=\"width: 900px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2022\/11\/redoc-fastapi-documentation-interface.png\" alt=\"Screenshot van de Redoc interface voor documentatie.\" width=\"900\" height=\"1112\"><figcaption class=\"wp-caption-text\">Redoc&#8217;s documentatie voor FastAPI.<\/figcaption><\/figure>\n<h3>Routes instellen in FastAPI<\/h3>\n<p>Met de decorator <code>@app<\/code> kun je de <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Methods\" target=\"_blank\" rel=\"noopener noreferrer\">methode<\/a> van de route specificeren, zoals <code>@app.get<\/code> of <code>@app.post<\/code>, en hij ondersteunt <code>GET<\/code>, <code>POST<\/code>, <code>PUT<\/code>, en <code>DELETE<\/code>, evenals de minder gebruikelijke opties, <code>HEAD<\/code>, <code>PATCH<\/code>, en <code>TRACE<\/code>.<\/p>\n<h2>Je app bouwen met FastAPI<\/h2>\n<p>In deze tutorial wordt het bouwen van een <a href=\"https:\/\/www.codecademy.com\/article\/what-is-crud\" target=\"_blank\" rel=\"noopener noreferrer\">CRUD<\/a> applicatie met FastAPI behandeld. De applicatie zal in staat zijn om:<\/p>\n<ul>\n<li>Een gebruiker aan te maken<\/li>\n<li>Een databaserecord van een gebruiker te lezen<\/li>\n<li>Een bestaande gebruiker te bijwerken<\/li>\n<li>Een bepaalde gebruiker te verwijderen<\/li>\n<\/ul>\n<p>Om deze CRUD operaties uit te voeren, zul je methoden cre\u00ebren die de API endpoints blootstellen. Het resultaat zal een in-memory database zijn die een lijst van gebruikers kan opslaan.<\/p>\n<figure style=\"width: 864px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2022\/11\/database-table-fastapi-crud-example.png\" alt=\"Schema van databasetabelstructuur voor CRUD voorbeelden.\" width=\"864\" height=\"551\"><figcaption class=\"wp-caption-text\">Databasetabelstructuur voor CRUD voorbeelden.<\/figcaption><\/figure>\n<p>Je zult de <a href=\"https:\/\/pydantic-docs.helpmanual.io\/\" target=\"_blank\" rel=\"noopener noreferrer\">pydantic<\/a> bibliotheek gebruiken om gegevensvalidatie en instellingenbeheer uit te voeren met behulp van Python type annotaties. Voor deze tutorial declare je de vorm van je gegevens als classes met attributen.<\/p>\n<p>Deze tutorial gebruikt de in-memory database. Dit is om je snel op weg te helpen met het gebruik van FastAPI om je API&#8217;s te bouwen. Voor productie kun je echter elke database naar keuze gebruiken, zoals <a href=\"https:\/\/kinqsta.com\/nl\/blog\/wat-is-postgresql\/\">PostgreSQL<\/a>, <a href=\"https:\/\/kinqsta.com\/nl\/blog\/wat-is-mysql\/\">MySQL<\/a>, <a href=\"https:\/\/kinqsta.com\/nl\/blog\/sqlite-vs-mysql\/#what-is-sqlite\">SQLite<\/a> of zelfs Oracle.<\/p>\n<h3>De app bouwen<\/h3>\n<p>Je begint met het maken van een gebruikersmodel. Het gebruikersmodel heeft de volgende attributen:<\/p>\n<ul>\n<li><code>id<\/code>: Een Universal Unique Identifier (UUID)<\/li>\n<li><code>first_name<\/code>: De voornaam van de gebruiker<\/li>\n<li><code>last_name<\/code>: De achternaam van de gebruiker<\/li>\n<li><code>gender<\/code>: Het geslacht van de gebruiker<\/li>\n<li><code>roles<\/code>, wat een lijst is met <code>admin<\/code> en <code>user<\/code> rollen<\/li>\n<\/ul>\n<p>Begin met het maken van een nieuw bestand met de naam <strong>models.py<\/strong> in je werkdirectory, en plak dan de volgende code in <strong>models.py<\/strong> om je model te maken:<\/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>In de bovenstaande code:<\/p>\n<ul>\n<li>Je <code>User<\/code> class breidt <code>BaseModel<\/code> uit, die dan ge\u00efmporteerd wordt uit <code>pydantic<\/code>.<\/li>\n<li>Je hebt de attributen van de gebruiker gedefinieerd, zoals hierboven besproken.<\/li>\n<\/ul>\n<p>De volgende stap is het aanmaken van je database. Vervang de inhoud van je <strong>main.py<\/strong> bestand door de volgende 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>Je initialiseerde <code>db<\/code> met een type <code>List<\/code>, en gaf het model <code>User<\/code> door<\/li>\n<li>Je maakte een in-memory database met vier gebruikers, elk met de vereiste attributen zoals <code>first_name<\/code>, <code>last_name<\/code>, <code>gender<\/code>, en <code>roles<\/code>. De gebruiker <code>Eunit<\/code> krijgt de rollen van <code>admin<\/code> en <code>user<\/code>, terwijl de andere drie gebruikers alleen de rol van <code>user<\/code> toegewezen krijgen.<\/li>\n<\/ul>\n<h3>Databaserecords lezen<\/h3>\n<p>Je hebt met succes je in-memory database opgezet en gevuld met gebruikers, dus de volgende stap is het opzetten van een eindpunt dat een lijst van alle gebruikers teruggeeft. Hier komt FastAPI om de hoek kijken.<\/p>\n<p>Plak in je <strong>main.py<\/strong> bestand de volgende code net onder je <code>Hello World<\/code> eindpunt:<\/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>Deze code definieert het endpoint <code>\/api\/v1\/users<\/code>, en maakt een async functie, <code>get_users<\/code>, die alle inhoud van de database retourneert, <code>db<\/code>.<\/p>\n<p>Sla je bestand op, en je kunt je gebruikersendpoint testen. Voer het volgende commando uit in je terminal om de API server te starten:<\/p>\n<pre><code class=\"language-bash\">$ uvicorn main:app --reload<\/code><\/pre>\n<p>Navigeer in je browser naar <code>http:\/\/localhost:8000\/api\/v1\/users<\/code>. Dit zou een lijst van al je gebruikers moeten opleveren, zoals hieronder te zien is:<\/p>\n<figure style=\"width: 685px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2022\/11\/fastapi-results-read-request.png\" alt=\"Screenshot van gebruikersgegevens geretourneerd door FastAPI GET verzoek.\" width=\"685\" height=\"1029\"><figcaption class=\"wp-caption-text\">Gebruikersgegevens opgehaald door FastAPI database read verzoek.<\/figcaption><\/figure>\n<p>In dit stadium ziet je <strong>main.py<\/strong> bestand er als volgt uit:<\/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>Databaserecords aanmaken<\/h3>\n<p>De volgende stap is het maken van een endpoint om een nieuwe gebruiker in je database aan te maken. Plak het volgende fragment in je <strong>main.py<\/strong> bestand:<\/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 dit fragment heb je het endpoint gedefinieerd om een nieuwe gebruiker in te dienen en gebruik gemaakt van de <code>@app.post<\/code> decorator om een <code>POST<\/code> methode te maken.<\/p>\n<p>Je maakte ook de functie <code>create_user<\/code>, die <code>user<\/code> van het <code>User<\/code> model accepteert, en voegde de nieuw aangemaakte <code>user<\/code> toe aan de database, <code>db<\/code>. Tenslotte retourneert het eindpunt een JSON object van de nieuw aangemaakte gebruiker <code>id<\/code>.<\/p>\n<p>Je zult de automatische API documentatie van FastAPI moeten gebruiken om je endpoint te testen, zoals hierboven te zien is. Dit komt omdat je geen post verzoek kunt doen met de webbrowser. Navigeer naar <code>http:\/\/localhost:8000\/docs<\/code> om te testen met behulp van de door <a href=\"https:\/\/github.com\/swagger-api\/swagger-ui\">SwaggerUI<\/a> geleverde documentatie.<\/p>\n<figure style=\"width: 685px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2022\/11\/fastapi-parameters-post-request.png\" alt=\"Screenshot met parameters voor FastAPI POST verzoek.\" width=\"685\" height=\"1029\"><figcaption class=\"wp-caption-text\">Parameters voor een FastAPI POST verzoek.<\/figcaption><\/figure>\n<h3>Databasercords verwijderen<\/h3>\n<p>Omdat je een CRUD app bouwt, moet je applicatie de mogelijkheid hebben om een gespecificeerde resource te <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Methods\/DELETE\">verwijderen<\/a>. Voor deze tutorial maak je een endpoint om een gebruiker te verwijderen.<\/p>\n<p>Plak de volgende code in je <strong>main.py<\/strong> bestand:<\/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 is een regel-voor-regel uitleg van hoe die code werkt:<\/p>\n<ul>\n<li><code>@app.delete(\"\/api\/v1\/users\/{id}\")<\/code>: Je hebt het delete endpoint gemaakt met de <code>@app.delete()<\/code> decorator. Het pad is nog steeds <code>\/api\/v1\/users\/{id}<\/code>, maar dan haalt het <code>id<\/code> op, wat een padvariabele is die overeenkomt met het id van de gebruiker.<\/li>\n<li><code>async def delete_user(id: UUID):<\/code>: Cre\u00ebert de <code>delete_user<\/code> functie, die de <code>id<\/code> ophaalt uit de URL.<\/li>\n<li><code>for user in db:<\/code>: Dit vertelt de app om door de gebruikers in de database te lopen, en te controleren of de doorgegeven <code>id<\/code> overeenkomt met een gebruiker in de database.<\/li>\n<li><code>db.remove(user)<\/code>: Als de <code>id<\/code> overeenkomt met een gebruiker, wordt de gebruiker verwijderd; anders wordt een <code>HTTPException<\/code> met een <a href=\"https:\/\/kinqsta.com\/nl\/blog\/http-status-codes\/\">statuscode<\/a> van 404 opgehaald.<\/li>\n<\/ul>\n<figure style=\"width: 594px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2022\/11\/fastapi-parameters-delete-request.png\" alt=\"Screenshot met parameters voor FastAPI DELETE verzoek.\" width=\"594\" height=\"1030\"><figcaption class=\"wp-caption-text\">Parameters voor een FastAPI DELETE verzoek.<\/figcaption><\/figure>\n<h3>Databaserecords bijwerken<\/h3>\n<p>Je gaat een endpoint maken om de gegevens van een gebruiker bij te werken. De details die kunnen worden bijgewerkt zijn de volgende parameters: <code>first_name<\/code>, <code>last_name<\/code>, en <code>roles<\/code>.<\/p>\n<p>Plak in je <strong>models.py<\/strong> bestand de volgende code onder je <code>User<\/code> model, dat is na de <code>User(BaseModel):<\/code> klasse:<\/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 dit fragment is de class <code>UpdateUser<\/code> een uitbreiding van <code>BaseModel<\/code>. Je stelt dan de updatebare gebruikersparameters, zoals <code>first_name<\/code>, <code>last_name<\/code>, en <code>roles<\/code>, in als optioneel.<\/p>\n<p>Nu maak je een endpoint om de gegevens van een bepaalde gebruiker bij te werken. Plak in je <strong>main.py<\/strong> bestand de volgende code na <code>@app.delete<\/code> decorator:<\/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>In bovenstaande code heb je het volgende gedaan:<\/p>\n<ul>\n<li><code>@app.put(\"\/api\/v1\/users\/{id}\")<\/code> aangemaakt, het update endpoint. Het heeft een variabele parameter <code>id<\/code> die overeenkomt met het id van de gebruiker.<\/li>\n<li>Een methode aangemaakt genaamd <code>update_user<\/code>, die de class<code>UpdateUser<\/code> en <code>id<\/code> aanneemt.<\/li>\n<li>Een loop <code>for<\/code> gebruikt om te controleren of de gebruiker geassocieerd met de doorgegeven <code>id<\/code> in de database zit.<\/li>\n<li>Gecontroleerd of een van de parameters van de gebruiker <code>is not None<\/code> (niet null) is. Als een parameter, zoals <code>first_name<\/code>, <code>last_name<\/code>, of <code>roles<\/code>, niet null is, dan wordt hij bijgewerkt.<\/li>\n<li>Als de operatie succesvol is, wordt het gebruikers-id teruggegeven.<\/li>\n<li>Als de gebruiker niet werd gelokaliseerd, wordt een <code>HTTPException<\/code> uitzondering met een statuscode van 404 en een bericht van <code>Could not find user with id: {id}<\/code> opgeworpen.<\/li>\n<\/ul>\n<p>Om dit endpoint te testen, zorg je ervoor dat je Uvicorn server draait. Als hij niet draait, voer dan dit commando in:<\/p>\n<pre><code class=\"language-bash\">uvicorn main:app --reload<\/code><\/pre>\n<p>Hieronder staat een screenshot van de test.<\/p>\n<figure style=\"width: 593px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2022\/11\/fastapi-parameters-update-request.png\" alt=\"Screenshot met parameters voor een UPDATE verzoek.\" width=\"593\" height=\"954\"><figcaption class=\"wp-caption-text\">Parameters voor een FastAPI UPDATE verzoek.<\/figcaption><\/figure>\n\n<h2>Samenvatting<\/h2>\n<p>In deze tutorial heb je geleerd over het FastAPI framework voor Python en zelf gezien hoe snel je een door FastAPI aangedreven applicatie aan de praat kunt krijgen. Je hebt geleerd hoe je CRUD API endpoints kunt bouwen met het framework &#8211; databaserecords maken, lezen, bijwerken en verwijderen.<\/p>\n<p>Als je nu je webappontwikkeling naar het volgende niveau wilt brengen, kijk dan eens naar Kinsta&#8217;s platform voor <a href=\"https:\/\/kinqsta.com\/nl\/changelog\/applicatie-database-hosting\/\">Applicatie Hosting en Database Hosting<\/a>. Net als FastAPI zijn ze enorm krachtig en eenvoudig in gebruik.<\/p>\n<kinsta-video src=\"https:\/\/www.youtube.com\/watch?v=vmNem6wxfSQ\"><\/kinsta-video>\n","protected":false},"excerpt":{"rendered":"<p>FastAPI is een snel en lichtgewicht webframework voor het bouwen van moderne applicatieprogrammeer-interfaces met Python 3.6 en hoger. In deze tutorial lopen we door de basis &#8230;<\/p>\n","protected":false},"author":270,"featured_media":48348,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[324,435,748,406],"topic":[870],"class_list":["post-48131","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>Een app bouwen met FastAPI voor Python - Kinsta\u00ae<\/title>\n<meta name=\"description\" content=\"Het heet niet voor niets &quot;fast&quot;! Dit is wat je moet weten over FastAPI om snel interfaces voor applicatieprogrammering te bouwen met behulp van Python.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinqsta.com\/nl\/blog\/fastapi\/\" \/>\n<meta property=\"og:locale\" content=\"nl_NL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Een app bouwen met FastAPI voor Python\" \/>\n<meta property=\"og:description\" content=\"Het heet niet voor niets &quot;fast&quot;! Dit is wat je moet weten over FastAPI om snel interfaces voor applicatieprogrammering te bouwen met behulp van Python.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinqsta.com\/nl\/blog\/fastapi\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Kinsta-Nederland-476213452787823\/\" \/>\n<meta property=\"article:published_time\" content=\"2022-11-29T12:09:47+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-06-09T07:30:23+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinqsta.com\/nl\/wp-content\/uploads\/sites\/7\/2022\/11\/fastapi.jpeg\" \/>\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=\"Het heet niet voor niets &quot;fast&quot;! Dit is wat je moet weten over FastAPI om snel interfaces voor applicatieprogrammering te bouwen met behulp van Python.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinqsta.com\/nl\/wp-content\/uploads\/sites\/7\/2022\/11\/fastapi.jpeg\" \/>\n<meta name=\"twitter:creator\" content=\"@Kinsta_NL\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_NL\" \/>\n<meta name=\"twitter:label1\" content=\"Geschreven door\" \/>\n\t<meta name=\"twitter:data1\" content=\"Emmanuel Uchenna\" \/>\n\t<meta name=\"twitter:label2\" content=\"Geschatte leestijd\" \/>\n\t<meta name=\"twitter:data2\" content=\"14 minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinqsta.com\/nl\/blog\/fastapi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinqsta.com\/nl\/blog\/fastapi\/\"},\"author\":{\"name\":\"Emmanuel Uchenna\",\"@id\":\"https:\/\/kinqsta.com\/nl\/#\/schema\/person\/8deb20857e9f90e6cc3c2426da8f343f\"},\"headline\":\"Een app bouwen met FastAPI voor Python\",\"datePublished\":\"2022-11-29T12:09:47+00:00\",\"dateModified\":\"2023-06-09T07:30:23+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinqsta.com\/nl\/blog\/fastapi\/\"},\"wordCount\":2191,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinqsta.com\/nl\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinqsta.com\/nl\/blog\/fastapi\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinqsta.com\/nl\/wp-content\/uploads\/sites\/7\/2022\/11\/fastapi.jpeg\",\"keywords\":[\"API\",\"Python\",\"web applications\",\"web development\"],\"inLanguage\":\"nl-NL\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinqsta.com\/nl\/blog\/fastapi\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinqsta.com\/nl\/blog\/fastapi\/\",\"url\":\"https:\/\/kinqsta.com\/nl\/blog\/fastapi\/\",\"name\":\"Een app bouwen met FastAPI voor Python - Kinsta\u00ae\",\"isPartOf\":{\"@id\":\"https:\/\/kinqsta.com\/nl\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinqsta.com\/nl\/blog\/fastapi\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinqsta.com\/nl\/blog\/fastapi\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinqsta.com\/nl\/wp-content\/uploads\/sites\/7\/2022\/11\/fastapi.jpeg\",\"datePublished\":\"2022-11-29T12:09:47+00:00\",\"dateModified\":\"2023-06-09T07:30:23+00:00\",\"description\":\"Het heet niet voor niets \\\"fast\\\"! Dit is wat je moet weten over FastAPI om snel interfaces voor applicatieprogrammering te bouwen met behulp van Python.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinqsta.com\/nl\/blog\/fastapi\/#breadcrumb\"},\"inLanguage\":\"nl-NL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinqsta.com\/nl\/blog\/fastapi\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"nl-NL\",\"@id\":\"https:\/\/kinqsta.com\/nl\/blog\/fastapi\/#primaryimage\",\"url\":\"https:\/\/kinqsta.com\/nl\/wp-content\/uploads\/sites\/7\/2022\/11\/fastapi.jpeg\",\"contentUrl\":\"https:\/\/kinqsta.com\/nl\/wp-content\/uploads\/sites\/7\/2022\/11\/fastapi.jpeg\",\"width\":1460,\"height\":730,\"caption\":\"Een app bouwen met FastAPI voor Python\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinqsta.com\/nl\/blog\/fastapi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinqsta.com\/nl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Python\",\"item\":\"https:\/\/kinqsta.com\/nl\/onderwerpen\/python\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Een app bouwen met FastAPI voor Python\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinqsta.com\/nl\/#website\",\"url\":\"https:\/\/kinqsta.com\/nl\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Snelle, veilige, premium hostingoplossingen\",\"publisher\":{\"@id\":\"https:\/\/kinqsta.com\/nl\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinqsta.com\/nl\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"nl-NL\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinqsta.com\/nl\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinqsta.com\/nl\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"nl-NL\",\"@id\":\"https:\/\/kinqsta.com\/nl\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinqsta.com\/nl\/wp-content\/uploads\/sites\/7\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinqsta.com\/nl\/wp-content\/uploads\/sites\/7\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinqsta.com\/nl\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/Kinsta-Nederland-476213452787823\/\",\"https:\/\/x.com\/Kinsta_NL\",\"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:\/\/kinqsta.com\/nl\/#\/schema\/person\/8deb20857e9f90e6cc3c2426da8f343f\",\"name\":\"Emmanuel Uchenna\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"nl-NL\",\"@id\":\"https:\/\/kinqsta.com\/nl\/#\/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:\/\/kinqsta.com\/nl\/blog\/author\/emmanueluchenna\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Een app bouwen met FastAPI voor Python - Kinsta\u00ae","description":"Het heet niet voor niets \"fast\"! Dit is wat je moet weten over FastAPI om snel interfaces voor applicatieprogrammering te bouwen met behulp van Python.","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:\/\/kinqsta.com\/nl\/blog\/fastapi\/","og_locale":"nl_NL","og_type":"article","og_title":"Een app bouwen met FastAPI voor Python","og_description":"Het heet niet voor niets \"fast\"! Dit is wat je moet weten over FastAPI om snel interfaces voor applicatieprogrammering te bouwen met behulp van Python.","og_url":"https:\/\/kinqsta.com\/nl\/blog\/fastapi\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/Kinsta-Nederland-476213452787823\/","article_published_time":"2022-11-29T12:09:47+00:00","article_modified_time":"2023-06-09T07:30:23+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinqsta.com\/nl\/wp-content\/uploads\/sites\/7\/2022\/11\/fastapi.jpeg","type":"image\/jpeg"}],"author":"Emmanuel Uchenna","twitter_card":"summary_large_image","twitter_description":"Het heet niet voor niets \"fast\"! Dit is wat je moet weten over FastAPI om snel interfaces voor applicatieprogrammering te bouwen met behulp van Python.","twitter_image":"https:\/\/kinqsta.com\/nl\/wp-content\/uploads\/sites\/7\/2022\/11\/fastapi.jpeg","twitter_creator":"@Kinsta_NL","twitter_site":"@Kinsta_NL","twitter_misc":{"Geschreven door":"Emmanuel Uchenna","Geschatte leestijd":"14 minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinqsta.com\/nl\/blog\/fastapi\/#article","isPartOf":{"@id":"https:\/\/kinqsta.com\/nl\/blog\/fastapi\/"},"author":{"name":"Emmanuel Uchenna","@id":"https:\/\/kinqsta.com\/nl\/#\/schema\/person\/8deb20857e9f90e6cc3c2426da8f343f"},"headline":"Een app bouwen met FastAPI voor Python","datePublished":"2022-11-29T12:09:47+00:00","dateModified":"2023-06-09T07:30:23+00:00","mainEntityOfPage":{"@id":"https:\/\/kinqsta.com\/nl\/blog\/fastapi\/"},"wordCount":2191,"commentCount":0,"publisher":{"@id":"https:\/\/kinqsta.com\/nl\/#organization"},"image":{"@id":"https:\/\/kinqsta.com\/nl\/blog\/fastapi\/#primaryimage"},"thumbnailUrl":"https:\/\/kinqsta.com\/nl\/wp-content\/uploads\/sites\/7\/2022\/11\/fastapi.jpeg","keywords":["API","Python","web applications","web development"],"inLanguage":"nl-NL","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinqsta.com\/nl\/blog\/fastapi\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinqsta.com\/nl\/blog\/fastapi\/","url":"https:\/\/kinqsta.com\/nl\/blog\/fastapi\/","name":"Een app bouwen met FastAPI voor Python - Kinsta\u00ae","isPartOf":{"@id":"https:\/\/kinqsta.com\/nl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinqsta.com\/nl\/blog\/fastapi\/#primaryimage"},"image":{"@id":"https:\/\/kinqsta.com\/nl\/blog\/fastapi\/#primaryimage"},"thumbnailUrl":"https:\/\/kinqsta.com\/nl\/wp-content\/uploads\/sites\/7\/2022\/11\/fastapi.jpeg","datePublished":"2022-11-29T12:09:47+00:00","dateModified":"2023-06-09T07:30:23+00:00","description":"Het heet niet voor niets \"fast\"! Dit is wat je moet weten over FastAPI om snel interfaces voor applicatieprogrammering te bouwen met behulp van Python.","breadcrumb":{"@id":"https:\/\/kinqsta.com\/nl\/blog\/fastapi\/#breadcrumb"},"inLanguage":"nl-NL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinqsta.com\/nl\/blog\/fastapi\/"]}]},{"@type":"ImageObject","inLanguage":"nl-NL","@id":"https:\/\/kinqsta.com\/nl\/blog\/fastapi\/#primaryimage","url":"https:\/\/kinqsta.com\/nl\/wp-content\/uploads\/sites\/7\/2022\/11\/fastapi.jpeg","contentUrl":"https:\/\/kinqsta.com\/nl\/wp-content\/uploads\/sites\/7\/2022\/11\/fastapi.jpeg","width":1460,"height":730,"caption":"Een app bouwen met FastAPI voor Python"},{"@type":"BreadcrumbList","@id":"https:\/\/kinqsta.com\/nl\/blog\/fastapi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinqsta.com\/nl\/"},{"@type":"ListItem","position":2,"name":"Python","item":"https:\/\/kinqsta.com\/nl\/onderwerpen\/python\/"},{"@type":"ListItem","position":3,"name":"Een app bouwen met FastAPI voor Python"}]},{"@type":"WebSite","@id":"https:\/\/kinqsta.com\/nl\/#website","url":"https:\/\/kinqsta.com\/nl\/","name":"Kinsta\u00ae","description":"Snelle, veilige, premium hostingoplossingen","publisher":{"@id":"https:\/\/kinqsta.com\/nl\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinqsta.com\/nl\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"nl-NL"},{"@type":"Organization","@id":"https:\/\/kinqsta.com\/nl\/#organization","name":"Kinsta","url":"https:\/\/kinqsta.com\/nl\/","logo":{"@type":"ImageObject","inLanguage":"nl-NL","@id":"https:\/\/kinqsta.com\/nl\/#\/schema\/logo\/image\/","url":"https:\/\/kinqsta.com\/nl\/wp-content\/uploads\/sites\/7\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinqsta.com\/nl\/wp-content\/uploads\/sites\/7\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinqsta.com\/nl\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Kinsta-Nederland-476213452787823\/","https:\/\/x.com\/Kinsta_NL","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:\/\/kinqsta.com\/nl\/#\/schema\/person\/8deb20857e9f90e6cc3c2426da8f343f","name":"Emmanuel Uchenna","image":{"@type":"ImageObject","inLanguage":"nl-NL","@id":"https:\/\/kinqsta.com\/nl\/#\/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:\/\/kinqsta.com\/nl\/blog\/author\/emmanueluchenna\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinqsta.com\/nl\/wp-json\/wp\/v2\/posts\/48131","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinqsta.com\/nl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinqsta.com\/nl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinqsta.com\/nl\/wp-json\/wp\/v2\/users\/270"}],"replies":[{"embeddable":true,"href":"https:\/\/kinqsta.com\/nl\/wp-json\/wp\/v2\/comments?post=48131"}],"version-history":[{"count":12,"href":"https:\/\/kinqsta.com\/nl\/wp-json\/wp\/v2\/posts\/48131\/revisions"}],"predecessor-version":[{"id":52830,"href":"https:\/\/kinqsta.com\/nl\/wp-json\/wp\/v2\/posts\/48131\/revisions\/52830"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinqsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/48131\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinqsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/48131\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinqsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/48131\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinqsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/48131\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinqsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/48131\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinqsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/48131\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinqsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/48131\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinqsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/48131\/translations\/es"},{"embeddable":true,"hreflang":"sv","title":"Swedish","href":"https:\/\/kinqsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/48131\/translations\/se"},{"embeddable":true,"hreflang":"da","title":"Danish","href":"https:\/\/kinqsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/48131\/translations\/dk"},{"href":"https:\/\/kinqsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/48131\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinqsta.com\/nl\/wp-json\/wp\/v2\/media\/48348"}],"wp:attachment":[{"href":"https:\/\/kinqsta.com\/nl\/wp-json\/wp\/v2\/media?parent=48131"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinqsta.com\/nl\/wp-json\/wp\/v2\/tags?post=48131"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinqsta.com\/nl\/wp-json\/wp\/v2\/topic?post=48131"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}