Axios:インターセプターとベース URL
baseURL を指定して Axios インスタンスを作成し、リクエストインターセプターで認証トークンを付加し、レスポンスインターセプターで 4xx/5xx エラーを処理します。
「Axios:インターセプターとベース URL」はCoddyKit上の無料Frontend Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはFrontend Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Frontend Academyコースには全4レッスンが含まれています。
Axiosを使う理由
AxiosはXMLHttpRequestを基盤とする、広く使われているHTTPクライアントです。JSONの自動処理、リクエストとレスポンスのインターセプター、baseURLの設定、タイムアウト、リクエストのキャンセルトークンを追加で提供します。現在でも、多くのチームがfetchよりAxiosを好んで使っています。
Axiosのインストール
npmでインストールします。ブラウザーバンドルのサイズはgzip圧縮後で約14KBです。
npm install axios基本的なGETとPOST
AxiosはJSONのボディを自動的に文字列化し、JSONのレスポンスも自動的に解析します。そのため、手動でJSON.stringifyや.json()を呼び出す必要はありません。
import axios from 'axios';
const { data } = await axios.get('/api/users');
console.log(data); // already parsed
const res = await axios.post('/api/users', { name: 'Alice' });
console.log(res.data, res.status);Axiosインスタンスを作成する
API用に設定済みのインスタンスを作成すると、すべての呼び出しでbase URL、ヘッダー、タイムアウトを繰り返し指定せずに済みます。
import axios from 'axios';
export const api = axios.create({
baseURL: import.meta.env.VITE_API_URL,
timeout: 10000,
headers: { 'Content-Type': 'application/json' }
});
// Use it:
const { data } = await api.get('/users');
const res = await api.post('/users', { name: 'Alice' });リクエストインターセプター:認証トークン
同じ処理を繰り返さずに、すべてのリクエストへ認証トークンを付加します。
api.interceptors.request.use((config) => {
const token = localStorage.getItem('token');
if (token) {
config.headers.Authorization = `Bearer ${token}`;
}
return config;
});レスポンスインターセプター:グローバルエラー処理
すべてのレスポンスに対するエラー処理を一元化します。たとえば、401ではリダイレクトし、5xxではトーストを表示します。
api.interceptors.response.use(
(response) => response,
(error) => {
if (error.response?.status === 401) {
window.location.href = '/login';
}
if (error.response?.status >= 500) {
toast.error('Server error. Please try again.');
}
return Promise.reject(error);
}
);401時のトークン更新
レスポンスインターセプターを使って401を検出し、トークンを更新してから、元のリクエストを透過的に再試行します。
api.interceptors.response.use(null, async (error) => {
const originalRequest = error.config;
if (error.response?.status === 401 && !originalRequest._retry) {
originalRequest._retry = true;
const newToken = await refreshToken();
localStorage.setItem('token', newToken);
originalRequest.headers.Authorization = `Bearer ${newToken}`;
return api(originalRequest); // retry
}
return Promise.reject(error);
});URLパラメータとクエリ
Axiosではparamsオブジェクトを受け取れます。これは自動的にクエリ文字列へシリアライズされます。
const { data } = await api.get('/search', {
params: { q: 'react hooks', page: 2 }
});
// GET /search?q=react+hooks&page=2タイムアウト
遅いサーバーでリクエストがハングするのを防ぐため、リクエストのタイムアウトを設定します。
api.get('/slow-endpoint', { timeout: 5000 })
.catch(err => {
if (err.code === 'ECONNABORTED') {
console.log('Request took too long');
}
});リクエストのキャンセル
AbortController(最新のAxios)またはCancelToken(古いAPI)を使用します。
const controller = new AbortController();
api.get('/big-data', { signal: controller.signal })
.catch(err => {
if (axios.isCancel(err)) console.log('cancelled');
});
controller.abort();エラーオブジェクトの構造
Axiosのエラーには、error.response(サーバーがエラーステータスを返した場合)、error.request(レスポンスを受信できなかった場合)、またはそのどちらでもない場合(リクエストのセットアップに失敗した場合)があります。
AxiosとFetch — 使い分け
AxiosはAPIがより扱いやすく、インターセプターが組み込まれており、エラーハンドリングも簡潔です。Fetchはネイティブで、バンドルサイズが小さく、最新のストリーミングをサポートします。新しいプロジェクトではfetchと薄いラッパーの組み合わせが選ばれることが多く、既存のAxiosプロジェクトが移行することはほとんどありません。
確認問題
個々の呼び出しを変更せずに、すべてのリクエストへAuthorizationヘッダーを追加できるAxiosの機能は何ですか。
まとめ:Axios
baseURLとtimeoutを設定したインスタンスにはaxios.create()を使用します。JSONレスポンスは自動的に解析されます(res.data)。リクエストインターセプターでトークンを付与し、レスポンスインターセプターでエラー処理とトークンの更新を行います。クエリ文字列にはparamsオブジェクトを使用します。キャンセルにはAbortControllerを使用します。扱いやすさを重視するならAxios、バンドルサイズを小さくするならfetchとラッパーを選びます。
よくある質問
「Axios:インターセプターとベース URL」レッスンは無料ですか?
はい。「Axios:インターセプターとベース URL」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Frontend Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Frontend Academyコースには全4レッスンが含まれています。
「Axios:インターセプターとベース URL」で何を学びますか?
baseURL を指定して Axios インスタンスを作成し、リクエストインターセプターで認証トークンを付加し、レスポンスインターセプターで 4xx/5xx エラーを処理します。 ブラウザで直接実行するハンズオンコードでFrontend Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Frontend Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのFrontend Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「Axios:インターセプターとベース URL」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このFrontend Academyレッスンでコードを書いて実行できますか?
はい。すべてのFrontend Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Fetch API:GET・POST・PUT・DELETE
- Axios:インターセプターとベース URL
- エラーハンドリング:HTTPステータスコード
- データキャッシュのためのSWRとReact Query