Обработка частичных отказов во внешних сервисах
Python
Senior
Яндекс
Как вы проектируете обёртку над внешним HTTP-сервисом в Python (например, через `httpx`/`requests`), чтобы корректно обрабатывать таймауты, повторные попытки и частичные отказы?
Ответы
Обёртка над HTTP-клиентом
Типичный подход:
- установить разумные таймауты (connect/read);
- реализовать retry c backoff только для идемпотентных операций;
- чётко различать ошибки сети, таймаута и бизнес-ошибки.
Пример с `httpx`:
```python
import httpx
class ApiError(Exception):
pass
async def fetch_user(client: httpx.AsyncClient, user_id: int):
try:
resp = await client.get(f'/users/{user_id}', timeout=5.0)
except httpx.TimeoutException as exc:
raise ApiError('timeout') from exc
resp.raise_for_status()
return resp.json()
```