ブラウザ・Node.js 両対応 HTTP クライアント Axios 実践ガイド

Axios は Promise ベースの軽量 HTTP クライアントで、ブラウザと Node.js の両環境で同一 API を提供します。ブラウザでは内部で XMLHttpRequest を、サーバサイドでは Node.js 標準の http モジュールを利用して動作します。

主な機能

  • リクエスト/レスポンス インターセプター
  • リクエストのキャンセル/タイムアウト
  • ネストしたクエリパラメータの自動シリアライズ
  • リクエストボディの自動シリアライズ(JSON、FormData、URL エンコード)
  • アップロード/ダウンロード進捗イベント
  • XSRF トークン対策

インストール

# npm
npm install axios

# yarn
yarn add axios

# CDN
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>

基本的な使い方

GET リクエスト

import axios from 'axios';

// クエリパラメータ付き
axios.get('/api/user', { params: { id: 42 } })
  .then(res => console.log(res.data))
  .catch(console.error);

// async/await
async function fetchUser() {
  try {
    const { data } = await axios.get('/api/user/42');
    return data;
  } catch (err) {
    console.error(err);
  }
}

POST リクエスト

await axios.post('/api/user', {
  name: '山田太郎',
  email: 'taro@example.com'
});

並列リクエスト

const [profile, posts] = await Promise.all([
  axios.get('/api/user/42'),
  axios.get('/api/user/42/posts')
]);

フォーム送信

JSON 形式

const form = document.querySelector('#user-form');
const payload = Object.fromEntries(new FormData(form));

await axios.post('/api/user', payload, {
  headers: { 'Content-Type': 'application/json' }
});

multipart/form-data

const formData = new FormData();
formData.append('avatar', fileInput.files[0]);
formData.append('username', 'taro');

await axios.post('/api/upload', formData, {
  headers: { 'Content-Type': 'multipart/form-data' }
});

URL エンコード

const params = new URLSearchParams();
params.append('grant_type', 'password');
params.append('username', 'taro');
params.append('password', 'secret');

await axios.post('/oauth/token', params);

設定ベースのリクエスト

// 汎用リクエスト
await axios({
  method: 'patch',
  url: '/api/user/42',
  data: { status: 'active' }
});

// ストリームダウンロード(Node.js)
await axios({
  method: 'get',
  url: 'https://example.com/large.zip',
  responseType: 'stream'
}).then(res => res.data.pipe(fs.createWriteStream('large.zip')));

メソッドエイリアス

axios.request(config)
axios.get(url[, config])
axios.delete(url[, config])
axios.head(url[, config])
axios.options(url[, config])
axios.post(url[, data[, config]])
axios.put(url[, data[, config]])
axios.patch(url[, data[, config]])

タグ: Axios http-client Promise Fetch-API form-data

7月22日 01:05 投稿