原文: Here are the most popular ways to make an HTTP request in JavaScript

JavaScript には HTTP リクエストを実行できる優れたモジュールやメソッドがあり、サーバー側のリソースにデータを送受信するために使えます。この記事では、JavaScript で HTTP リクエストを実行する方法のうち、よく使われるものをいくつか紹介します。

Ajax

Ajax は非同期の HTTP リクエストを行う古典的な方法です。データは HTTP POST メソッドを使って送信され、HTTP GET メソッドを使って受信されます。GET リクエストの実行方法を見てみましょう。ここでは、ランダムなデータを JSON 形式で返してくれる、開発者向け無料オンライン REST API「JSONPlaceholder」を使用します。

Ajax で HTTP リクエストを実行するには、まず XMLHttpRequest() で新しくオブジェクトを初期化して、次に URL エンドポイントと HTTP メソッド (この例では GET) を指定します。最後に、open() メソッドを使って HTTP メソッドと URL エンドポイントを結び付け、send() メソッドを呼び出してリクエストを実行します。

この例では XMLHTTPRequest.onreadystatechange プロパティを使用して、HTTP レスポンスをコンソールログに出力します。このプロパティには readystatechange イベントが発生した時に呼び出されるイベントハンドラーを含めます。

1_zXtlRe4yRF3tZkFFvBhZeA
const Http = new XMLHttpRequest();
const url='https://jsonplaceholder.typicode.com/posts';
Http.open("GET", url);
Http.send();

Http.onreadystatechange = (e) => {
  console.log(Http.responseText)
}

ブラウザーコンソールを確認すると、データの配列が JSON 形式で返されているのが分かります。では、リクエストが完了したかどうかを知るにはどうしたらいいのでしょうか?言い換えれば、Ajax でレスポンスを扱うにはどのようにしたらいいのでしょうか。

onreadystatechange プロパティには readyStatestatus という 2 つのメソッドがあります。これを使ってリクエストの状態が確認できます。

1_UfZf6qaZwNh5Mptft4WIZA

readyState が 4 の場合は、リクエストが完了したことを意味します。readyState プロパティには 5 種類のレスポンスがあります。詳しくはこちらを参照してください。

JavaScript で直接 Ajax を呼び出す以外にも、HTTP 呼び出しの実行に便利なメソッドには、jQuery メソッドの $.Ajax などがあります。次はそちらを紹介します。

jQuery メソッド

jQuery には HTTP リクエストの扱いを楽にする多くのメソッドがあります。このメソッドを使えるようにするには、プロジェクトに jQuery ライブラリを追加します。

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

$.ajax

jQuery Ajax は、HTTP 呼び出しを行う最もシンプルなメソッドの一つです。

1_vZ4BqVQfsvtpJm_RCsCE2Q

$.ajax メソッドには多くのパラメーターが指定でき、必須の物もそうでない物もあります。その中には、受け取ったレスポンスを扱うための successerror という 2 種類のコールバックオプションがあります。

$.get メソッド

$.get メソッドは、GET リクエストを実行するために使われます。このメソッドは 2 つのパラメーターを受け付けます。エンドポイント (URL) と、コールバック関数です。

1_2koN5FJuT68WIyRKTihe5w

$.post

$.post メソッドはサーバーにデータを POST する方法です。これは 3 つのパラメーターを受け付けます。URL、POST したいデータ、そしてコールバック関数です。

1_ql6Yp1EJfD7850GXhErwyw

$.getJSON

$.getJSON メソッドは、JSON 形式のデータのみを取得します。これは 2 つのパラメーターを受け付けます。URL とコールバック関数です。

1_hdcFdVHiBiRAo1YOi_Kt0Q

jQuery にはこのように、リモートサーバーにデータを要求したり送信したりする各種メソッドが備わっています。しかし、これらのメソッドは実は $.ajax メソッドだけで実行できます。その例が下記です。

1_soPARjfQXMcZ5ccPK1QMmA

fetch

fetch は、非同期リクエストを実行できる新しい強力なウェブ API です。実のところ、HTTP リクエストの方法としてベストな、筆者のお気に入りでもある方法の 1 つが fetch です。fetch は、ES6 の特徴である「プロミス」を返します。ES6 に馴染みがないなら、こちらの記事 (英語) で詳しく解説していますので参考にしてください。プロミスを使うと、非同期リクエストをスマートに扱うことができます。では fetch がどのように動作するか見ていきましょう。

1_kz6k4VRs0RiVCasWR0pCow

fetch 関数は、1 つ必須のパラメーターとしてエンドポイントの URL をとります。その他にも下記の例のように、オプションのパラメーターがあります。

1_QasrBgYZcU4BBFHqD2bBdg

fetch には多くの利点があります。詳しくはこちらを参照してください。また、fetch の他にもサーバーへのリクエスト送受信を可能にするモジュールやプラグインがあります。例えば Axios です。

Axios

Axios は、HTTP リクエストを実行するためのオープンソースのライブラリで、たくさんの便利な機能を備えています。使い方を見ていきましょう。

使用方法:

まず、Axios を追加します。プロジェクトに Axios を追加する方法は 2 種類あります。

1 つ目は、npm を使う方法です。

npm install axios --save

上記コマンドを実行後、Axios をインポートします。

import axios from 'axios'

2 つ目は、CDN を使って Axios を追加する方法です。

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

Axios でリクエストを実行する:

Axios でサーバーに対してデータの送受信を行うには GETPOST を使用します。

GET:

1_4wmqiPsSN5mdgjJiRaKVZg

axios は 1 つの必須パラメーターと、オプションで 2 つ目のパラメーターを取ることができます。上の例ではシンプルなクエリーのデータを渡しています。

POST:

1_ey6-vwsrm9RAhyoU15u6xQ

Axios は「プロミス」を返します。プロミスについて詳しい人は、プロミスを使うと複数のリクエストを実行できることをご存じかもしれません。Axios でも同じように、複数のリクエストを同時に実行できます。

1_40Pji4utVKPpC7-dePfC6Q

Axios では他にも多くのメソッドやオプションがサポートされています。こちらを参照してください。

Angular HttpClient

Angular には、Angular アプリで動作する独自の HTTP モジュールがあります。非同期リクエストの処理には RxJS ライブラリが使用され、HTTP リクエストを実行するための多数のオプションが提供されています。

Angular HttpClient を使用してサーバーと通信する

Angular HttpClient を使用してリクエストを実行するには、Angular アプリ内でコードを実行する必要があります。そのためのサンプルアプリを作成しました (訳注: リンクは後述)。Angular に詳しくない方は、筆者の記事 Learn how to create your first Angular app in 20 minutes を参考にしてください。

まず、app.module.tsHttpClientModule をインポートします。

1_iFuW5Fbp91VR5gwQ6XNMEQ

次に、リクエストを扱うためのサービスを作成します。Angular CLI を使用すれば、簡単にサービスを生成できます。

ng g service  FetchdataService

次に、fetchdataService.ts サービスで HttpClient をインポートし、コンストラクターで注入 (inject) します。

1_kKwELAhSSpnN8DvIgdOfcQ

そして app.component.tsfetchdataService をインポートします。

//import
import { FetchdataService } from './fetchdata.service';

最後に、サービスを呼び出して実行します。

app.component.ts:

1_OrRe183Yaclt19n5ZQ194Q

サンプルアプリのデモは Stackblitz で確認できます。

まとめ

この記事では、JavaScript における HTTP リクエストの実行方法で最もよく使われる物を見てきました。

ここまでお読みいただきありがとうございました。この記事を気に入っていただけましたら筆者の Twitter までご連絡ください。