Ga naar hoofdinhoud

Je eerste endpoint

Hier bouw je op verder: Functies, Return en Dictionaries

Weet je dit niet meer zeker? Lees het terug voordat je verdergaat.

Een endpoint is een URL waarop je server reageert.

main.py aanmaken​

Maak een bestand main.py in je project:

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def root():
return {"bericht": "Hallo wereld!"}
  1. Regel 3:

    FastAPI() maakt een nieuwe app. Alles wat je server kan, hang je aan deze app.

  2. Regel 5:

    De decorator @app.get("/") koppelt de functie eronder aan de URL /. Vraagt een browser die URL op, dan draait FastAPI deze functie.

  3. Regel 6:

    De functie heet root, maar de naam doet er niet toe; de URL in de regel erboven bepaalt wanneer hij draait. Het async hoort bij FastAPI en mag je overnemen.

  4. Regel 7:

    Wat de functie teruggeeft, krijgt de browser. Een dictionary zet FastAPI zelf om in JSON.

Server starten​

Start je server in de terminal:

fastapi dev main.py

Ga naar http://127.0.0.1:8000 in je browser. Je ziet:

{"bericht": "Hallo wereld!"}

Misschien staat het er bij jou zonder spaties: {"bericht":"Hallo wereld!"}. Dat is dezelfde JSON; spaties tussen de onderdelen tellen niet mee. Dat geldt voor alle JSON in deze cursus.

Laat de server draaien

Je hoeft de server niet opnieuw te starten als je main.py aanpast. Sla op met Ctrl+S, en fastapi dev ziet de wijziging en start zichzelf opnieuw. In de terminal verschijnt dan WatchFiles detected changes in 'main.py'. Reloading..., en even later Application startup complete. Daarna herlaad je de pagina in je browser.

Stoppen doe je met Ctrl+C in de terminal. Typ je fastapi dev main.py terwijl de server nog draait, dan krijg je Address already in use.

Wijzigingen niet zichtbaar?

Kijk eerst of je hebt opgeslagen: een stip in plaats van het kruisje op het tabblad van main.py in VS Code betekent dat er nog iets niet is opgeslagen. Kijk daarna in de terminal. Staat daar een foutmelding, dan kon de server niet opnieuw starten, en blijft je pagina laden zonder dat er iets verschijnt. Los de fout op, sla op, en herlaad.

Meerdere endpoints​

Een tweede endpoint zet je er op dezelfde manier onder:

@app.get("/info")
async def info():
return {"naam": "Jouw Naam", "leeftijd": 16}

Ga naar http://127.0.0.1:8000/info om dit te testen.

Gaat er iets mis?

Start je server niet, met NameError: name 'app' is not defined? Dan staat je endpoint bóven de regel app = FastAPI(). Python leest van boven naar beneden. Meer oplossingen staan op Er gaat iets mis.

VS Code ziet zo'n fout vaak al voordat je de server start. Onder een naam die Python niet kent, zet hij een kronkel, en in het tabblad Problems (Problemen) onderaan staat wat er mis is. Ga met je muis op de kronkel staan om de uitleg te lezen.

Zo ziet je main.py er nu uit

Dit is je hele main.py na deze les, zonder wat je in de opdrachten maakte.

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def root():
return {"bericht": "Hallo wereld!"}

@app.get("/info")
async def info():
return {"naam": "Jouw Naam", "leeftijd": 16}
Controlevraag
Je verandert de naam van de functie info in over_mij. De regel @app.get("/info") erboven laat je staan. Je slaat op en gaat naar /info. Wat krijg je?
Kies wat jij denkt. Bij het goede antwoord zie je de uitleg.

Opdrachten​

Opdracht 1: Predict - Wat zie je?​

@app.get("/school")
async def school():
return {"school": "Mijn school", "vak": "Informatica"}
Voorspel
Wat zie je als je naar /school gaat?
Kies wat jij denkt. Bij het goede antwoord zie je de uitleg.

Opdracht 2: Run​

Voeg het /school endpoint toe aan je main.py, sla op en ga naar http://127.0.0.1:8000/school. Zie je de JSON uit het goede antwoord van opdracht 1?

Opdracht 3: Investigate - Dubbele URL​

Wat gebeurt er als je twee endpoints met dezelfde URL maakt?

@app.get("/test")
async def test1():
return {"bericht": "Eerste"}

@app.get("/test")
async def test2():
return {"bericht": "Tweede"}

Probeer het uit. Welke van de twee zie je?

Antwoord

Je ziet {"bericht": "Eerste"}. FastAPI neemt het eerste endpoint met deze URL en slaat het tweede over.

Opdracht 4: Make - Eigen endpoint​

Maak een endpoint /hobby dat jouw favoriete hobby teruggeeft als JSON.

Tip

Je hebt een @app.get("/hobby") nodig met een functie die een dictionary returnt, bijvoorbeeld {"hobby": "voetbal"}.

Antwoord
@app.get("/hobby")
async def hobby():
return {"hobby": "voetbal"}

Opdracht 5: Make - Meerdere endpoints​

Maak drie endpoints, /eten, /muziek en /game, die elk een favoriet van jou teruggeven.

Tip

Maak voor elk endpoint een aparte functie met @app.get(...). Geef elke functie een eigen naam, dan houd je ze uit elkaar.

Antwoord
@app.get("/eten")
async def eten():
return {"eten": "pizza"}

@app.get("/muziek")
async def muziek():
return {"muziek": "pop"}

@app.get("/game")
async def game():
return {"game": "Minecraft"}