CodeBlanks Logo Icon CodeBlanks

Router

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

main.dart
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

main.dart
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

Soru
router.____('/hello', helloHandler);
Cevap
router.get('/hello', helloHandler);

Açıklama: router.get('/hello', handler) GET route ekler.

İleri seviye bölümündeki tüm dersler