GET vs POST
Hier bouw je op verder
- Python Parameters
- Python F-strings
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}
- Regel 2:
Een parameter met een type,
term: str, haalt FastAPI uit de URL: het stuk na het vraagteken,?term=python. De naam van de parameter moet gelijk zijn aan de naam in de URL.
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}
- Regel 3:
@app.postin plaats van@app.get: dit endpoint reageert alleen op een POST. Een browser die de URL opvraagt met een GET krijgt een 405. - Regel 4:
Form(...)zegt datnaamuit een verstuurd formulier komt, niet uit de URL. De data zit in de body van het verzoek en is niet zichtbaar in de adresbalk.
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