Dart
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.
Örnek çözümü göster
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');
}
Kendini test et
-
shelf paket içe aktarımı
import 'package:____/shelf.dart';
Cevabı göster
import 'package:shelf/shelf.dart';
-
Response.ok ne yapar?
- Veritabanı açar
- Hata fırlatır
- Dosya siler
- 200 yanıtı döndürür
Cevabı göster
200 yanıtı döndürür — Response.ok 200 durum koduyla yanıt döndürür.
-
Shelf parçalarını eşleştir
- shelf
- HTTP sunucu
- Response
- Yanıt
- Request
- İstek
- taskHandler
- İşleyici
Sıradaki ders: Veritabanı