# Pano — Kanban görev panosu ![Pano](../../medya/pano.png) Sunucusu **KabaLang** ile yazılmış bir Kanban panosu: görevler *Yapılacak · Sürüyor · Bitti* sütunlarında, kartlar sürükle-bırak ile taşınır, her değişiklik SQLite'a yazılır. ```bash cd web/pano kabalang calistir pano.kbl # → http://127.0.0.1:8471 ``` ## Neyi gösteriyor | Konu | Nerede | |---|---| | `kaba.web` ile JSON REST API — `al` · `gonder` · `guncelle` · `kaldir` | `pano.kbl` sonu | | Yol parametresi `/api/gorevler/{id}` | `guncelle`, `kaldir` | | `kaba.veritabani` — **her sorgu parametre bağlamalı** (`?`) | tüm `veritabani.sqlite(..., [..])` çağrıları | | Gelen JSON'u `json.gecerli_mi` + `json.al` ile okumak | `olustur` | | Durum kodlu yanıtlar: 201 · 204 · 400 · 404 · 422 | `hata_json`, `web.json(g, 201)` | | Sunucunun kendi hatalarının da JSON olması (405, 413) | `sunucu.hatalar_json()` | | Kapalı küme denetimi (`SUTUNLAR.icerir(sutun)`) | `olustur`, `guncelle` | ## API ```bash curl http://127.0.0.1:8471/api/gorevler curl -X POST -d '{"baslik":"Yeni iş","oncelik":"yuksek"}' http://127.0.0.1:8471/api/gorevler curl -X PUT -d '{"sutun":"bitti"}' http://127.0.0.1:8471/api/gorevler/3 curl -X DELETE http://127.0.0.1:8471/api/gorevler/3 ``` ## Güvenlik - **SQL enjeksiyonu:** kullanıcı verisi sorguya hiçbir zaman metin olarak eklenmez, `?` ile bağlanır. `"x'); DROP TABLE gorev; --"` başlıklı bir görev yalnızca tuhaf adlı bir görevdir. - **XSS:** ön yüz kart içeriğini `textContent` ile basar; `