Doğrulama ve özel extractor
Parsing hatalarını iş kurallarından ayırın ve güvenli HTTP hataları döndürün.
Typed extraction, veriyi Rust tipine dönüştürür. Bir alanın boş olmaması, kullanıcının mevcut olması veya iki alanın uyumlu olması gibi iş kuralları ayrıca doğrulanır.
DTO’nun yapısını doğrulama#
#[derive(serde::Deserialize)]
#[serde(deny_unknown_fields)]
struct CreateUser {
name: String,
}deny_unknown_fields uygulamanızın açık tercihidir. Normal Json<T> bütün DTO’larda bu kuralı otomatik etkinleştirmez. Content type uyumsuzluğu, bozuk JSON ve typed dönüşüm hataları extractor tarafından ele alınır.
İş kuralı doğrulama#
Controller örneğindeki action’da adın boş olmadığı kontrol edilir:
if input.name.trim().is_empty() {
return Err(HttpApiError::ValidationError("name is required".into()));
}ValidationError HTTP 422 üretir. Payload string’inin istemciye aynen döneceğini varsaymayın; built-in hatalar güvenli public mesaj sözleşmesini kullanır. Alan bazlı public hata şeması gerekiyorsa özel hata converter’ı tanımlayın.
Yeniden kullanılabilir extractor#
| İhtiyaç | Trait |
|---|---|
| Body tüketmeden request parçası doğrulamak | FromRequestParts |
| Aynı parçanın yokluğunu opsiyonel ele almak | OptionalFromRequestParts |
| Body tüketerek yeni bir veri tipi üretmek | FromRequest |
Özel extractor’ın Rejection türü Into<HttpApiError> sağlamalıdır. Özel body extractor son typed parametre olmalıdır. Request/body referanslarını işlem dışına taşımayın.
Hata türünü doğru seçme#
| Durum | Tipik HTTP sonucu |
|---|---|
| Bozuk veri veya typed dönüşüm | 400 |
| Desteklenmeyen content type | 415 |
| Body sınırının aşılması | 413 |
| Örnekteki business validation | 422 |
Lily’nin genişletme noktaları extractor, guard, middleware ve response converter’dır. NestJS anlatım sırası tanıdık gelse de ValidationPipe API’si Lily’nin bir parçası değildir.
Bu sayfanın kaynakları v0.1.0
Anlatım, incelenen framework commit’ine dayanır.