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:
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:
{
"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.