API staat voor Application Programming Interface. Het is een gestandaardiseerde manier voor gegevensuitwisseling tussen applicaties. Denk aan de volgende voorbeelden:
- Ophalen van productinformatie op Amazon
- Ophalen van de huidige portfoliowaarde van aandelen bij Binck
- Aanmaken van een transportlabel bij DHL
- Aanmaken van een verkooporder in een ERP systeem, bijvoorbeeld SAP
Wil je tijdelijk een freelance FastAPI developer inhuren? Bekijk dan onze diensten eens.
Er zijn meerdere Python packages waarmee een API te maken zijn. Een bekend voorbeeld hiervan is package Flask. Naast Flask bestaat ook package FastAPI. Dit heeft meerdere voordelen. In dit blog leer je wat de voordelen zijn. Ook leer je hoe je zelf een API maakt met FastAPI. We behandelen de volgende onderwerpen:
- Voordelen van FastAPI
- FastAPI installeren
- Maak een API met FastAPI
- Een GET request
- Een POST request
- Documentatie met FastAPI
- Een DEL request
In dit blog gebruiken we PyCharm als IDE. Dit is niet vereist.
Voordelen van FastAPI
FastAPI lijkt in syntax op andere packages als Flask. Het heeft echter enkele handige voordelen. Voordelen zijn:
- De syntax is compacter. Hierdoor is minder code nodig. Dit zorgt ervoor dat je sneller programmeert.
- FastAPI kan asynchroon werken. Hierdoor kunnen taken tegelijk verwerkt worden.
- Type hinting wordt geïnterpreteerd. Hierdoor kunnen gemakkelijk dataconversies gedaan worden. Ook worden hierdoor automatisch validaties gedaan. Dit om te verzekeren dat data in het juiste type verwerkt wordt.
- Er wordt automatische documentatie van de API endpoints gemaakt. API endpoints zijn de mogelijke routes binnen de API.
- ReDoc documentatie: een overzicht van alle endpoints met specificatie van variabelen.
- Swagger UI documentatie: een overzicht van alle endpoints. Hier heb je ook de mogelijkheid om endpoints te testen.
FastAPI installeren
FastAPI is een Python package. Installeer dit vanuit Windows met de command prompt. Gebruik hiervoor commando 'pip install fastapi'.
Naast FastAPI is ook een server nodig om een API te hosten. Dit kan met Hypercorn of Uvicorn. In dit blog maken we gebruik van Hypercorn. Dit is niet vereist. Hypercorn installeer je met commando 'pip install hypercorn'.
Maak een API met FastAPI
Nu FastAPI en een server zijn geïnstalleerd kunnen we een API maken. Dit doen we vanuit IDE PyCharm. Maak hierin een nieuwe projectmap aan. Maak in de projectmap bestand 'main.py'.
Hierin schrijven we onderstaande code:
Deze code doet het volgende:
- FastAPI wordt geïmporteerd
- Er wordt een FastAPI app object aangemaakt.
- Een route voor een get request wordt aangemaakt.
- Hiervoor gebruik je met FastAPI een decorator: '@app.get()'.
- Binnen deze decorator geef je de route op. Dat is hier '/'.
- Voor deze route is functie 'index()' gemaakt. Deze functie geeft een dictionary terug.
Deze API kan nu getest worden. Hiervoor voer je met de terminal 'hypercorn main:app --reload' uit. Hiermee gebruik je Hypercorn als server om de app te starten. De toevoeging '--reload' zorgt ervoor dat de app opnieuw gestart wordt zodra je de code wijzigt.
Na uitvoeren zie je een lijn met hierin een link.
Open de link. Je ziet nu het dictionary wat functie 'index()' teruggeeft.
Hiermee hebben we de eerste versie van een simpele API gemaakt. Je kunt nu vanuit de browser het resultaat van een Python script ophalen.
Een GET request
Momenteel bevat de app één GET request. We gaan hier een tweede GET request aan toevoegen. We maken allereerst de variabele 'database' aan. Dit is nu een lege lijst. Later gebruiken we dit om data in te bewaren.
Verder maken we een extra GET request aan. Vanuit route '/items' geeft dit de inhoud van object 'database' terug.
Dit slaan we op. Nu openen we deze route in de browser.
We zien nu de inhoud van object 'database'. Dit is uiteraard nu nog leeg.
Een POST request
Om data aan de database toe te voegen maken we een POST request. Aan de database willen we items toe kunnen voegen. De items die we toevoegen hebben een naam en een prijs. Hier kunnen we handig gebruik maken van type hinting door FastAPI. De volgende code voegen we toe:
Dit doet het volgende:
- We importeren BaseModel uit PyDantic. Hierdoor kan gemakkelijk met standaard Python datatypes gewerkt worden.
- Class 'Item()' wordt aangemaakt. Dit gebruikt het BaseModel. Een item heeft twee eigenschappen.
- 'name': de naam van een item, een string
- 'price': de prijs van het item, een float
- Voor een POST request gebruik je decorator '@app.post()'
- Functie 'add_item()' wordt uitgevoerd voor dit request
- Het verwacht een instance uit class 'Item()', hier gebruik je type hinting
- Het item is een instance van BaseModel. Hierdoor kun je methode 'dict()' gebruiken. Zo wordt een element als dictionary in de database bewaard.
- Tot slot geeft het POST request het laatste element uit de database terug
Documentatie met FastAPI
FastAPI biedt automatisch twee soorten documentaties:
- ReDoc documentatie: een overzicht van alle endpoints met specificatie van variabelen.
- Swagger UI documentatie: een overzicht van alle endpoints. Hier heb je ook de mogelijkheid om endpoints te testen.
We bekijken beide documentaties.
ReDoc documentatie
Zorg dat de code is opgeslagen. Open de link in de browser. Voeg aan het eind '/redoc' toe en voer dit uit. De volgende pagina verschijnt:
Links kun je de verschillende API endpoints zien. Hier kun je op klikken om naar de details te navigeren. Van het zojuist aangemaakte POST request zien we bijvoorbeeld dat 'name' en 'price' de vereiste waarden zijn. Hier zie je ook welke datatypes verwacht worden. Dit komt wederom door het gebruik van type hinting.
Swagger UI documentatie
Ga in plaats van 'URL/redoc' nu naar 'URL/docs'. De volgende pagina verschijnt:
Hier zijn weer details van de endpoints te zien. Ook zijn ze te testen. Klik op POST.
Klik hier op 'Try it out'. Nu kunnen items toegevoegd worden. We voegen 2 items toe.
- Item 1: {"name": "Shirt", "price": 20}
- Item 2: {"name": "Dress", "price": 50}
Druk na elk item op 'Execute'.
Nu zijn twee items toegevoegd. Dit kunnen we controleren met het eerder gemaakte GET request. Open in de browser 'URL/items'. Je ziet het volgende:
Nu weten we zeker dat de items toegevoegd zijn aan de database.
Een DEL request
Naast het ophalen en toevoegen van data kan data ook verwijderd worden. Hiervoor gebruiken we een DEL request. Met dit request gaan we een item uit de database verwijderen. Dit DEL request schrijven we als volgt:
Dit doet het volgende:
- Voor het DEL request gebruiken we decorator 'app.delete()'
- Hier verkrijgen we een waarde: 'item_idx'
- Functie 'delete_item()' wordt hierdoor uitgevoerd
- Dit heeft als input 'item_idx', een integer
- Met methode '.pop()' verwijderen we het element in de database
- De functie geeft een lege string terug
Voeg de code toe en sla het op. Ga in de browser naar de Swagger documentatie. Hiervoor gebruik je de URL 'URL/docs'. Doordat de app opnieuw gestart is de database nu nog leeg. Voeg via het 'Add item' POST request 2 items toe. Controleer via 'URL/items' of de items zijn toegevoegd.
Ga naar de Swagger docs. Klik op het 'Delete Item' DEL request. Klik op 'Try it out'.
Voer nummer 0 in en klik op 'Execute'. Dit verwijdert het eerste element uit de database. Controleer dit door weer naar 'URL/items' te gaan. Vernieuw de pagina indien nodig.
Nog maar 1 van de 2 elementen in de database is aanwezig. Het DEL request heeft dus succesvol het eerste element verwijderd.
Wat je moet onthouden
FastAPI is een package waarmee je in Python een API kunt maken. FastAPI heeft voordelen op andere packages waarmee ook APIs gemaakt kunnen worden. Voordelen zijn sneller werken door compactere syntax, asynchroon werken, gebruik van type hinting en automatische documentatie. In deze tutorial hebben we een eenvoudige API gemaakt. Met de API hebben we data opgehaald met een GET request. Met een POST request hebben we data aan een database toegevoegd. Tot slot konden met een DEL request elementen verwijderd worden.
Wil je tijdelijk een freelance FastAPI developer inhuren? Bekijk dan onze diensten eens. Wil je nog veel meer leren over Python en de mogelijkheden voor data analyse? Schrijf je dan in voor onze Python cursus voor data science, onze machine learning training, of voor onze data science opleiding en leer met vertrouwen te programmeren en analyseren in Python. Nadat je een van onze trainingen hebt gevolgd kun je zelfstandig verder aan de slag. Je kunt ook altijd even contact opnemen als je een vraag hebt.
Download één van onze opleidingsbrochures voor meer informatie
Peter is een ervaren data scientist en python trainer. Na zijn studie aan de Technische Universiteit Delft heeft hij zich altijd bezig gehouden met data en diverse programmeertalen. Peter heeft veel data analyses uitgevoerd en processen geautomatiseerd met Python in productieomgevingen.