lilydocs
HTTP APIWebSocketConsumer
Mesajlar2 dk okuma

Hatalar ve doğrulama

Protocol, domain, guard ve lifecycle hatalarını ayırın; istemciye bounded ve güvenli hata mesajı gönderin.

Mesajın parse edilmesi, kimliğin yetkili olması ve domain kuralının sağlanması farklı kontrollerdir. Hata hangi aşamada oluştuysa o aşamanın typed sonucunu kullanın.

Hata sınırları#

Sınır Tip / sonuç
HTTP 101 öncesi WsHandshakeRejection
Envelope, namespace, route Protocol error veya Close
Domain/action WebSocketActionError
Guard WebSocketGuardRejection: error, ACK veya Close
Connected/disconnected WebSocketLifecycleError
Decode/encode WebSocketCodecError
Fan-out ConnectionError, partial receipt

101 sonrasında HTTP status dönmeyin. Lifecycle hatası bir message ACK'i değildir. Handshake ve client hedefleri kendi hata sözleşmelerine sahiptir.

Parse ve iş kuralı#

Payload<T>, Serde ile DTO parse eder. Boş isim, geçersiz tarih aralığı veya kullanıcının nesneye erişimi ayrıca kontrol edilir. Genel bir DTO validation derive varmış gibi annotation eklemeyin; servis, özel extractor veya action sınırında kuralı kurun.

Action içinde domain doğrulaması
if input.text.trim().is_empty() {
    return Err(WebSocketActionError::rejected(
        WebSocketErrorCode::new("TEXT_REQUIRED").expect("sabit kod"),
        "Metin boş olamaz.",
    ).expect("sabit mesaj"));
}

Bu parçanın DTO ve import'larıyla birlikte tam örneği vardır. AuthorizedSubject extractor'ı kimlik varlığını kontrol eder; credential doğrulama yapmaz.

Public metin ve iç hata#

Error code static, en fazla 64 byte olmalıdır. İlk karakter büyük ASCII harf; devamı büyük harf, rakam veya underscore'dur. Public mesaj boş olamaz, kontrol karakteri içeremez ve en fazla 1024 byte'tır. Close reason en fazla 123 byte'tır; Close code da geçerli olmalıdır.

WebSocketActionError::internal(source) asıl hatayı source() üzerinden korur; Debug/Display ve wire metninde kaynağın gizli içeriğini tekrar etmez. Uygulamanın kendi log'ları için de uygun alanları seçin. Kontrol ettiğiniz sabit code/metin için örnekteki expect kullanılabilir; kullanıcıdan gelen metne doğrulamasız expect uygulamayın.

Rejection ve retry#

Guard'ın ack(code, public_message) sonucu güvenli {code, message} taşır; keyfi DTO veya retry metadata'sı kabul etmez. ACK authority yoksa yeni ID üretilmez. Close seçerseniz bağlantıyı sonlandırmış olursunuz; yalnızca mesaj reddi için error seçimi yeterli olabilir.

Serialization ve transport hataları action başarısından sonra da oluşabilir. Hata döndü diye bütün yan etkilerin geri alındığını varsaymayın. Transaction, kısmi yayın ve deadline davranışlarını ayrı ele alın.

Bu sayfanın kaynakları v0.1.0

Anlatım, incelenen framework commit’ine dayanır.

HIZLI BAŞLANGIÇ
Dokümantasyon
Kaynak kod