AxiosとFetchの違いは何ですか?


回答:


164

FetchとAxiosの機能は非常に似ていますが、下位互換性を高めるために、Axiosはより適切に機能するように見えます(たとえば、IE 11ではフェッチが機能しません。この投稿を確認してください)

また、JSONリクエストを使用する場合、次の点で私が遭遇したいくつかの違いがあります。

JSON POSTリクエストを取得する

let url = 'https://someurl.com';
let options = {
            method: 'POST',
            mode: 'cors',
            headers: {
                'Accept': 'application/json',
                'Content-Type': 'application/json;charset=UTF-8'
            },
            body: JSON.stringify({
                property_one: value_one,
                property_two: value_two
            })
        };
let response = await fetch(url, options);
let responseOK = response && response.ok;
if (responseOK) {
    let data = await response.json();
    // do something with data
}

Axios JSON投稿リクエスト

let url = 'https://someurl.com';
let options = {
            method: 'POST',
            url: url,
            headers: {
                'Accept': 'application/json',
                'Content-Type': 'application/json;charset=UTF-8'
            },
            data: {
                property_one: value_one,
                property_two: value_two
            }
        };
let response = await axios(options);
let responseOK = response && response.status === 200 && response.statusText === 'OK';
if (responseOK) {
    let data = await response.data;
    // do something with data
}

そう:

  • フェッチの本体 = Axiosのデータ
  • Fetchの本文は文字列化する必要があります。Axiosのデータにはオブジェクトが含まれています
  • FetchにリクエストオブジェクトにURLがありません。AxiosにはリクエストオブジェクトにURLがあります
  • フェッチリクエスト関数はURLをパラメーターとして含み、Axiosリクエスト関数はURLをパラメーターとして含みません
  • フェッチ要求がOK応答オブジェクトが含まれている場合、[OK]プロパティを、Axios要求があるOK際にステータスが200であるSTATUSTEXTは「OK」です
  • jsonオブジェクトの応答を取得するには:fetchで応答オブジェクトのjson()関数を呼び出し、Axiosで応答オブジェクトのdataプロパティを取得します。

お役に立てれば。


もっと質問があります。responseOkがtrueになったら、ステータスが提供されているかどうかをresponse.dataで確認する必要がありますか?感謝
ヤン王

1
Axios request is ok when status is 200 and statusText is 'OK' 201や204のような2xx範囲の他のhttpStatusはどうですか?
レオンブロイ

46

それらはHTTPリクエストライブラリです...

私も同じ疑問を抱きますが、この投稿の表を参考にしてくださいisomorphic-fetch。これはfetchNodeJSで動作します。

http://andrewhfarmer.com/ajax-libraries/


上記のリンクは死んでいます同じテーブルはここにあります:https : //www.javascriptstuff.com/ajax-libraries/

またはここ: ここに画像の説明を入力してください


6
それでも、私はAxiosよりもフェッチの利点を見つけることができません。なぜaxiosを使うべきか、何か分かりますか?
Gorakh Nath、2016

4
fetchは標準であると思いますfetch.spec.whatwg.orgを参照してください... axiosはそれに従わないため、より多くの機能を備えている可能性があります。必要なものについて...トランスは必要なかったので...標準のlibを取得することはプロです...
ルーカスカタヤマ

4
この表は誤解を招くものであることに注意してください。それはネイティブfetchとして定義します(つまり、それを使用できることを意味します-テーブルソースに応じてライブラリを含める必要はありません)が、実際には一部のプラットフォーム(特にIEのすべてのバージョン)で実装されていないため、とにかく外部ポリフィル。fetch
Luca Fagioli

3
@ jack123 fetchによって言及された違いに加えても、基本的なajax機能は提供されませんtimeout(これは非常に奇妙です)。この基本的な機能を実装するには、別のモジュールを使用する必要があります。
Apurva jain '10 / 10/17

