Apidog

オールインワンのAPI開発プラットフォーム

API設計

API仕様書生成

API設計

API Mock

APIテスト自動化

無料登録
Home / 操作ガイド / 2024最新:Axiosのリクエストをどのようにキャンセルしますか?

2024最新:Axiosのリクエストをどのようにキャンセルしますか?

フロントエンド開発の中、リクエストは非常に汎用されている概念になります。時々、送信した後、リクエストをキャンセルする必要があります。本文では、Axiosを利用してリクエストを送信する際に、当該リクエストをキャンセルする方法を皆さんに紹介します。

フロントエンド開発の中、リクエストは非常に汎用されている概念になります。時々、送信した後、リクエストをキャンセルする必要があります。本文では、Axiosを利用してリクエストを送信する際に、当該リクエストをキャンセルする方法を皆さんに紹介します。

Axiosとは

AxiosはJavaScriptで使えるHTTPクライアントライブラリです。PromiseベースのAPIを提供しているので非同期処理が扱いやすく、JSONデータの自動変換も行ってくれるためレスポンスデータの処理がしやすくなっています。リクエストの送信とレスポンスの取得が簡単に実現可能なので、HTTP通信を行う際に便利なライブラリだといえます。

Axiosの公式サイト

Axiosのインストール

Axiosを利用してAPIとのやり取りを行うために、まずはそれをパソコンにインストールする必要があります。Axiosは、インストール方法を複数提供していますので、次のような内容を参照して、適切なインストール方法を参照して下さい。

npm を利用する場合:

$ npm install axios

bower を利用する場合:

$ bower install axios

yarn を利用する場合:

$ yarn add axios

jsDelivr CDN を利用する場合:

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

unpkg CDN を利用する場合:

<script src="https://unpkg.com/axios/dist/axios.min.js"></script>

上記のいずれかの方法を利用して、Axiosをパソコンにインストールすると、それを使って、APIリクエストを送信したり、レスポンスを取得したりすることができるようになります。

Axiosでリクエストをキャンセルする

Axiosでリクエストをキャンセルする基本的な考え方は、キャンセル用のトークン(cancel token)を作成し、特定のリクエストに関連付けることになります。リクエストをキャンセルする必要がある場合は、このトークンを使ってAxiosにそのリクエストの送信をキャンセルできるようになります。

ステップ⒈Cancel Tokenの利用

Axiosは、キャンセルトークンを作成するためのCancelTokenクラスを提供しています。キャンセルトークンは実際には cancel メソッドを持つオブジェクトです。リクエストをキャンセルする一般的な手順は次のとおりです。

   // 最初に関連するライブラリとモジュールをインポートする必要があります
   import axios from 'axios';
   
   // キャンセルトークンを作成
   const source = axios.CancelToken.source();
   
   // リクエストを送信してキャンセルトークンを関連付ける
   axios.get('/api/data', {
     cancelToken: source.token
   }).then(response => {
     // リクエスト成功時の処理
   }).catch(error => {
     if (axios.isCancel(error)) {
       console.log('リクエストがキャンセルされました', error.message);
     } else {
       console.log('リクエストエラー', error.message);
     }
   });
   
   // リクエストをキャンセル
   source.cancel('リクエストキャンセルの理由');

ステップ⒉リクエスト設定を使用

CancelTokenを使う以外にも、リクエスト設定で直接 cancelToken プロパティを提供してキャンセルトークンを関連付けることができます。

   const source = axios.CancelToken.source();
   
   axios.get('/api/data', {
     cancelToken: source.token
   }).then(response => {
     // リクエスト成功時の処理
   }).catch(error => {
     // エラー処理
   });
   
   // 必要な時にリクエストをキャンセル
   source.cancel('リクエストキャンセルの理由');

Reactでリクエストキャンセルの実装

それでは、Reactでリクエストを送信し、リクエストが送信された後にユーザーが「キャンセル」ボタンをクリックしてリクエストをキャンセルする場合を想定します。このような場合は、キャンセル可能なAxiosインスタンスを作成し、リクエストの送信に使用します。

   import React, { useState } from 'react';
   import axios from 'axios';
   
   function App() {
     const [data, setData] = useState('');
     const [request, setRequest] = useState(null);
   
     const fetchData = async () => {
       const source = axios.CancelToken.source();
       setRequest(source);
   
       try {
         const response = await axios.get('/api/data', {
           cancelToken: source.token
         });
         setData(response.data);
       } catch (error) {
         if (axios.isCancel(error)) {
           console.log('リクエストがキャンセルされました', error.message);
         } else {
           console.log('リクエストエラー', error.message);
         }
       }
     };
   
     const cancelRequest = () => {
       if (request) {
         request.cancel('手動でリクエストをキャンセル');
       }
     };
   
     return (
       <div>
         <button onClick={fetchData}>リクエストを送信</button>
         <button onClick={cancelRequest}>リクエストをキャンセル</button>
         <div>{data}</div>
       </div>
     );
   }
   
   export default App;

ヒントと注意事項

  1. メモリリークを防ぐために、コンポーネントがアンインストールされたときにリクエストをキャンセルすることがおすすめです。
  2. Cancel Tokenは未完了のリクエストのみをキャンセルできます。完了済みのリクエストをキャンセルすることはできません。
  3. Cancel Tokenは同じなリクエストに対して1回しか使用できません。使用後は新しいトークンを作成する必要があります。
button

Apidogでより便利にAPIを扱う

ApidogはAPIの設計、モック、ドキュメンテーションやテストにも対応可能なAPI管理ツールになります。Apidogを使用すると、コードが全く要らなくて、直感的な操作によって、APIリクエストを簡単にサーバー上に送信してレスポンスを取得できます。また、レスポンスの自動検証機能も備えて、返してくれたレスポンスに不具合があるかどうかをも自動的に検証してくれますので、非常に便利です。

Apidogを使うと、下記画像のように、非常に直感的なUIで、APIリクエストを作成して、必要な情報(メソッド、URI、必須のパラメータなど)を記入して、リクエストを「送信」できます。

  • どのHTTPメソッドにも全面的に対応
  • データの渡し方として、クエリパラメータ、パスパラメータ、Bodyなども利用可能
  • レスポンスの不具合を自動検証
  • 認証が必要となる場合、認証と認可情報を一緒に送信することも可能
APIの単体テスト

リクエストを送信すると、APIエンドポイントからのレスポンスをすぐに取得することができますし、レスポンス内容の自動検証もその同時に行われますので、非常に便利です。

まとめ

本記事では、Axiosを使ってリクエストをキャンセルする方法について解説しました。Axiosのリクエストをキャンセルするには、Axios提供のCancelTokenクラスを使ってキャンセルトークンを作成し、そのトークンを特定のリクエストに関連付ける必要があります。

また、API関連の作業の効率性を向上するために、Apidogを利用することがおすすめです。Apidogを使えば、コーディングなしでAPIリクエストを簡単に送信・テストでき、レスポンスの自動検証も行えるので便利です。

button

Apidogのニュースレターを購読する

今すぐ購読すると、いつでもApidogから更新情報と最新観点を手に入れることができます。