Ga naar hoofdinhoud

GET vs POST

Hier bouw je op verder

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}
  1. 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}
  1. Regel 3:

    @app.post in plaats van @app.get: dit endpoint reageert alleen op een POST. Een browser die de URL opvraagt met een GET krijgt een 405.

  2. Regel 4:

    Form(...) zegt dat naam uit 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?

GETPOST
DoelData ophalenData versturen
Data inURLRequest body
VoorbeeldPagina laden, zoekenFormulier versturen, inloggen

Vuistregel: GET = "Geef me iets" / POST = "Hier is iets"

Gaat er iets mis?

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:

  1. Een pagina met zoekresultaten
  2. Een inlogformulier versturen
  3. Een foto tonen
Tip

Denk aan de vuistregel: GET = "Geef me iets" (data ophalen), POST = "Hier is iets" (data versturen).

Antwoord
  1. GET — je haalt data op
  2. POST — je stuurt gevoelige data (wachtwoord)
  3. 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