2
@LucasKatayamaリンクが壊れているようです
vancy-pants '

30

GitHubのmzabriskie よると:

全体的に非常に似ています。axiosのいくつかの利点:

  • トランスフォーマー:要求が行われる前、または応答が受信された後に、データの変換を実行できます

  • インターセプター:要求または応答を完全に変更できます(ヘッダーも同様)。また、リクエストが行われる前、またはPromiseが解決する前に非同期操作を実行する

  • 組み込みXSRF保護

ブラウザサポートAxiosを確認してください

ここに画像の説明を入力してください

あなたはaxiosを使うべきだと思います。


4
同意した。また、Axiosは小さな十分なインポートであるため、膨らみはそれほど心配されません-エクスプレスやマングースのようなもので、パッケージサイズが少し狂っていると心配されるかもしれません。:)
CodeFinity 2018

1
正当な編集を元に戻したり、帰属のないコンテンツをコピーしたりしないでください。
jonrsharpe 2018年

9

フェッチAPIとaxios APIのもう1つの大きな違い

  • Service Workerの使用中は、HTTPリクエストをインターセプトする場合にのみフェッチAPI使用する必要があります
  • 例 Service Workerを使用してPWAでキャッシュを実行している間、axios APIを使用している場合はキャッシュできません(フェッチAPIでのみ機能します)

6
誰もがこれが本当に本当であることを確認できますか?それは1人ですが、9 upvotesは私が尋ねる理由オフラインである私はサービスワーカーPWAでaxiosを使用しています(これについてのコメントを見ていいだろう、まだ同意しているようだ。
トムStickel

確かに、これについてはもう少しコメントがありますが、axiosを使用しているときにキャッシュの問題に直面していました。また、
axios

これは正しいようですが、近い将来に修正される可能性があります:github.com/axios/axios/pull/2891
arkhz

7

Axiosは、NPMを使用してReactプロジェクトに簡単にインストールできるスタンドアロンのサードパーティパッケージです。

あなたが言及した他のオプションはフェッチ機能です。Axiosとfetch()は異なり、はほとんどの最新ブラウザーに組み込まれています。フェッチを使用すると、サードパーティのパッケージをインストールする必要はありません。

そのため、あなた次第です。fetch()何をしているのかわからない場合や、場合によっては失敗する可能性があります。または、私の考えではより単純なAxiosを使用するだけです。


1
フェッチは問題ありませんが、Axiosはあなたが言ったようなものです-より簡単です。最近のブラウザー(フェッチ)に組み込まれている機能は、機能のリリースにはそれほど適していません。-だから私はAxiosを好む
Tom Stickel

5

さらに...私はテストでさまざまなライブラリをいじっていて、4xxリクエストの処理が異なることに気付きました。この場合、私のテストは400応答でjsonオブジェクトを返します。これは、3つの一般的なライブラリが応答を処理する方法です。

// request-promise-native
const body = request({ url: url, json: true })
const res = await t.throws(body);
console.log(res.error)


// node-fetch
const body = await fetch(url)
console.log(await body.json())


// Axios
const body = axios.get(url)
const res = await t.throws(body);
console.log(res.response.data)

興味深いのはそれでrequest-promise-nativeありaxiosnode-fetchそうではないのに4xx応答をスローします。またfetch、json解析のpromiseを使用します。


1
@baitunこれらは私が実行しているユニットテストです(私はMochaを使用していたと思われます).throws。この場合、私はal 3 libsからの拒否をテストしていて、返されたデータの違いに気づきました。
cyberwombat

3

axiosの利点:

  • トランスフォーマー:要求が行われる前、または応答が受信された後に、データの変換を実行できます
  • インターセプター:要求または応答を完全に変更できます(ヘッダーも同様)。リクエストが行われる前、またはPromiseが解決する前に非同期操作も実行します
  • 組み込みXSRF保護

axios以上の利点fetch

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.