React — Haciendo peticiones con Axios y Hooks

Temario

i. Introducción

Cuando estamos desarrollando una aplicación real, hay un punto donde debemos realizar solicitudes a una API[ref]. React, a diferencia de otros frameworks/librerías no tiene una forma propia de consumir una API, así que tenemos la libertad de utilizar la API Nativa Fetch[ref] o algún otra librería como Axios[ref], Apollo Client[ref]…

En esta story vamos a enfocarnos en la librería Axios

ii. ¿Qué es Axios?

Es un cliente HTTP basado en promesas para el navegador y node.js[ref]

Axios es una API HTTP de cliente basada en XMLHttpRequest, que se puede utilizar en el navegador y en un servidor con Node.js[ref]. Axios funciona de forma asíncrona, permitiendo realizar llamadas API REST[ref] con retorno JSON. Además es uno de los clientes más populares basado en promesas, que es simple, liviano y muy fácil de personalizar.

iii. Nuestra primera API REST con Axios

Para nuestros ejemplos, vamos a utilizar la API JSONPlaceholder[ref], API REST gratuita en línea que se puede usar para datos falsos.

:: Instalación

:: Sintaxis básica

Hacer una solicitud API REST con Axios, es tan sencilla, que solo se necesita pasarle un objeto de configuración a la función Axios

Usando async/await:

Importante: async/await es parte de ECMAScript2017 y NO es compatible con Internet Explorer y navegadores viejos, por lo que hay que tener cuidado.

La respuesta de la petición, siempre será de la siguiente forma:

La respuesta del error, siempre será de la siguiente forma:

Se importa de la siguiente manera:

:: Ejemplo

Vamos a crear la petición, donde ocuparemos useEffect[ref], Axios, así como el estado list que va a guardar la lista.

Ejemplo Completo

El mismo ejemplo, utilizando async/await :

Ejemplo Completo

iv. Métodos abreviados

Axios, nos proporciona un conjunto de métodos con alias, para realizar los diferentes tipos de solicitudes.

Los más populares son :

Para los verbos HTTP:

Otros:

:: axios.get

Vamos a convertir el primer ejemplo:

Ejemplo (revisa la consola, para ver la petición)

Si se requiere mandar datos, tenemos dos formas de hacerlo:

Ejemplo (revisa la consola, para ver la petición)

Ejemplo (revisa la consola, para ver la petición)

:: axios.post

Vamos a utilizar el método axios.post() para agregar un nuevo registro:

Ejemplo (revisa la consola, para ver la petición)

:: axios.delete

Vamos a utilizar el método axios.delete(), para eliminar un registro:

Ejemplo (revisa la consola, para ver la petición)

:: axios.put

Vamos a utilizar el método axios.put(), para actualizar un registro completo:

Ejemplo (revisa la consola, para ver la petición)

:: axios.patch

Vamos a utilizar el método axios.patch(), para actualizar un registro (algunos datos):

Ejemplo (revisa la consola, para ver la petición)

:: axios.head

Vamos a utilizar el método axios.head(), para obtener las cabeceras de una petición:

Ejemplo (revisa la consola, para ver la petición)

:: axios.all

Una de las características más atractivas que tiene axios, es poder realizar múltiples llamadas en paralelo, este método retorna un objeto de promesa que se resuelve cuando todos las peticiones pasadas dentro de una matriz se han resuelto.

Vamos a utilizar el método axios.all para realizar dos peticiones get :

En el código de arriba, estamos realizando dos peticiones (el post con id=1, así como los comentarios de este post).

Importante: Si alguna petición es rechaza, automáticamente las demás serán rechazadas.

Ejemplo (revisa la consola, para ver la petición)

:: axios.spread

Axios, nos proporciona un método para obtener por argumento cada una de las peticiones. Veamos el mismo ejemplo:

Ejemplo (revisa la consola, para ver la petición)

v. Enviar encabezados personalizados

Axios nos permite mandar headers personalizados:

Nota: No olvidemos que el primer argumento es la url , el segundo argumento data que le vamos a pasar y por último options

vi. Interceptar solicitudes

Otra de las características atractivas que tiene Axios, es el poder interceptar las solicitudes (request) o respuestas (response) antes de que sean manejadas por then o catch.

Esta función es bastante útil, ya que vamos a tener un control total de todas las peticiones y respuestas que se hagan.

:: Sintaxis

:: Cómo funciona

:: Ejemplo

Imagina que tenemos una aplicación, donde el usuario debe autentificarse, al momento de que se loguea, el servicio nos regresa el siguiente resultado:

Donde lo guardamos en la sessionStorage[ref], para que siempre esté disponible. Ahora, la idea es de que el token se mande en el header de todas las peticiones, con la finalidad de validar que realmente es el usuario y tiene permisos para ver, editar, insertar o eliminar. Para eso usaremos interceptors.request :

Entonces, hacemos la petición:

Podemos observar en la animación que dentro de Request Headers estamos mandando x-rapidapi-key, que es el token de autenticación que necesita la API, por lo que nos devuelve los datos.

Podemos observar en la animación que dentro de Request Headers NO estamos mandando x-rapidapi-key, que es el token de autenticación que necesita la API, por lo que nos devuelve un mensaje de error.

— Ejemplo (revisa la consola, para ver la petición)

:: Ejemplo 2

La idea es la siguiente:

Entonces, vamos por pasos:

— Ejemplo (revisa la consola, para ver la petición)

vii. Creando Instancias

Otra característica que es bastante útil, es el de crear múltiples instancias con valores predeterminados. Imagina que debes consumir 2 o 3 API REST de diferentes dominios, con Axios es bastante sencillo.

:: Sintaxis

:: Ejemplo

Vamos a consumir 2 APIS, themoviedb[ref] para obtener el programa de televisión y myapifilms[ref] para obtener los datos de una actriz.

Importante: En caso de que no funcione el ejemplo, deben crear su propio token [ref] y api_key[ref] y actualizarlas en los archivos.

Lo que hacemos es interceptar el request, para agregarle la API_KEY

Lo que hacemos es interceptar el request, para agregarle la API_KEY y format.

Ahora en nuestra App los importamos, y los usamos:

Podrías mejorar el código utilizando Axios.all

— Ejemplo (revisa la consola, para ver la petición)

El usuario de Github moreta[ref], ha hecho un ejemplo más avanzado para una instancia[ref].

Si quieres ver toda la documentación a fondo y ver otras características que tiene Axios[ref].

viii. Ventajas y desventajas

--

--

I 💛 JavaScript

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store