Llamo al servicio web usando fetch pero lo mismo que puedo hacer con la ayuda de axios. Entonces ahora estoy confundido. ¿Debo ir por axios o buscar?
Llamo al servicio web usando fetch pero lo mismo que puedo hacer con la ayuda de axios. Entonces ahora estoy confundido. ¿Debo ir por axios o buscar?
Respuestas:
Fetch y Axios son muy similares en funcionalidad, pero para una mayor compatibilidad con versiones anteriores, Axios parece funcionar mejor (por ejemplo, fetch no funciona en IE 11, consulte esta publicación )
Además, si trabaja con solicitudes JSON, las siguientes son algunas diferencias con las que me topé.
Obtener solicitud de publicación JSON
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
}
Solicitud posterior a 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
}
Entonces:
Espero que esto ayude.
Axios request is ok when status is 200 and statusText is 'OK'
¿Qué pasa con otros httpStatus en el rango 2xx como 201 o 204?
Son bibliotecas de solicitudes HTTP ...
Termino con la misma duda, pero la tabla en esta publicación me hace seguir isomorphic-fetch
. Lo cual es fetch
pero funciona con NodeJS.
http://andrewhfarmer.com/ajax-libraries/
El enlace de arriba está muerto. La misma tabla está aquí: https://www.javascriptstuff.com/ajax-libraries/
fetch
como Native (lo que significa que puede usarlo, no es necesario incluir una biblioteca , de acuerdo con el origen de la tabla), mientras que en realidad nofetch
está implementado en algunas plataformas (especialmente en todas las versiones de IE), para lo cual debe proporcionar un Polyfill externo de todos modos.
timeout
(que es muy extraño) tenemos que usar un módulo separado para implementar esta funcionalidad básica.
Según mzabriskie en GitHub :
En general son muy similares. Algunos beneficios de los axios:
Transformadores: permiten realizar transformaciones en los datos antes de realizar una solicitud o después de recibir una respuesta
Interceptores: le permiten modificar la solicitud o la respuesta por completo (encabezados también). también, realice operaciones asincrónicas antes de realizar una solicitud o antes de que Promise se liquide
Protección XSRF incorporada
por favor verifique los ejes de soporte del navegador
Creo que deberías usar axios.
Una diferencia importante más entre la API de recuperación y la API de axios
Axios es un paquete de terceros independiente que se puede instalar fácilmente en un proyecto React usando NPM.
La otra opción que mencionó es la función fetch. A diferencia de Axios, fetch()
está integrado en la mayoría de los navegadores modernos. Con fetch no necesita instalar un paquete de terceros.
Depende de usted, puede ir fetch()
y potencialmente arruinar si no sabe lo que está haciendo O simplemente use Axios, que es más sencillo en mi opinión.
Además ... estaba jugando con varias librerías en mi prueba y noté su diferente manejo de las solicitudes 4xx. En este caso, mi prueba devuelve un objeto json con una respuesta 400. Así es como 3 libs populares manejan la respuesta:
// 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)
De interés es eso request-promise-native
y axios
lanzar la respuesta 4xx mientras node-fetch
no lo hace. También fetch
utiliza una promesa para el análisis json.
.throws
método para probar los errores arrojados. En este caso, estaba probando rechazos de al 3 libs y noté la diferencia en los datos que se devolvieron.
Beneficios de los axios: