Axios vs Fetch : Que faut-il utiliser ?

-

Axios maîtrise les clients HTTP officiellement recommandés par Mastering JS. Nous utilisons occasionnellement le superagent, mais nous n’utilisons presque jamais la fonction fetch(). La raison en est qu’Axios réduit considérablement la quantité d’éléments nécessaires pour une requête API moyenne. Voici quelques raisons à cela :

Axios est isomorphe, fetch n’est pas

La syntaxe de la plupart des requêtes Axios de base est la même dans Node.js et dans le navigateur. Comme Node.js n’a pas de fonction fetch() intégrée, vous devez utiliser un polyfill comme node-fetch. Et il existe plusieurs différences connues entre node-fetch et browser fetch().

Axios lance une erreur lorsqu’une requête échoue

L’un des problèmes les plus ennuyeux avec fetch() est qu’il ne lance pas d’erreur lorsque le serveur répond avec un statut d’erreur HTTP, comme 404 ou 500.

fetch('https://httpbin.org/post').catch(err => {
  /* No error even though the server responded with 405 */
});

axios.get('https://httpbin.org/post').catch(err => {
  err.response.status; // 405 "METHOD NOT ALLOWED"
});

Cependant, fetch() lance une erreur si elle ne peut pas atteindre le serveur, vous avez donc toujours besoin de deux chemins distincts de traitement des erreurs avec fetch(). La situation est encore pire avec async/await : chaque fetch() a besoin d’un then() supplémentaire pour faire apparaître les erreurs.

La gestion des erreurs Axios est beaucoup plus simple : il suffit d’utiliser catch().

Sérialisation et analyse automatique JSON et Form-Encoded

La plupart des API modernes utilisent le JSON ou le codage de formulaire pour les organismes demandeurs. Axios gère automatiquement le JSON et l’encodage des formulaires, ainsi que la sérialisation automatique des chaînes de requête.

// Serialize JSON body and query params with fetch:
body = JSON.stringify(body);
query = new URLSearchParams(query).toString();

const res = await fetch('/myendpoint?' + query, {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json'
  },
  body
});

// Serialize JSON body and query params with axios:
await axios.post('/myendpoint', { params: query, body });

Caractéristiques du Framework : Intercepteurs et instances

Avec toutes ces limitations, la malheureuse réalité est que tous ceux qui utilisent fetch() écrivent leur propre enveloppe autour de fetch(). Il est extrêmement difficile de construire une application en utilisant directement fetch().

Axios vous permet d’aller plus loin en fournissant des fonctionnalités de type framework. Vous pouvez utiliser des intercepteurs et des instances pour créer vos propres enveloppes d’API en utilisant Axios. Par exemple, voici comment vous pouvez construire un client API Trello en utilisant des instances et des intercepteurs :

Ainsi, Axios ne se contente pas d’éliminer une grande partie des enjeux dans le développement et des limitations de fetch(), mais il facilite également la construction d’emballages spécifiques pour différentes API.

Alfred
Alfredhttps://www.alfreddagenais.com
Salut ! Moi, c'est Alfred, développeur dans l’âme et explorateur de l'infini Web. Je suis constamment à la recherche de nouvelles idées et je pense que le développement web et l'informatique ont le pouvoir de transformer le monde. Je suis un grand admirateur de l'expérimentation, parce que c'est souvent de là que naissent les idées les plus créatives. Je suis convaincu que l'humour est un ingrédient clé de la vie, alors j'essaie toujours de glisser une blague ou deux dans mon code (pas toujours facile à comprendre, mais c'est le risque à prendre). En dehors de la programmation, j'aime passer du temps avec ma famille et mes amis, découvrir de nouveaux endroits et cuisiner des plats délicieux (du moins, j'essaie). Si vous voulez discuter de développement web, d'innovation, ou tout simplement échanger des blagues, n'hésitez pas à me contacter. Je suis toujours partant pour une bonne conversation !

Share this article

Recent posts

Popular categories

LAISSER UN COMMENTAIRE

S'il vous plaît entrez votre commentaire!
S'il vous plaît entrez votre nom ici

Recent comments