Проверяет понимание типичных ошибок при реализации HTTP-клиента для внешнего сервиса, что важно для надежности интеграций.
При разработке HTTP-клиента для внешнего сервиса разработчики часто сосредотачиваются на основной логике запросов, забывая о надежности и устойчивости. Внешние сервисы могут быть недоступны, медленны или возвращать ошибки, поэтому клиент должен быть спроектирован с учетом этих рисков.
// Плохо: нет таймаута, нет обработки ошибок
const response = await fetch('https://api.example.com/data');
const data = await response.json();
// Если сервис недоступен, запрос зависнет навсегда// Хорошо: таймаут, проверка статуса, ретраи
async function fetchWithRetry(url, retries = 3) {
for (let i = 0; i < retries; i++) {
try {
const controller = new AbortController();
const timeout = setTimeout(() => controller.abort(), 5000);
const response = await fetch(url, { signal: controller.signal });
clearTimeout(timeout);
if (!response.ok) throw new Error(`HTTP ${response.status}`);
return await response.json();
} catch (err) {
if (i === retries - 1) throw err;
await new Promise(res => setTimeout(res, 1000 * Math.pow(2, i)));
}
}
}Применяйте таймауты, обработку статус-кодов, ретраи с экспоненциальной задержкой, пул соединений и логирование. Это обеспечит стабильность интеграции и упростит отладку в продакшене.