ブラウザ
 Computer >> コンピューター >  >> ソフトウェア >> ブラウザ

Axiosを使ってJavaScriptで簡単にHTTPリクエストを送信する方法

JavaScriptを学びたい方は、jshandbook.comの電子書籍もぜひご覧ください。

はじめに

Axiosは、HTTPリクエストを実行するために広く使われている人気のJavaScriptライブラリです。ブラウザとNode.jsの両方の環境で動作します。

IE8以降を含むすべてのモダンブラウザをサポートしており、Promiseベースで設計されているため、async/await構文を使ってXHRリクエストを簡潔かつ読みやすく記述できます。

ネイティブのFetch APIではなくAxiosを使うメリットには、次のようなものがあります。

  • 古いブラウザにも対応している(Fetchはポリフィルが必要)
  • リクエストを中断(キャンセル)できる
  • レスポンスのタイムアウトを設定できる
  • CSRF保護が組み込まれている
  • アップロードの進捗表示に対応している
  • JSONデータを自動的に変換してくれる
  • Node.jsでも動作する

インストール

Axiosはnpmでインストールできます。

npm install axios

yarnを使う場合は以下のとおりです。

yarn add axios

また、unpkg.com経由でページに直接読み込むことも可能です。

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

Axios APIの基本

HTTPリクエストは、axiosオブジェクトに対して直接実行できます。

axios({
  url: 'https://dog.ceo/api/breeds/list/all',
  method: 'get',
  data: {
    foo: 'bar'
  }
})

ただし、利便性の観点から、実際には以下のようなショートカットメソッドを使うのが一般的です。

  • axios.get()
  • axios.post()

jQueryで$.ajax()の代わりに$.get()$.post()を使うのと同じイメージです。

さらにAxiosは、あまり頻繁には使われないものの実務で登場するHTTPメソッドにも対応しています。

  • axios.delete()
  • axios.put()
  • axios.patch()
  • axios.options()

このほか、レスポンスボディを破棄してHTTPヘッダだけを取得するaxios.head()も用意されています。

GETリクエスト

Axiosの便利な使い方として、モダンな(ES2017の)async/await構文との組み合わせが挙げられます。

次のNode.jsの例では、Dog APIにaxios.get()でアクセスして全犬種のリストを取得し、その数を数えています。

const axios = require('axios')

const getBreeds = async () => {
  try {
    return await axios.get('https://dog.ceo/api/breeds/list/all')
  } catch (error) {
    console.error(error)
  }
}

const countBreeds = async () => {
  const breeds = await getBreeds()

  if (breeds.data.message) {
    console.log(`Got ${Object.entries(breeds.data.message).length} breeds`)
  }
}

countBreeds()

async/awaitを使いたくない場合は、従来のPromise構文でも同じ処理を書けます。

const axios = require('axios')

const getBreeds = () => {
  try {
    return axios.get('https://dog.ceo/api/breeds/list/all')
  } catch (error) {
    console.error(error)
  }
}

const countBreeds = async () => {
  const breeds = getBreeds()
    .then(response => {
      if (response.data.message) {
        console.log(
          `Got ${Object.entries(response.data.message).length} breeds`
        )
      }
    })
    .catch(error => {
      console.log(error)
    })
}

countBreeds()

GETリクエストへのパラメータ追加

GETリクエストでは、https://site.com/?foo=barのようにURLにクエリパラメータを含めることができます。

Axiosでは、そのままURLを指定するだけで実現できます。

axios.get('https://site.com/?foo=bar')

あるいは、オプションのparamsプロパティを使う方法もあります。こちらの方がコードの可読性が高く、パラメータの管理もしやすいでしょう。

axios.get('https://site.com/', {
  params: {
    foo: 'bar'
  }
})

POSTリクエスト

POSTリクエストの送信もGETとほぼ同じ要領です。axios.getの代わりにaxios.postを使うだけです。

axios.post('https://site.com/')

POSTで送信するデータを含んだオブジェクトは、第2引数として渡します。

axios.post('https://site.com/', { foo: 'bar' })
JavaScriptを学びたい方は、jshandbook.comの電子書籍もぜひご覧ください。
  1. JavaScriptのオブジェクト配列に配列メソッドを適用する方法

    JavaScriptでは、オブジェクトが格納された配列に対しても、通常の配列と同じようにpop()、push()、splice()などの標準的な配列メソッドをそのまま使用できます。オブジェクト配列はあくまで「配列」であるため、要素としてオブジェクトが入っていても配列操作のAPIは共通で動作します。 コード例 以下は、JavaScriptオブジェクトの配列に対して配列メソッドを使用するサンプルコードです。 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8

  2. JavaScriptのクロージャでプライバシー(変数の隠蔽)を実現する方法

    はじめに:クロージャとは何かJavaScriptにはクラスベース言語のような「private」修飾子が存在しないため、変数を外部から直接アクセスできないようにしたい場合、クロージャ(Closure)を活用するのが定番のテクニックです。クロージャとは、「関数が定義されたときのスコープ(外側の変数)への参照を保持し続ける仕組み」のことです。この性質を利用すると、関数の内部に閉じ込めた変数は外部から直接参照・書き換えできなくなり、いわばプライベートな状態として扱うことができます。以下に、クロージャを使ってプライバシー(変数の隠蔽)を実現するサンプルコードを示します。サンプルコード<!DOCTY