oefenopdracht / mini project
een kleine maar echte keten bouwen: CSV → API → JSON → browser → Git
opdracht
- brondata: maak een kleine
producten.csvid,naam,prijs 1,Laptop,899 2,Muis,25 3,Toetsenbord,49 - API: schrijf een script (python/bash) dat
- productencsv inleest
- een REST-API aanbiedt met :
- GET /api/producten → alle producten (JSON)
- GET /api/producten/{id} → één product
- apache:
- zet apache ervoor als reverse proxy (/api/ -> je script )
- client:
-
- Maak een eenvoudige
index.htmldie metfetch: - de lijst ophaalt van /api/producten.
- de producten toont in een tabel.
- Maak een eenvoudige
-
- Git
- initialiseer een Git-repo
- commit step by step
- CSV + eerste script
- API-uitbreiding
- Apache-config(no secrets)
- HTML client
- reflectie
- teken de dataflow
- CSV -> API -> Apache -> browser
- waar zitten JSON / CSV / REST / GIT in de keten
stap voor stap:
Mini‑project: Bouw je eigen dataflow
Doel van dit project: In dit mini‑project bouw je een echte dataflow van begin tot einde:
CSV → API → Apache → JSON → Browser → Git
Je ziet hoe data beweegt door een moderne keten, en je leert hoe bestanden, APIs en clients samenwerken.
- Brondata: CSV‑bestand
Maak een bestand producten.csv:
id,naam,prijs
1,Laptop,899
2,Muis,25
3,Toetsenbord,49
--> Verwachte output
Een CSV‑bestand met drie producten.
Open het bestand in een teksteditor, niet in Excel.
CSV is gewoon tekst.
- API: CSV inlezen en JSON aanbieden
Maak een klein Python‑script (api.py) dat:- producten.csv inleest
- een REST‑API aanbiedt met twee endpoints:
- GET /api/producten → lijst van alle producten
- GET /api/producten/
→ één product
--> Verwachte output - Een draaiende API op http://127.0.0.1:5000/api/producten
- JSON zoals:
[
{"id": 1, "naam": "Laptop", "prijs": 899},
{"id": 2, "naam": "Muis", "prijs": 25},
{"id": 3, "naam": "Toetsenbord", "prijs": 49}
]
Gebruik csv.DictReader om CSV automatisch om te zetten naar dictionaries.
- Apache: reverse proxy naar je API
Configureer Apache zodat:- de buitenwereld /api/... opvraagt
- Apache dit doorstuurt naar je Python‑API op poort 5000
--> Verwachte output - http://jouwdomein/api/producten toont dezelfde JSON als lokaal
- Apache‑log toont de requests
- Je API‑console toont dat de request is binnengekomen
Hint
Gebruik:
ProxyPass /api/ http://127.0.0.1:5000/api/
ProxyPassReverse /api/ http://127.0.0.1:5000/api/
- Client: HTML‑pagina die de API gebruikt
Maak een bestand index.html:- gebruik fetch("/api/producten")
- toon de producten in een tabel
Verwachte output
Een webpagina die: - de API aanspreekt
- JSON ontvangt
- een tabel toont met drie producten
Hint
Gebruik:
fetch("/api/producten")
.then(r => r.json())
.then(data => console.log(data))
- Git: versiebeheer en samenwerking
Initialiseer een Git‑repository:
git init
git add .
git commit -m "Eerste versie"
Maak daarna commits per stap:- CSV toegevoegd
- API gebouwd
- Apache‑config toegevoegd
- HTML‑client toegevoegd
--> Verwachte output
Een Git‑geschiedenis die de evolutie van het project toont.
->
Schrijf duidelijke commit‑boodschappen.
Je toekomstige zelf zal je dankbaar zijn.
- Reflectie: teken de dataflow
Teken de volledige keten:
CSV → Python API → Apache → Browser → Tabel
Beantwoord daarna:- Waar komt de data vandaan?
- Waar wordt ze omgezet?
- Waar wordt ze doorgestuurd?
- Waar wordt ze getoond?
- Waar zit JSON in de keten?
- Waar zit CSV in de keten?
- Waar zit Git in de keten?
--> Verwachte output
Een eenvoudige tekening + korte antwoorden.
- Bonus (optioneel)
- Voeg een POST‑endpoint toe om een nieuw product toe te voegen.
- Laat de HTML‑client een product toevoegen via een formulier.
- Voeg foutafhandeling toe (404, 400).
- Maak een branch feature/post-endpoint en merge die later.