lilydocs
HTTP APIWebSocketConsumer
HTTP2 dk okuma

Hatalar ve localization

Domain hatalarını HTTP sözleşmesine çevirin ve hata mesajlarını yerelleştirin.

Built-in HttpApiError durum kodu, hata kodu ve güvenli public mesaj sağlar. Domain’inize özel bir hata şeması gerektiğinde IntoResponse uygulayabilirsiniz.

Özel hata yanıtı#

Manifestinize serde_json = "1" ekleyin. Bu converter ile action Result<UserView, ApiError> dönebilir:

errors.rs
use lilyrs::http_api::{
    HttpErrorCode, IntoResponse, Request, Response, ResponseBuilder,
    ResponseWriteError, ResponseWriteOutcome,
};

pub enum ApiError { UserNotFound }

#[lilyrs::http_api::async_trait::async_trait]
impl IntoResponse for ApiError {
    async fn write_to_response(self, response: &mut Response, request: &mut Request)
        -> Result<ResponseWriteOutcome, ResponseWriteError>
    {
        match self {
            Self::UserNotFound => {
                ResponseBuilder::new().status(404, "Not Found")
                    .json(serde_json::json!({ "message": "Kullanıcı bulunamadı" }))
                    .write_to_response(response, request).await?;
                Ok(ResponseWriteOutcome::rejected(Some(
                    HttpErrorCode::new("USER_NOT_FOUND").unwrap(),
                )))
            }
        }
    }
}

UserNotFound, 404 ve {"message":"Kullanıcı bulunamadı"} üretir. ResponseWriteOutcome::rejected sonucu telemetry’de beklenen uygulama reddi olarak sınıflandırır. Hata başarıyla yazıldıysa converter’ın sonucu Ok olur; teknik yazma hatası ResponseWriteError ile ayrılır.

Public mesaj ve iç ayrıntı#

Veritabanı bağlantı ayrıntılarını veya token içeriğini public hata gövdesine taşımayın. HttpApiError içindeki string, otomatik olarak aynen yayımlanan bir mesaj değildir. Özel public şemanızı bilerek tanımlayın.

Çeviri kataloğu#

Localization varsayılan olarak kapalıdır. Builder’da localization_path("./locales") veya localization_catalog(catalog) seçin. JSON locale dosyalarının anahtarları HttpApiError::error_code() değerleridir:

locales/tr.json
{
  "VALIDATION_ERROR": "Gönderilen bilgileri kontrol edin."
}

Dil sırası localization header’ı → accept-language → en şeklindedir. Çeviri bulunamazsa built-in public mesaj kullanılır.

Kataloğun yaşam döngüsü#

Katalog build sırasında okunur ve değişmez olur. Dosyayı değiştirmek çalışan uygulamada otomatik reload başlatmaz. Yeni katalog yeni uygulama başlangıcıyla yüklenir.

Bu sayfanın kaynakları v0.1.0

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

HIZLI BAŞLANGIÇ
Dokümantasyon
Kaynak kod