CodeBlanks Logo Icon CodeBlanks

Handler

shelf Handler ile istek işleme öğrenirsin.

Handler türü

shelf, handler'ı typedef Handler = FutureOr<Response> Function(Request) olarak tanımlar. Yani handler senkron (Response) ya da asenkron (Future<Response>) olabilir.

Senkron handler basit işler için uygundur: Response okHandler(Request r) => Response.ok('ok');.

Asenkron handler I/O için gerekir: Future<Response> dbHandler(Request r) async { var data = await fetch(); return Response.ok(data); }.

Request'ten bilgi okuma

Handler, Request parametresi üzerinden istek bilgilerini okur: req.method (GET, POST...), req.requestedUri.path, req.headers.

Gövde okumak asenkron: var body = await req.readAsString();. Bu, JSON veya form verisi ayrıştırmak için kullanılır.

Örnek: Response echoHandler(Request r) => Response.ok('yol: ${r.requestedUri.path}');. İstek yolunu yanıta yazar.

Uygulama İstek yolunu yankıla

import 'package:shelf/shelf.dart'; ekle. Response echoHandler(Request r) => Response.ok('yol: ${r.requestedUri.path}'); tanımla. main içinde var resp = echoHandler(Request('GET', Uri.parse('http://localhost/merhaba'))); ve print(await resp.readAsString()); ekle (main'i async yap).

Başlangıç kodu

main.dart
void main() {
  // shelf import ekle; echoHandler tanımla
  // handler'ı /merhaba ile çağır; gövdeyi async oku ve yazdır
}

Örnek çözüm

main.dart
import 'package:shelf/shelf.dart';

Response echoHandler(Request r) => Response.ok('yol: ${r.requestedUri.path}');

void main() async {
  var resp = echoHandler(Request('GET', Uri.parse('http://localhost/merhaba')));
  print(await resp.readAsString());
}

Beklenen çıktı

yol: /merhaba

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Async handler dönüş tipi

Soru
Future<____> dbHandler(Request r) async { ... }
Cevap
Future<Response> dbHandler(Request r) async { ... }

Açıklama: async handler Future<Response> döndürür.

2 Handler senkron olabilir mi?

  • Hayır, her zaman async
  • Evet, Response döndürebilir Doğru cevap
  • Yalnızca Future<Response>
  • Yalnızca Stream<Response>

Açıklama: handler senkron Response da döndürebilir (FutureOr sayesinde).

3 Request parçalarını eşleştir

Kavram Anlamı
req.method GET/POST
req.requestedUri URL
req.headers Başlıklar
req.readAsString Gövde

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