Backend Dioxus — API Client
Overview
Cliente HTTP tipado para o app Dioxus consumir a API Axum, mapeando o contrato de erros do backend ({ errors: [...] }) para Result<_, ApiError>, com retry policies e caching.
Config
- Local:
features/<bc>/infrastructure/. - Usa
reqwest(json + rustls) oudioxus-http. - DTOs
serde::Deserializereutilizando tipos doshared-kernel. - Mapear qualquer erro HTTP para
ApiErrorque preserva a listaerrors: Vec<String>retornada pelo backend (contrato §5.1).
Exemplo
#[derive(serde::Deserialize)]
struct ApiErrorBody {
errors: Vec<String>,
}
async fn parse_customer_dto(resp: reqwest::Response) -> Result<CustomerDto, ApiError> {
let status = resp.status();
let text = resp.text().await.map_err(|e| ApiError::Network(e.to_string()))?;
if status.is_success() {
serde_json::from_str(&text).map_err(|_| ApiError::Parse)
} else {
let body: ApiErrorBody = serde_json::from_str(&text).unwrap_or(ApiErrorBody { errors: vec![format!("HTTP {}", status)] });
Err(ApiError::External(body.errors))
}
}
Retry / Caching
- Retry para
5xx/timeout (retry jitter exponencial), sem retry para4xx. - Caching opcional em memória (memo) para listagens readonly; invalidar em escrita.
Global Standards
- Consultar
../skills-standards.md.