CodeBlanks Logo Icon CodeBlanks

Shelf API

Shelf ile REST API iskeletini kurarsın.

Shelf HTTP sunucusu

shelf, Dart için hafif HTTP sunucu paketidir. import 'package:shelf/shelf.dart'; ile içe aktarılır. Handler bir fonksiyon türüdür: Request alır, Response döndürür. shelf_router paketi yol (route) eşleştirme ekler.

Bir işleyici yazmak: Response taskHandler(Request req, TaskService svc) { return Response.ok('...'); }. Response.ok(body) 200 durum koduyla yanıt döndürür. İşleyici bir TaskService alır; böylece servis değiştirilebilir. Shelf, büyük bir framework olmadan REST API kurmaya olanak tanır; sadece işleyici zinciri yeterlidir.

taskHandler fonksiyonu

taskHandler, bir HTTP isteğini alan ve görev listesini yanıtlayan fonksiyondur. Request req ile gelen isteği, TaskService svc ile hızmeti alır. svc.list().length ile görev sayısını bulur.

Örnek: Response taskHandler(Request req, TaskService svc) { return Response.ok('görevler: ${svc.list().length}'); }. Burada svc dışarıdan enjekte edilir; işleyici hangi servisi kullandığını bilmez. Bu, test edilebilirliği artırır: testte sahte servis, üretimde gerçek servis verilir. Shelf'in Router sınıfıyla işleyici bir yola bağlanır ve sunucu başlatılır.

Uygulama taskHandler fonksiyonu

import 'package:shelf/shelf.dart'; ve import 'package:shelf_router/shelf_router.dart'; satırlarını en üste ekle. Response taskHandler(Request req, TaskService svc) fonksiyonunu yaz; içinde return Response.ok('görevler: ${svc.list().length}'); yap. main içine final svc = InMemoryTaskService(); ve print('Shelf: ${svc.list().length} görev') ekle.

Başlangıç kodu

main.dart
class Task {
  final int id;
  final String title;
  Task({required this.id, required this.title});
}

abstract class TaskService {
  List<Task> list();
}

class InMemoryTaskService implements TaskService {
  @override
  List<Task> list() => [Task(id: 1, title: 'görev 1')];
}

// shelf ve shelf_router paketlerini içe aktar
// taskHandler fonksiyonunu yaz (Request ve TaskService al, Response dön)

void main() {
  // Shelf bilgisini yazdır
}

Örnek çözüm

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

class Task {
  final int id;
  final String title;
  Task({required this.id, required this.title});
}

abstract class TaskService {
  List<Task> list();
}

class InMemoryTaskService implements TaskService {
  @override
  List<Task> list() => [Task(id: 1, title: 'görev 1')];
}

Response taskHandler(Request req, TaskService svc) {
  return Response.ok('görevler: ${svc.list().length}');
}

void main() {
  final svc = InMemoryTaskService();
  print('Shelf: ${svc.list().length} görev');
}

Beklenen çıktı

Shelf: 1 görev

Soru ve cevaplar

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

1 shelf paket içe aktarımı

Soru
import 'package:____/shelf.dart';
Cevap
import 'package:shelf/shelf.dart';

Açıklama: shelf paketi package:shelf/shelf.dart ile içe aktarılır.

2 Response.ok ne yapar?

  • Veritabanı açar
  • Hata fırlatır
  • Dosya siler
  • 200 yanıtı döndürür Doğru cevap

Açıklama: Response.ok 200 durum koduyla yanıt döndürür.

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

Kavram Anlamı
shelf HTTP sunucu
Response Yanıt
Request İstek
taskHandler İşleyici

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