AxiosとES6 fetchのドキュメントを調べたところ、どちらも非常によく似ていて、$。ajaxとその短縮形の強い影響を経験しました。
Axiosの主な利点は、ブラウザーのサポートです。
Babel-polyfillを使用する場合、axiosを使用する理由はありません。
Axios over Fetchを使用するいくつかの理由:
これは、XMLHttpRequest(axiosを強化)とFetch APIの間の問題です。
Fetch APIは現在、リクエストの進行状況を通知する方法を提供していません。これは、大規模ファイルのアップロードなどのフィードバックメカニズムを強化する機能です。
一方、Axiosにはこの機能が組み込まれています。
_axios.post('/api', data, {
onUploadProgress: ({ total, loaded }) => {
// update progress
}),
})
_
バックエンドが_500 Internal Server Error
_応答コードを返すとき、fetch
はそれを_200 OK
_とは異なるものとして扱いません。
これは、応答がどのように見えるかの以前の仮定がすべて無効になるため、ほとんどの場合不便です。
ほとんどの場合、サーバーから誤った応答を受信した場合、できるだけ早く処理パイプラインを中止し、エラー処理ケースに切り替えます。
_fetch(url)
.then(reponse => {
if (!(status >= 200 && status < 300)) {
return Promise.reject(new Error("Invalid response status"));
}
return response;
})
.then(response => response.json())
.then(/* normal processing */)
.catch(/* error handling */);
_
これを達成するのは難しくありませんが、繰り返しを避けるためにこのロジックを何らかの抽象化の下でキャプチャしたいと思うでしょう。これにより、AxiosというWeb API抽象化に一歩近づきます。
Axiosは正常な処理を行い、応答が誤ったステータスを返す場合、約束を拒否します。この動作は、axiosのほとんどのものと同様にカスタマイズ可能です。
Axiosには moxios があり、fetchには fetch-mock があります。
これらのライブラリはどちらも優れていますが、私の経験では、_fetch-mock
_は、Jestがポリフィルされたものよりもモックされたフェッチを使用するために追加のセットアップが必要でした。
moxios.wait()
は、リクエストと一致した後に解決されるpromiseを返すことも気に入っています。
たとえば、すべてのリクエストパラメータにAPIキーを追加するインターセプターを設定したり、アクティブなリクエストを監視して読み込み画面を表示したりできます。
あるオプションを他のオプションよりも使用する理由は、実際の要件から利便性までさまざまです。
進行状況を監視する必要がある場合は、Axios(またはXMLHttpRequest)を使用します。
Service Workerを作成している場合は、Fetchを使用します。
それ以外の場合は、より便利なものを使用してください。
この:
_fetch('https://jsonplaceholder.typicode.com/posts', {
method: 'POST',
body: JSON.stringify({
title,
body
})
}).then((res) => {
if (res.ok) {
return res.json()
}
throw new Error(res.responseText);
})
.then((data) => console.log(data))
.catch((err) => console.log(err))
_
これにより、本質的にaxiosで表現できます。
_axios.post('https://jsonplaceholder.typicode.com/posts', {
title,
body
}).then((data) => console.log(data))
.catch((err) => console.log(err))
_
本質的に:
res.json()
、res.text()
などを実行する必要はありませんcatch
ハンドラーで200以外のステータスエラーをキャッチするために_res.ok
_を処理する必要はありません。全体的にaxios
は、リクエストを処理するためのデザインの観点から、より高レベルで扱いやすいAPIです。