Ga naar hoofdinhoud

Welke route antwoordt?

Bij elk verzoek zoekt FastAPI de functie die erbij hoort: dezelfde methode, en een pad dat past. Een plekhouder als {naam} past op elk stuk pad. Wat er na het vraagteken staat, gaat naar de parameters die niet in het pad staan. Jij bent nu FastAPI.

Wat je nodig hebt​

  • Per tweetal een geprinte hand-out en een pen.
  • Ongeveer 20 minuten.

De spelregels​

  1. Loop de routes van boven naar beneden langs. De eerste die past, wint; de rest kijk je niet meer aan.
  2. Past geen enkel pad: 404. Past het pad wel, maar alleen bij een andere methode: 405.
  3. Ontbreekt een parameter zonder standaardwaarde, of is vier geen int: 422. De functie draait dan niet.
  4. Een waarde na het vraagteken waar geen parameter voor is, laat FastAPI liggen.

De routes​

@app.get("/")
async def home():
return {"pagina": "home"}


@app.get("/dier/{naam}")
async def dier(naam: str):
return {"dier": naam}


@app.get("/dier/kat")
async def kat():
return {"dier": "de kat van de juf"}


@app.get("/dubbel")
async def dubbel(getal: int):
return {"dubbel": getal * 2}


@app.get("/zoek")
async def zoek(term: str = ""):
return {"term": term}


@app.post("/gastenboek")
async def gastenboek_opslaan(naam: str = Form(...), bericht: str = Form(...)):
return {"naam": naam, "bericht": bericht}

De verzoeken​

Schrijf bij elk verzoek de functie en de waarden van de parameters, of de statuscode als er geen functie draait.

NrVerzoekFunctie en parameters, of status
1GET /dier/hond
2GET /dier/kat
3GET /dier
4GET /dier/kat/klein
5GET /Dier/hond
6GET /dubbel?getal=4
7GET /dubbel?getal=vier
8GET /dubbel
9GET /zoek
10GET /zoek?term=kat&kleur=rood
11GET /gastenboek
12POST /gastenboek met alleen het veld naam

Bespreek na​

  1. De functie kat() draait nooit. Hoe zorg je dat /dier/kat wel bij haar uitkomt?
  2. Waarom geeft verzoek 8 een 422, en verzoek 9 niet?
  3. Bij welke verzoeken draait jouw code helemaal niet? Wat betekent dat voor een print() in je functie?
Antwoorden
NrAntwoord
1dier, met naam = "hond"
2dier, met naam = "kat": de plekhouder staat hoger en wint
3404: /dier/{naam} heeft een stuk pad na /dier/ nodig
4404: een plekhouder past op één stuk pad, zonder /
5404: een pad is hoofdlettergevoelig
6dubbel, met getal = 4 (een int)
7422: vier is geen int
8422: getal heeft geen standaardwaarde
9zoek, met term = ""
10zoek, met term = "kat"; kleur laat FastAPI liggen
11405: /gastenboek bestaat alleen als POST
12422: het veld bericht ontbreekt

Nagespeeld met een programma, voor verzoek 2, 4 en 7:

from fastapi.testclient import TestClient

klant = TestClient(app)
print(klant.get("/dier/kat").json()) # {'dier': 'kat'}
print(klant.get("/dier/kat/klein").status_code) # 404
print(klant.get("/dubbel?getal=vier").status_code) # 422

Bespreek na. Vraag 1: zet @app.get("/dier/kat") boven @app.get("/dier/{naam}"). Vraag 2: term heeft een standaardwaarde, "", en getal niet. Vraag 3: bij elke 404, 405 en 422. FastAPI stopt voordat je functie begint, dus een print() erin zie je niet in de terminal; alleen de regel met de statuscode.