Axios: что это, HTTP-запросы и основы работы с API

Автор: IT Sectr Опубликовано: 2026-03-07 Время чтения: 8 мин

Axios — это HTTP-клиент с открытым исходным кодом для JavaScript и TypeScript, работающий как в браузере, так и в среде Node.js. Библиотека предоставляет удобный Promise-based интерфейс для отправки HTTP-запросов с поддержкой перехватчиков, автоматической сериализацией JSON и возможностью отмены запросов. По данным официального репозитория на GitHub, проект насчитывает более 100 тысяч звёзд. Axios является одной из самых популярных библиотек для работы с REST API в экосистеме JavaScript.

Главное

  • Axios — HTTP-клиент на Promise API для браузера и Node.js с поддержкой TypeScript
  • Перехватчики — interceptors позволяют изменять запросы и ответы до их обработки в коде
  • Автоматическая трансформация — библиотека автоматически парсит JSON в ответе и сериализует данные в запросе
  • Отмена запросов — встроенный механизм AbortController для отмены зависших или ненужных запросов
  • Загрузка файлов — поддержка прогресса загрузки через onUploadProgress и onDownloadProgress

Что такое Axios?

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

  • Promise API — все операции возвращают Promise, что упрощает асинхронный код
  • Поддержка TypeScript — полная типизация для всех методов и конфигураций
  • Интерсепторы — middleware для обработки запросов и ответов
  • Трансформация — автоматическое преобразование данных на входе и выходе

Архитектура Axios и принцип работы

Архитектура Axios основана на концепции адаптеров (adapters). Библиотека абстрагирует транспортный слой: в браузере используется XMLHttpRequest, в Node.js — модуль http или https. Это позволяет иметь единый интерфейс независимо от среды выполнения.

Каждый запрос проходит через цепочку перехватчиков (interceptors), которые могут модифицировать конфигурацию запроса или ответа. После интерсепторов запрос передаётся в адаптер, который выполняет реальный HTTP-вызов. Ответ затем проходит через ответные интерсепторы перед тем, как попасть в код приложения.

Жизненный цикл запроса Axios

  1. Создание конфигурации — метод, URL, заголовки, тело запроса
  2. Request interceptor — модификация конфигурации, добавление токенов
  3. HTTP-вызов — выполнение через адаптер браузера или Node.js
  4. Response interceptor — трансформация ответа, обработка ошибок
  5. Возврат результата — Promise разрешается с данными или отклоняется

Основные возможности Axios

Axios включает множество встроенных возможностей, которые делают его удобным выбором для работы с HTTP в мобильных и веб-приложениях. Рассмотрим ключевые из них.

Автоматическая трансформация данных

При отправке запроса Axios автоматически преобразует объект JavaScript в JSON-строку с помощью JSON.stringify. При получении ответа библиотека парсит JSON обратно в объект. Это избавляет разработчика от ручной сериализации и десериализации данных.

Защита от CSRF

В браузерной среде Axios автоматически подставляет заголовки XSRF-TOKEN из cookie, защищая приложение от межсайтовой подделки запросов. Для этого достаточно настроить сервер на передачу токена в cookie с именем XSRF-TOKEN.

Таймауты и отмена запросов

Библиотека поддерживает установку таймаута через параметр timeout и отмену запроса через AbortController. Это особенно важно в мобильных приложениях с нестабильным соединением, где зависшие запросы потребляют батарею и трафик.

Установка и настройка Axios

Установка Axios выполняется через любой пакетный менеджер. Библиотека доступна в реестре npm и может быть подключена как в Node.js, так и в браузерных проектах. Для TypeScript типы включены в основной пакет, дополнительных зависимостей не требуется.

После установки можно создать экземпляр с базовой конфигурацией: базовый URL, таймаут по умолчанию, общие заголовки. Это позволяет не повторять одинаковые параметры в каждом запросе и централизованно управлять настройками HTTP-клиента.

bash
# Установка через npm
npm install axios

# Установка через yarn
yarn add axios

# Установка через pnpm
pnpm add axios

Создание экземпляра с конфигурацией

Рекомендуется создавать отдельный экземпляр Axios для каждого API-сервиса. Это позволяет задать базовый URL, стандартные заголовки и таймаут, которые будут применяться ко всем запросам этого экземпляра без повторения в каждом вызове.

typescript
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

Примеры запросов показывают основные паттерны использования Axios. Все примеры используют async/await синтаксис, который делает асинхронный код более читаемым по сравнению с цепочками .then().

GET-запрос с параметрами

Для получения данных с сервера используется метод axios.get. Параметры запроса передаются через объект params, который автоматически преобразуется в query-string. Ответ содержит данные в поле data, статус в status и заголовки в headers.

typescript
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;
  }
}

POST-запрос с телом

Для отправки данных на сервер используется axios.post. Вторым аргументом передаётся объект с данными, который Axios автоматически сериализует в JSON. Тип контента Content-Type по умолчанию устанавливается в application/json.

typescript
interface CreateUserDto {
  name: string;
  email: string;
  role: string;
}

async function createUser(data: CreateUserDto) {
  const response = await api.post<User>('/users', data);
  return response.data;
}

Перехватчики (Interceptors)

Интерсепторы — это middleware-функции, которые выполняются для каждого запроса или ответа. Они позволяют добавлять токены авторизации, логировать запросы, обрабатывать ошибки централизованно. Request interceptor добавляет заголовок Authorization с токеном, извлечённым из хранилища.

typescript
// 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

Обработка ошибок в Axios строится на механизме исключений. В отличие от fetch, Axios автоматически перехватывает HTTP-ошибки (4xx, 5xx) и передаёт их в catch-блок. Объект ошибки содержит информацию о ответе сервера, запросе и контексте выполнения.

Важно различать три типа ошибок: ошибка ответа сервера (response), ошибка запроса (request) и ошибка настройки (config). Первая возникает при успешном выполнении HTTP-вызова с кодом ошибки, вторая — при отсутствии ответа от сервера, третья — при неверной конфигурации запроса.

typescript
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

Сравнение 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 отличается от fetch?

Axios автоматически парсит JSON, выбрасывает исключения при HTTP-ошибках и поддерживает перехватчики. Fetch требует двух вызовов .then для JSON и не обрабатывает 4xx/5xx как ошибки. Axios также проще конфигурировать через объект настроек.

Нужно ли устанавливать Axios для TypeScript отдельно?

Нет, типы TypeScript включены в основной пакет axios. Дополнительных зависимостей вроде @types/axios устанавливать не требуется — достаточно импортировать axios из одноимённого пакета.

Как отменить запрос в Axios?

Используйте AbortController: создайте экземпляр AbortController и передайте его signal в конфигурацию запроса. При вызове controller.abort() запрос будет отменён, а Promise отклонён с соответствующим сообщением об ошибке.

Работает ли Axios с React Native?

Да, Axios полностью совместим с React Native. Библиотека использует встроенный XMLHttpRequest, который доступен в среде React Native. Все функции, включая перехватчики и отмену запросов, работают без дополнительной настройки.

Как добавить заголовки авторизации ко всем запросам?

Используйте request interceptor для централизованного добавления заголовка Authorization. Это избавляет от необходимости указывать токен в каждом запросе отдельно и позволяет единообразно обрабатывать истечение токена.

Итоги

  • Axios — это HTTP-клиент для JavaScript и TypeScript с Promise API и поддержкой браузера и Node.js
  • Перехватчики позволяют централизованно модифицировать запросы, обрабатывать ошибки и добавлять авторизацию
  • Автоматическая трансформация JSON упрощает работу с REST API без ручной сериализации
  • Отмена запросов через AbortController предотвращает утечки памяти в мобильных и веб-приложениях
  • Конфигурация экземпляра позволяет задать базовые параметры для всех запросов к API
  • TypeScript поддержка встроена в пакет — дополнительные типы не требуются
  • Axios остаётся стандартом де-факто для HTTP-клиентов в экосистеме JavaScript

Мы разработаем мобильное приложение под ключ

IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.

Обсудить проект

Читайте также