В чем разница между fetch и axios
Разбор вопроса «В чем разница между fetch и axios» для Frontend Developer: что проверяет интервьюер, ключевые тезисы, практические примеры и частые ошибки.
Вопрос
В чем разница между fetch и axios
Профессия
Frontend Developer
Что хочет услышать интервьюер
Интервьюер хочет убедиться, что кандидат понимает различия между нативным API fetch и библиотекой Axios, включая их особенности, преимущества и ограничения. Также важно, чтобы кандидат мог объяснить, в каких случаях лучше использовать один инструмент вместо другого.
Ключевые тезисы
- Fetch — это нативный API браузера для выполнения HTTP-запросов, тогда как Axios — это сторонняя библиотека.
- Axios автоматически преобразует данные в JSON, а fetch требует ручного вызова метода .json().
- Axios имеет встроенную поддержку обработки ошибок, в то время как fetch требует проверки статуса ответа вручную.
- Axios поддерживает отмену запросов и установку тайм-аутов, что в fetch требует использования AbortController.
- Axios работает как в браузере, так и в Node.js, а fetch изначально доступен только в браузере.
Подробный ответ
Fetch и Axios — это два популярных инструмента для выполнения HTTP-запросов в JavaScript. Основное отличие заключается в том, что Fetch — это нативный API браузера, доступный в современных браузерах без необходимости установки дополнительных библиотек, тогда как Axios — это сторонняя библиотека, которая требует установки через npm или yarn. Fetch предоставляет базовый функционал для работы с запросами, но требует больше ручного контроля, например, для преобразования данных в JSON или обработки ошибок. Axios, напротив, предлагает более удобный интерфейс, автоматически преобразует данные в JSON и имеет встроенные механизмы для обработки ошибок, отмены запросов и установки тайм-аутов. Еще одно важное отличие — Axios работает как в браузере, так и в Node.js, что делает его универсальным инструментом для работы с HTTP-запросами в разных средах.
Практические примеры
Пример 1
Пример использования fetch для выполнения GET-запроса: fetch('https://api.example.com/data').then(response => { if (!response.ok) { throw new Error('Network response was not ok'); } return response.json(); }).then(data => console.log(data)).catch(error => console.error('Error:', error));Пример 2
Пример использования Axios для выполнения GET-запроса: axios.get('https://api.example.com/data').then(response => console.log(response.data)).catch(error => console.error('Error:', error));Пример 3
Пример отмены запроса с использованием AbortController в fetch: const controller = new AbortController(); fetch('https://api.example.com/data', { signal: controller.signal }).then(response => response.json()).then(data => console.log(data)).catch(error => console.error('Error:', error)); controller.abort();Пример 4
Пример установки тайм-аута в Axios: axios.get('https://api.example.com/data', { timeout: 5000 }).then(response => console.log(response.data)).catch(error => console.error('Error:', error));Частые ошибки
- Ошибка: Не проверять статус ответа в fetch. Например, если сервер возвращает статус 404, fetch не выбросит ошибку, и нужно вручную проверять свойство response.ok.
- Ошибка: Использовать Axios без необходимости, когда достаточно функционала fetch. Это может привести к увеличению размера бандла приложения.
Связанные темы
- REST API
- Асинхронность в JavaScript
- AbortController
- Интерцепторы в Axios
Follow-up вопросы
Как обрабатываются ошибки в fetch и axios?
Уровень: basic
В fetch ошибки сети автоматически отклоняют промис, но HTTP-ошибки (404, 500) требуют ручной проверки response.ok. Axios отклоняет промис для любых ошибок (HTTP и сети), что упрощает обработку.
Можно ли отменить запрос в fetch? Как?
Уровень: intermediate
Да, с помощью AbortController. Нужно создать контроллер, передать signal в fetch, и вызвать abort() для отмены. Axios использует CancelToken (в старых версиях) или AbortController аналогично.
Какой вариант лучше для работы с REST API и почему?
Уровень: intermediate
Axios удобнее для REST благодаря автоматической трансформации JSON, интерцепторам и встроенной обработке ошибок. Fetch требует больше boilerplate-кода, но не требует зависимостей.
Как реализовать интерцепторы запросов/ответов в fetch?
Уровень: advanced
Вручную: обернуть fetch в функцию, которая модифицирует запрос/ответ. В Axios это встроенная фича через axios.interceptors.request/response.use().
Какие преимущества fetch перед axios?
Уровень: intermediate
- Нативный API — не требует установки. 2) Лучшая поддержка новых стандартов (например, Streams API). 3) Более гибкий для нестандартных сценариев.
Против чего борется CORS
Разбор вопроса «Против чего борется CORS» для Frontend Developer: что проверяет интервьюер, ключевые тезисы, практические примеры и частые ошибки.
Что такое JWT-токен 😎
JWT это компактный подписанный токен с claims, который часто используют для передачи данных об аутентификации и правах доступа. Вы разберете структуру JWT, поймете, что подпись реально защищает, где хранить токен на фронтенде и какие риски важно назвать на интервью.