Router
- Dart kursu
- İleri seviye
- Ders 28/83
- 5 dk
shelf_router ile routing öğrenirsin.
shelf_router
shelf_router, URL yollarını handler'lara bağlayan pakettir. Router() oluşturup .add('/path', handler) ile route eklersin.
Annotation tabanlı API de var: @Route.get('/hello') ile işaretli metotlar Router<MyApi>().add ile otomatik bağlanır. Bu, kod üretimi (source_gen) ile çalışır.
Router bir handler'dır: var handler = Router()..get('/hello', helloHandler);. Bu handler'ı shelf_io'ya verebilirsin.
Cascade ile birden çok router
Cascade, birden çok handler'ı dener; ilk başarılı (200-level) yanıt döner. 404 dönen handler atlanır, sıradaki denenir.
Kullanım: var handler = Cascade().add(apiRouter).add(staticHandler).handler;. Önce API denenir, eşleşmezse statik dosya handler'ı.
Bu, REST API + statik dosya sunma senaryosu için yaygın bir desen.
Uygulama Router ile route ekle
import 'package:shelf/shelf.dart'; import 'package:shelf_router/shelf_router.dart'; ekle. Response helloHandler(Request r) => Response.ok('merhaba'); tanımla. main'i async yap; var router = Router()..get('/hello', helloHandler);, var resp = await router(Request('GET', Uri.parse('http://localhost/hello'))); ve print(await resp.readAsString()); ekle.
Başlangıç kodu
void main() {
// shelf ve shelf_router import ekle; helloHandler tanımla
// Router oluştur /hello route ekle; çağır; gövde yazdır
}Örnek çözüm
import 'package:shelf/shelf.dart';
import 'package:shelf_router/shelf_router.dart';
Response helloHandler(Request r) => Response.ok('merhaba');
void main() async {
var router = Router()..get('/hello', helloHandler);
var resp = await router(Request('GET', Uri.parse('http://localhost/hello')));
print(await resp.readAsString());
}Beklenen çıktı
merhaba
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Router ne işe yarar?
- Veritabanı yönetir
- Loglama yapar
- JSON üretir
- URL yollarını handler'lara bağlar Doğru cevap
Açıklama: router URL yollarını handler'lara bağlar.
2 Router metotlarını eşleştir
| Kavram | Anlamı |
|---|---|
.get('/path', h) |
GET route |
.post('/path', h) |
POST route |
.add('/path', h) |
El ile ekleme |
@Route.get |
Annotation |
3 GET route ekle
router.____('/hello', helloHandler);
router.get('/hello', helloHandler);
Açıklama: router.get('/hello', handler) GET route ekler.