Axios — это HTTP-клиент с открытым исходным кодом для JavaScript и TypeScript, работающий как в браузере, так и в среде Node.js. Библиотека предоставляет удобный Promise-based интерфейс для отправки HTTP-запросов с поддержкой перехватчиков, автоматической сериализацией JSON и возможностью отмены запросов. По данным официального репозитория на GitHub, проект насчитывает более 100 тысяч звёзд. Axios является одной из самых популярных библиотек для работы с REST API в экосистеме JavaScript.
Главное
Axios — это библиотека на JavaScript, предназначенная для выполнения HTTP-запросов из браузера и среды Node.js. Она построена поверх XMLHttpRequest в браузере и модуля http в Node.js, предоставляя единый API для обеих платформ.
Основное преимущество Axios перед нативным fetch — автоматическая обработка JSON, поддержка перехватчиков и более удобная работа с ошибками. В отличие от fetch, Axios не требует двух вызовов .then для получения JSON-тела ответа и выбрасывает исключение при HTTP-ошибках (4xx, 5xx) автоматически.
Библиотека поддерживает все основные HTTP-методы: GET, POST, PUT, DELETE, PATCH и HEAD. Может использоваться как в простых проектах, так и в крупных корпоративных приложениях с сотнями тысяч запросов ежедневно.
Архитектура Axios основана на концепции адаптеров (adapters). Библиотека абстрагирует транспортный слой: в браузере используется XMLHttpRequest, в Node.js — модуль http или https. Это позволяет иметь единый интерфейс независимо от среды выполнения.
Каждый запрос проходит через цепочку перехватчиков (interceptors), которые могут модифицировать конфигурацию запроса или ответа. После интерсепторов запрос передаётся в адаптер, который выполняет реальный HTTP-вызов. Ответ затем проходит через ответные интерсепторы перед тем, как попасть в код приложения.
Axios включает множество встроенных возможностей, которые делают его удобным выбором для работы с HTTP в мобильных и веб-приложениях. Рассмотрим ключевые из них.
При отправке запроса Axios автоматически преобразует объект JavaScript в JSON-строку с помощью JSON.stringify. При получении ответа библиотека парсит JSON обратно в объект. Это избавляет разработчика от ручной сериализации и десериализации данных.
В браузерной среде Axios автоматически подставляет заголовки XSRF-TOKEN из cookie, защищая приложение от межсайтовой подделки запросов. Для этого достаточно настроить сервер на передачу токена в cookie с именем XSRF-TOKEN.
Библиотека поддерживает установку таймаута через параметр timeout и отмену запроса через AbortController. Это особенно важно в мобильных приложениях с нестабильным соединением, где зависшие запросы потребляют батарею и трафик.
Установка Axios выполняется через любой пакетный менеджер. Библиотека доступна в реестре npm и может быть подключена как в Node.js, так и в браузерных проектах. Для TypeScript типы включены в основной пакет, дополнительных зависимостей не требуется.
После установки можно создать экземпляр с базовой конфигурацией: базовый URL, таймаут по умолчанию, общие заголовки. Это позволяет не повторять одинаковые параметры в каждом запросе и централизованно управлять настройками HTTP-клиента.
# Установка через npm
npm install axios
# Установка через yarn
yarn add axios
# Установка через pnpm
pnpm add axios
Рекомендуется создавать отдельный экземпляр Axios для каждого API-сервиса. Это позволяет задать базовый URL, стандартные заголовки и таймаут, которые будут применяться ко всем запросам этого экземпляра без повторения в каждом вызове.
import axios from 'axios';
const api = axios.create({
baseURL: 'https://api.example.com/v1',
timeout: 10000,
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json'
}
});
Примеры запросов показывают основные паттерны использования Axios. Все примеры используют async/await синтаксис, который делает асинхронный код более читаемым по сравнению с цепочками .then().
Для получения данных с сервера используется метод axios.get. Параметры запроса передаются через объект params, который автоматически преобразуется в query-string. Ответ содержит данные в поле data, статус в status и заголовки в headers.
interface User {
id: number;
name: string;
email: string;
}
async function getUsers() {
try {
const response = await api.get<User[]>('/users', {
params: { page: 1, limit: 10 }
});
return response.data;
} catch (error) {
console.error('Ошибка загрузки пользователей', error);
throw error;
}
}
Для отправки данных на сервер используется axios.post. Вторым аргументом передаётся объект с данными, который Axios автоматически сериализует в JSON. Тип контента Content-Type по умолчанию устанавливается в application/json.
interface CreateUserDto {
name: string;
email: string;
role: string;
}
async function createUser(data: CreateUserDto) {
const response = await api.post<User>('/users', data);
return response.data;
}
Интерсепторы — это middleware-функции, которые выполняются для каждого запроса или ответа. Они позволяют добавлять токены авторизации, логировать запросы, обрабатывать ошибки централизованно. Request interceptor добавляет заголовок Authorization с токеном, извлечённым из хранилища.
// Request interceptor — добавляет токен авторизации
api.interceptors.request.use(
(config) => {
const token = getToken();
if (token) {
config.headers.Authorization = `Bearer ${token}`;
}
return config;
},
(error) => Promise.reject(error)
);
// Response interceptor — обрабатывает 401 ошибки
api.interceptors.response.use(
(response) => response,
(error) => {
if (error.response?.status === 401) {
redirectToLogin();
}
return Promise.reject(error);
}
);
Обработка ошибок в Axios строится на механизме исключений. В отличие от fetch, Axios автоматически перехватывает HTTP-ошибки (4xx, 5xx) и передаёт их в catch-блок. Объект ошибки содержит информацию о ответе сервера, запросе и контексте выполнения.
Важно различать три типа ошибок: ошибка ответа сервера (response), ошибка запроса (request) и ошибка настройки (config). Первая возникает при успешном выполнении HTTP-вызова с кодом ошибки, вторая — при отсутствии ответа от сервера, третья — при неверной конфигурации запроса.
import axios, { AxiosError } from 'axios';
async function safeRequest() {
try {
return await api.get('/data');
} catch (error) {
if (error instanceof AxiosError) {
if (error.response) {
console.warn('Ошибка ответа', error.response.status);
} else if (error.request) {
console.warn('Нет ответа от сервера');
} else {
console.warn('Ошибка конфигурации');
}
}
}
}
| HTTP-метод | Метод Axios | Описание |
|---|---|---|
| GET | axios.get(url, config) | Получение данных |
| POST | axios.post(url, data, config) | Создание ресурса |
| PUT | axios.put(url, data, config) | Обновление ресурса |
| DELETE | axios.delete(url, config) | Удаление ресурса |
| PATCH | axios.patch(url, data, config) | Частичное обновление |
Сравнение Axios с нативным Fetch API помогает понять, когда каждая технология уместна. Fetch — встроенный в браузер API, не требующий установки. Axios — сторонняя библиотека с дополнительными возможностями. Для простых запросов достаточно fetch, для сложных приложений с перехватчиками и централизованной обработкой ошибок удобнее Axios.
Fetch не считает HTTP-ошибки (4xx, 5xx) исключениями — нужно проверять response.ok. Fetch требует двух вызовов .then() для получения JSON: response.json() затем возвращает Promise с данными. Axios делает это автоматически. Fetch не поддерживает прогресс загрузки файлов без дополнительной полифиллы. Axios имеет встроенные onUploadProgress и onDownloadProgress.
В Node.js Fetch доступен с версии 18 как экспериментальная функция, а Axios работает стабильно начиная с Node.js 10. Для проектов, поддерживающих старые версии Node.js, выбор очевиден в пользу Axios. Для современных браузерных проектов без сложной обработки запросов fetch может быть достаточным.
Часто задаваемые вопросы
Axios автоматически парсит JSON, выбрасывает исключения при HTTP-ошибках и поддерживает перехватчики. Fetch требует двух вызовов .then для JSON и не обрабатывает 4xx/5xx как ошибки. Axios также проще конфигурировать через объект настроек.
Нет, типы TypeScript включены в основной пакет axios. Дополнительных зависимостей вроде @types/axios устанавливать не требуется — достаточно импортировать axios из одноимённого пакета.
Используйте AbortController: создайте экземпляр AbortController и передайте его signal в конфигурацию запроса. При вызове controller.abort() запрос будет отменён, а Promise отклонён с соответствующим сообщением об ошибке.
Да, Axios полностью совместим с React Native. Библиотека использует встроенный XMLHttpRequest, который доступен в среде React Native. Все функции, включая перехватчики и отмену запросов, работают без дополнительной настройки.
Используйте request interceptor для централизованного добавления заголовка Authorization. Это избавляет от необходимости указывать токен в каждом запросе отдельно и позволяет единообразно обрабатывать истечение токена.
Итоги
Мы разработаем мобильное приложение под ключ
IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.