Cache ve HTTP client
Cache ve dış HTTP bağlantılarını uygulamanın DI ve kaynak yaşam döngüsüne dahil edin.
Cache ve dış HTTP client’ı her request’te yeniden kurmak yerine Lily’nin DI servisleriyle kullanabilirsiniz. Bu entegrasyonlar lilyrs feature’larıyla seçilir; HTTP host’u bunları otomatik etkinleştirmez.
Redis cache#
lilyrs::redis typed JSON/binary envelope, TTL, sınırlandırılmış scan, operation context ve factory modu sağlar. Tek Redis kurulumu için rate limiting sayfasındaki dependency/config örneğini kullanın.
CacheService üzerinden configured operation context oluşturun. Request cancellation’ını Redis token’ına bağlamak için guard örneğindeki açık köprüyü kullanın. Kısa convenience API’leri HTTP cancellation’ını kendiliğinden almaz.
Birden fazla Redis cell’i için redis yerine redis-factory feature’ını seçin ve named cell config’iyle lilyrs::redis::CacheFactory kullanın. İki mod aynı dependency graph içinde birlikte açılamaz. Configuration bölümü [cache] olarak kalır.
Cache entegrasyonunu eklemek otomatik HTTP response caching veya session store oluşturmaz. Cache key’i, TTL ve invalidation politikanızı domain katmanında tanımlayın.
Named HTTP client#
lilyrs::http_client::LilyHttpClientFactory, configuration’dan named profilleri hazırlar ve client kaynaklarını yönetir. Mevcut lilyrs bağımlılığında http-client feature’ını açıp uygulama servisinizde factory’yi inject edin. Redis de kullanıyorsanız feature listesine redis veya redis-factory seçiminizi ayrıca ekleyin.
lilyrs = { version = "0.1.0", features = ["http-api", "http-client"] }[http_client_factory]
connect_timeout_secs = 5
request_timeout_secs = 15
[http_client_factory.clients.payment_api]
base_address = "https://payments.example.com"Örnek adresi kendi dış servisinizin adresiyle değiştirin. base_address profile’ın URL alanıdır.
async fn send_payment_request(
factory: &lilyrs::http_client::LilyHttpClientFactory,
) -> Result<(), Box<dyn std::error::Error>> {
let client = factory.get("payment_api")?;
let request = client.get("/transactions")?.build()?;
let response = client.execute(request).await?;
println!("status={}", response.status().as_u16());
Ok(())
}Bu parça payment_api adlı profile ihtiyaç duyar. Profile ait base URL, request/response bounds ve timeout ayarlarını lily_http_client config sözleşmesine göre doldurun. Factory’yi handler’da elle initialize etmeyin; sahibi container’dır.
Yanıt modelleri#
Dış HTTP client’ın response modeli, server action’ının response modelinden ayrıdır. Dış servisten gelen gövdeyi domain DTO’suna dönüştürüp kendi endpoint sözleşmenizle yanıtlayın. Dış servisin hatasını veya header’larını kontrolsüz biçimde public API’ye taşımayın.
Client’ın kapsamlı profile ve transport seçenekleri ekosistem referansıdır; HTTP uygulamanızın kurulumunda yalnız kullandığınız entegrasyonu etkinleştirin.
Bu sayfanın kaynakları v0.1.0
Anlatım, incelenen framework commit’ine dayanır.