GET vs POST
Tot nu toe gebruiken we alleen GET requests. In deze les leer je het verschil tussen GET en POST.
GET = Data ophalen
Alles wat je tot nu toe hebt gedaan is GET. De browser vraagt data op van de server.
@app.get("/pagina")
async def pagina():
return FileResponse("static/pages/home.html")
Data kan meegestuurd worden in de URL:
http://127.0.0.1:8000/zoek?term=python
@app.get("/zoek")
async def zoek(term: str):
return {"je_zocht": term}
POST = Data versturen
POST gebruik je als een gebruiker data naar de server stuurt, bijvoorbeeld via een formulier.
from fastapi import Form
@app.post("/verstuur")
async def verstuur(naam: str = Form(...)):
return {"ontvangen": naam}
De data zit in de request body — niet zichtbaar in de URL.
Wanneer gebruik je wat?
| GET | POST | |
|---|---|---|
| Doel | Data ophalen | Data versturen |
| Data in | URL | Request body |
| Voorbeeld | Pagina laden, zoeken | Formulier versturen, inloggen |
Vuistregel: GET = "Geef me iets" / POST = "Hier is iets"
Krijg je een 405 Method Not Allowed? Dan stuur je waarschijnlijk een POST naar een GET endpoint of andersom. Bekijk de troubleshooting pagina voor meer oplossingen.
Opdrachten
Opdracht 1: Predict - GET of POST?
Wat gebruik je voor:
- Een pagina met zoekresultaten
- Een inlogformulier versturen
- Een foto tonen
Tip
Denk aan de vuistregel: GET = "Geef me iets" (data ophalen), POST = "Hier is iets" (data versturen).
Antwoord
- GET — je haalt data op
- POST — je stuurt gevoelige data (wachtwoord)
- GET — je haalt een pagina op
Opdracht 2: Run - GET met parameter
Maak dit endpoint en test het met verschillende namen in de URL:
@app.get("/groet")
async def groet(naam: str = "Bezoeker"):
return {"bericht": f"Hallo {naam}!"}
Test: http://127.0.0.1:8000/groet?naam=Jan
Opdracht 3: Investigate - POST via browser
Wat gebeurt er als je http://127.0.0.1:8000/verstuur rechtstreeks in je browser typt?
Tip
Als je een URL in je browser typt, stuurt de browser altijd een GET request. Wat is het endpoint type van /verstuur?
Antwoord
Je krijgt een 405 Method Not Allowed error. De browser stuurt een GET request, maar /verstuur is een POST endpoint (@app.post). POST endpoints kun je alleen bereiken via formulieren of tools, niet door de URL in te typen.
Opdracht 4: Make - Zoekfunctie
Maak een GET endpoint /zoek dat een term parameter accepteert en een bericht teruggeeft: "Je zocht naar: [term]".
Tip
Gebruik @app.get("/zoek") met een parameter term: str. De parameter wordt automatisch uit de URL gehaald (/zoek?term=...).
Antwoord
@app.get("/zoek")
async def zoek(term: str):
return {"bericht": f"Je zocht naar: {term}"}
Test met: http://127.0.0.1:8000/zoek?term=python
Oefen met Python
Dit oefenblok draait pure Python in je browser — geen FastAPI. Oefen hier de Python-concepten die je nodig hebt voor je server.
# Oefen met f-strings (FastAPI gebruikt dit veel!)
naam = "Jan"
leeftijd = 16
# f-string met variabelen
print(f"Hallo {naam}!")
print(f"{naam} is {leeftijd} jaar oud.")
# Berekeningen in f-strings
print(f"Volgend jaar is {naam} {leeftijd + 1} jaar.")
# f-strings met dictionaries
leerling = {"naam": "Piet", "klas": "4V"}
print(f"Leerling: {leerling['naam']} uit {leerling['klas']}")