Vue.js

Vuejs

Tutorial Vuejs: Solicitudes HTTP con Axios

Aprende cómo utilizar Axios en Vue para manejar solicitudes HTTP, gestionar APIs y manejar errores, mejorando la eficiencia y experiencia en aplicaciones web.

Aprende Vuejs GRATIS y certifícate

Qué es Axios y cómo se instala en un proyecto de Vue.js

Axios es una biblioteca de JavaScript que permite realizar solicitudes HTTP desde el navegador y Node.js. Se basa en promesas, lo que facilita el manejo asíncrono de datos y la interacción con APIs externas.

En el contexto de Vue.js, Axios se utiliza para comunicarse con servidores y obtener o enviar datos de forma eficiente. Su uso es común en aplicaciones que necesitan consumir APIs RESTful para obtener información dinámica.

Para instalar Axios en un proyecto de Vue.js, utiliza tu gestor de paquetes preferido. Con npm, el comando es:

npm install axios

Si prefieres usar yarn, el comando sería:

yarn add axios

Después de instalar Axios, es necesario importarlo en los componentes donde lo vayas a utilizar.

Al utilizar Axios en Vue.js, aprovechas la reactividad del framework para actualizar la interfaz de usuario cuando los datos cambian. Esto es esencial para crear aplicaciones dinámicas y responsivas que brinden una mejor experiencia al usuario.

Realizar una solicitud GET

Para obtener datos de un servidor en una aplicación Vue.js, se utiliza una solicitud GET con Axios. Esta es una de las operaciones más comunes al interactuar con una API, permitiendo recuperar información que luego se muestra en la interfaz de usuario.

Puedes realizar la solicitud GET dentro del ciclo de vida onMounted(), que se ejecuta después de que el componente ha sido montado en el DOM:

<script setup lang="ts">
import axios from 'axios';
import { onMounted } from 'vue';

onMounted(() => {
    axios.get("https://api.ejemplo.com")
        .then(respuesta => {
            // Manejar la respuesta
        })
        .catch(error => {
            // Manejar el error
        });
})
</script>

En este ejemplo, se realiza una solicitud GET a 'https://api.ejemplo.com/elementos'. La respuesta del servidor se asigna a la propiedad datos, que puede ser utilizada en la plantilla del componente para mostrar la información.

Si prefieres una sintaxis más moderna y limpia, puedes utilizar async/await en lugar de promesas encadenadas:

<script setup lang="ts">
import axios from 'axios';
import { onMounted, reactive } from 'vue';

let datos = reactive({});

onMounted(async () => {
    try {
        const respuesta = await axios.get('https://api.ejemplo.com/elementos');
        datos = respuesta.data;
        console.log(datos);
    } catch (error) {
        console.error('Error al obtener los datos:', error);
    }
})
</script>

Con async/await, el código es más legible y se maneja mejor el flujo asíncrono. Utilizamos try...catch para capturar cualquier error que pueda ocurrir durante la solicitud.

Una vez que los datos se han obtenido y almacenado en la propiedad datos, puedes mostrarlos en la interfaz de usuario utilizando la directiva v-for en la plantilla:

<template>
  <div>
    <ul v-if="datos">
      <li v-for="(elemento, indice) in datos" :key="indice">
        {{ elemento.nombre }}
      </li>
    </ul>
    <p v-else>Cargando datos...</p>
  </div>
</template>

Aquí, v-if verifica si datos tiene contenido antes de intentar renderizar la lista. La directiva v-for itera sobre cada elemento en datos, permitiéndote acceder a sus propiedades y mostrarlas.

Es posible que necesites enviar parámetros en tu solicitud GET. Puedes hacerlo pasándolos en un objeto de configuración:

axios.get('https://api.ejemplo.com/elementos', {
  params: {
    categoria: 'tecnologia',
    orden: 'ascendente'
  }
})
.then(respuesta => {
  this.datos = respuesta.data;
})
.catch(error => {
  console.error('Error al obtener los datos:', error);
});

En este caso, se envían parámetros de consulta categoria y orden al servidor, lo que puede filtrar o modificar la respuesta según tus necesidades.

Además, si necesitas establecer cabeceras personalizadas, puedes incluirlas en el objeto de configuración:

axios.get('https://api.ejemplo.com/elementos', {
  headers: {
    'Authorization': 'Bearer token_de_acceso'
  }
})
.then(respuesta => {
  this.datos = respuesta.data;
})
.catch(error => {
  console.error('Error al obtener los datos:', error);
});

Las cabeceras personalizadas son útiles para autenticación y otras configuraciones avanzadas al interactuar con APIs que requieren autorización.

Recuerda que Axios devuelve una promesa, lo que significa que puedes encadenar múltiples acciones después de que la solicitud se resuelva. Sin embargo, es importante manejar siempre los posibles errores para asegurar que tu aplicación pueda responder adecuadamente ante fallos en la comunicación con el servidor.

Al seguir estos pasos, puedes integrar eficazmente solicitudes GET en tu aplicación Vue.js, permitiendo que tu interfaz refleje datos obtenidos en tiempo real y proporcionando una experiencia dinámica al usuario.

Realizar una solicitud POST

Para enviar datos al servidor en una aplicación Vue.js, se utiliza una solicitud POST con Axios. Esta operación es esencial cuando necesitas crear nuevos recursos o enviar información para ser procesada por la API.

Supongamos que tienes un formulario cuyos datos deseas enviar al servidor. Define una propiedad en script del componente para almacenar los datos del formulario:

const nuevoElemento = reactive({
    nombre: '',
      descripcion: ''
})

Implementa un método que se encargue de realizar la solicitud POST al servidor:

async function crearElemento() {
  try {
    const respuesta = await axios.post('https://api.ejemplo.com/elementos', nuevoElemento);
    console.log('Elemento creado:', respuesta.data);
  } catch (error) {
    console.error('Error al crear el elemento:', error);
  }
}

En este ejemplo, utilizamos axios.post() para enviar los datos contenidos en this.nuevoElemento a la URL especificada. La respuesta del servidor puede contener información sobre el recurso recién creado.

Es importante manejar la naturaleza asíncrona de la solicitud usando async/await y capturar posibles errores con un bloque try...catch. Esto garantiza que tu aplicación pueda responder adecuadamente ante fallos en la comunicación.

En la plantilla del componente, puedes vincular los campos del formulario a las propiedades en nuevoElemento y asignar el método crearElemento() al evento submit:

<template>
  <form @submit.prevent="crearElemento">
    <input v-model="nuevoElemento.nombre" placeholder="Nombre" />
    <input v-model="nuevoElemento.descripcion" placeholder="Descripción" />
    <button type="submit">Crear</button>
  </form>
</template>

Aquí, los campos del formulario están enlazados con v-model a los datos del componente, permitiendo que los valores introducidos por el usuario sean accesibles al enviar la solicitud.

Al llamar a crearElemento(), se envían los datos al servidor sin recargar la página, gracias al modificador prevent en @submit.prevent.

Si necesitas enviar cabeceras adicionales en la solicitud, por ejemplo, para autenticación, puedes hacerlo pasando un tercer argumento a axios.post():

const respuesta = await axios.post('https://api.ejemplo.com/elementos', nuevoElemento, {
  headers: {
    'Authorization': 'Bearer token_de_acceso'
  }
});

En casos donde la API espera los datos en un formato distinto, como multipart/form-data, puedes ajustar la solicitud utilizando FormData:

async function crearElemento() {
  const formData = new FormData();
  formData.append('nombre', nuevoElemento.nombre);
  formData.append('descripcion', nuevoElemento.descripcion);
  try {
    const respuesta = await axios.post('https://api.ejemplo.com/elementos', formData, {
      headers: {
        'Content-Type': 'multipart/form-data'
      }
    });
    console.log('Elemento creado:', respuesta.data);
  } catch (error) {
    console.error('Error al crear el elemento:', error);
  }
}

El objeto FormData permite crear cuerpos de solicitudes con múltiples partes, útil cuando necesitas enviar archivos o datos de formularios de manera más tradicional.

Al realizar solicitudes POST, es fundamental manejar adecuadamente las respuestas del servidor. Puedes actualizar el estado de la aplicación, limpiar el formulario o proporcionar retroalimentación al usuario según sea necesario.

Por ejemplo, después de crear un elemento, podrías agregarlo a una lista existente en la interfaz o mostrar un mensaje de éxito al usuario. Esto mejora la interactividad y la experiencia general en tu aplicación.

También es buena práctica gestionar los errores que puedan ocurrir durante la solicitud, informando al usuario en caso de que algo falle. Esto puede incluir la validación de campos, manejo de respuestas de error del servidor o problemas de conexión.

Si trabajas con instancias personalizadas de Axios, puedes configurar una URL base o agregar interceptores para manejar solicitudes y respuestas de manera global, lo que simplifica el código y mantiene la consistencia en toda la aplicación.

Realizar una solicitud PUT y PATCH

En esta sección se explicará cómo utilizar Axios para realizar solicitudes PUT y PATCH en una aplicación Vue.js, las cuales se emplean para actualizar recursos existentes en el servidor.

La solicitud PUT se utiliza para reemplazar completamente un recurso existente con nuevos datos, mientras que PATCH se usa para modificar parcialmente un recurso, actualizando solo ciertos campos.

Supongamos que tenemos un componente con un objeto elemento que deseamos actualizar en el servidor. Definimos este objeto en la sección data() del componente:

const elemento = reactive({
  id: 1,
  nombre: 'Elemento Original',
  descripcion: 'Descripción original'
})

Para realizar una solicitud PUT, creamos un método que envía la actualización completa del objeto al servidor:

async function actualizarElemento() {
  try {
    const respuesta = await axios.put(`https://api.ejemplo.com/elementos/${elemento.id}`, elemento);
    console.log('Elemento actualizado:', respuesta.data);
  } catch (error) {
    console.error('Error al actualizar el elemento:', error);
  }
}

En este ejemplo, utilizamos axios.put() para enviar el objeto elemento completo a la URL específica del recurso, donde this.elemento.id es la identificación única del elemento a actualizar.

Es importante destacar que la solicitud PUT reemplaza todo el recurso en el servidor, por lo que es necesario enviar todos los campos del objeto, incluso si solo algunos han cambiado.

Si solo necesitamos actualizar algunos campos, es más eficiente utilizar una solicitud PATCH:

async function modificarElemento() {
  try {
    const datosParciales = {
      nombre: this.elemento.nombre
    };
    const respuesta = await axios.patch(`https://api.ejemplo.com/elementos/${elemento.id}`, datosParciales);
    console.log('Elemento modificado:', respuesta.data);
  } catch (error) {
    console.error('Error al modificar el elemento:', error);
  }
}

Aquí, axios.patch() envía solo los campos modificados al servidor. En el objeto datosParciales, incluimos únicamente las propiedades que han cambiado, lo que hace que la solicitud sea más ligera y eficiente.

La elección entre PUT y PATCH depende de cómo la API espera recibir las actualizaciones. Algunas APIs solo admiten uno de los dos métodos, por lo que es esencial consultar la documentación del servidor con el que estás interactuando.

Al igual que en las solicitudes anteriores, si necesitas enviar cabeceras adicionales, como un token de autenticación, puedes incluirlas en la configuración de la solicitud:

const respuesta = await axios.put(`https://api.ejemplo.com/elementos/${elemento.id}`, elemento, {
  headers: {
    'Authorization': 'Bearer tu_token_de_acceso'
  }
});

Después de recibir la respuesta del servidor, puedes actualizar el estado de tu aplicación o proporcionar retroalimentación al usuario para indicar que la actualización fue exitosa.

En la plantilla del componente, puedes enlazar el método de actualización a un evento, como el clic de un botón:

<template>
  <div>
    <input v-model="elemento.nombre" placeholder="Nombre" />
    <input v-model="elemento.descripcion" placeholder="Descripción" />
    <button @click="actualizarElemento">Actualizar con PUT</button>
    <button @click="modificarElemento">Modificar con PATCH</button>
  </div>
</template>

Los campos del formulario están vinculados con v-model a las propiedades del objeto elemento, permitiendo que el usuario modifique los valores. Los botones llaman a los métodos correspondientes para realizar la solicitud PUT o PATCH según sea necesario.

Es fundamental manejar posibles errores en las solicitudes, proporcionando mensajes claros al usuario en caso de fallos en la actualización.

Utilizando async/await y bloques try...catch, podemos gestionar eficazmente el flujo asíncrono y las excepciones que puedan ocurrir durante la comunicación con el servidor.

Por último, es recomendable mantener el código organizado y seguir las buenas prácticas de programación, como separar la lógica de negocio y asegurarse de que la aplicación sea fácil de mantener y escalar.

Realizar una solicitud DELETE

Para eliminar un recurso existente en el servidor desde una aplicación Vue.js, se utiliza una solicitud DELETE con Axios. Este tipo de petición es esencial cuando se necesita borrar elementos, como registros en una base de datos o archivos en un sistema remoto.

Supongamos que tienes una lista de elementos que se muestran en la interfaz y deseas proporcionar al usuario la funcionalidad para eliminar uno de esos elementos. Define los datos necesarios en el script del componente:

const elementos = ref([
    { id: 1, nombre: 'Elemento 1' },
    { id: 2, nombre: 'Elemento 2' },
    { id: 3, nombre: 'Elemento 3' },
]);

Para realizar la solicitud DELETE, implementa un método que envíe la petición al servidor con el identificador del elemento a eliminar:

async function eliminarElemento(id: number) {
    try {
        await axios.delete(`https://api.ejemplo.com/elementos/${id}`);
        elementos.value = elementos.value.filter(elemento => elemento.id !== id);
        console.log('Elemento eliminado correctamente');
    } catch (error) {
        console.error('Error al eliminar el elemento:', error);
    }
};

En este ejemplo, axios.delete() envía una solicitud al servidor especificando la URL del recurso a eliminar, utilizando el ID del elemento. Tras una eliminación exitosa, se actualiza la lista de elementos en el estado del componente para reflejar el cambio en la interfaz de usuario.

En la plantilla del componente, puedes mostrar la lista de elementos y agregar un botón para eliminar cada uno:

<template>
  <div>
    <ul>
      <li v-for="elemento in elementos" :key="elemento.id">
        {{ elemento.nombre }}
        <button @click="eliminarElemento(elemento.id)">Eliminar</button>
      </li>
    </ul>
  </div>
</template>

Aquí, se utiliza la directiva v-for para iterar sobre la lista de elementos y mostrar cada uno en la interfaz. El botón de Eliminar invoca el método eliminarElemento() pasando el ID correspondiente.

Es posible que necesites enviar cabeceras adicionales en tu solicitud DELETE, por ejemplo, para autenticación. Puedes hacerlo incluyendo un objeto de configuración:

await axios.delete(`https://api.ejemplo.com/elementos/${id}`, {
  headers: {
    'Authorization': 'Bearer tu_token_de_acceso',
  },
});

De este modo, la petición incluirá las cabeceras necesarias para que el servidor valide la operación. Es importante manejar adecuadamente los posibles errores que puedan surgir durante la solicitud, informando al usuario si, por ejemplo, no tiene permisos para eliminar el recurso.

Si el servidor espera que envíes datos adicionales en el cuerpo de la solicitud DELETE, puedes proporcionarlos usando la sintaxis:

await axios.delete(`https://api.ejemplo.com/elementos/${id}`, {
  data: {
    motivo: 'Duplicado',
  },
});

Aunque es menos común, algunos servicios requieren información adicional para procesar la eliminación. En este caso, se está enviando un motivo para la acción.

Recuerda que las solicitudes DELETE deben utilizarse con cuidado, ya que implican la eliminación de datos. Es buena práctica solicitar una confirmación del usuario antes de proceder. Puedes implementar un diálogo de confirmación:

methods: {
  async confirmarEliminacion(id) {
    if (confirm('¿Estás seguro de que deseas eliminar este elemento?')) {
      await this.eliminarElemento(id);
    }
  },
}

Y en la plantilla:

<button @click="confirmarEliminacion(elemento.id)">Eliminar</button>

De esta forma, se añade una capa de seguridad adicional, asegurando que el usuario está consciente de la acción que va a realizar.

Al actualizar el estado local de los elementos tras la eliminación, la interfaz de usuario refleja inmediatamente el cambio, gracias a la reactividad de Vue.js. Esto proporciona una experiencia de usuario fluida y consistente.

Finalmente, asegúrate de manejar adecuadamente las respuestas del servidor. Si la solicitud DELETE devuelve información relevante, puedes utilizarla para mejorar la interacción con el usuario:

const respuesta = await axios.delete(`https://api.ejemplo.com/elementos/${id}`);
console.log('Mensaje del servidor:', respuesta.data.mensaje);

Esto puede incluir mensajes de confirmación, códigos de estado o detalles adicionales sobre la operación ejecutada.

Siguiendo estos pasos, podrás integrar solicitudes DELETE en tu aplicación Vue.js de manera efectiva, permitiendo que los usuarios eliminen recursos y manteniendo sincronizada la interfaz con el estado actual de los datos.

Manejo de errores con axios

Al interactuar con APIs en una aplicación Vue.js utilizando axios, es fundamental manejar adecuadamente los errores que pueden ocurrir durante las solicitudes HTTP. Un correcto manejo de errores mejora la confiabilidad de la aplicación y proporciona una mejor experiencia al usuario.

Cuando se realiza una solicitud con axios, pueden ocurrir diversos tipos de errores, como problemas de red, respuestas con códigos de estado HTTP de error o fallos en la configuración de la solicitud. Para capturar y gestionar estos errores, se utilizan bloques try...catch en combinación con async/await o el método .catch() al trabajar con promesas.

Un ejemplo básico utilizando async/await es el siguiente:

onMounted(() => {
  try {
    const respuesta = await axios.get('https://api.ejemplo.com/datos');
    datos = respuesta.data;
    // Manejar la lógica de los datos
  } catch (error) {
    // Manejar lógica del error
  }
});

En este caso, si la solicitud falla, se captura el error en el bloque catch y se asigna un mensaje a la propiedad error para informar al usuario. Además, se registra el detalle del error en la consola para facilitar la depuración.

Es importante conocer la estructura del objeto de error que proporciona axios. Este objeto contiene información útil para diagnosticar el problema. Las propiedades más relevantes son:

  • error.response: La respuesta del servidor, si está disponible.
  • error.request: La solicitud que se hizo, en caso de que no haya habido respuesta.
  • error.message: El mensaje de error descriptivo.
  • error.config: La configuración de la solicitud que generó el error.

Para manejar diferentes escenarios de error, se puede utilizar esta información:

catch (error) {
  if (error.response) {
    // El servidor respondió con un código de estado fuera del rango 2xx
    console.error('Error de servidor:', error.response.status);
    this.error = `Error ${error.response.status}: ${error.response.data.message}`;
  } else if (error.request) {
    // No se recibió respuesta del servidor
    console.error('Sin respuesta del servidor:', error.request);
    this.error = 'No se pudo conectar con el servidor. Por favor, inténtalo más tarde.';
  } else {
    // Ocurrió un error al configurar la solicitud
    console.error('Error en la configuración de la solicitud:', error.message);
    this.error = 'Error al realizar la solicitud.';
  }
}

Con este enfoque, se proporciona al usuario un mensaje más específico y se facilita la identificación del problema. Por ejemplo, si el servidor devuelve un código 404, el mensaje puede indicar que el recurso no fue encontrado.

Al mostrar información de errores, es crucial no exponer datos sensibles o detalles que puedan confundir al usuario. Se recomienda mostrar mensajes claros y concisos.

Otra práctica común es utilizar interceptores de axios para manejar los errores de forma global. Los interceptores permiten interceptar las respuestas antes de que lleguen a los componentes, facilitando un manejo centralizado de errores.

Para configurar un interceptor de respuesta, puedes agregar el siguiente código en el archivo principal de tu aplicación, como main.js:

axios.interceptors.response.use(
  respuesta => respuesta,
  error => {
    // Manejar el error globalmente
    if (error.response) {
      // Puedes implementar lógica según el código de estado
      if (error.response.status === 401) {
        // Por ejemplo, redireccionar al inicio de sesión
      }
    }
    return Promise.reject(error);
  }
);

Con este interceptor, cualquier error en las respuestas pasará por esta función, permitiéndote manejar casos específicos, como autenticación caducada o errores de autorización.

También es posible crear una instancia personalizada de axios con interceptores asociados:

const instanciaAxios = axios.create({
  baseURL: 'https://api.ejemplo.com'
});

instanciaAxios.interceptors.response.use(
  respuesta => respuesta,
  error => {
    // Manejo de errores personalizado
    return Promise.reject(error);
  }
);

export default instanciaAxios;

Luego, en los componentes, puedes importar esta instancia en lugar de axios estándar:

import instanciaAxios from '../instanciaAxios';

export default {
  // ...
  async mounted() {
    try {
      const respuesta = await instanciaAxios.get('/datos');
      this.datos = respuesta.data;
    } catch (error) {
      // Manejo de errores específico del componente
    }
  }
};

De esta forma, los interceptores aplicados afectarán solo a las solicitudes realizadas con esa instancia, proporcionando mayor flexibilidad.

Al manejar errores en formularios, es útil mostrar mensajes de validación al usuario. Si el servidor devuelve errores de validación, puedes extraer esa información del objeto error.response.data y mostrarla en la interfaz:

try {
  const respuesta = await axios.post('https://api.ejemplo.com/crear', this.formulario);
  // Procesar la respuesta exitosa
} catch (error) {
  if (error.response && error.response.status === 400) {
    this.erroresValidacion = error.response.data.errores;
  } else {
    this.error = 'Error al enviar el formulario.';
  }
}

Luego, en la plantilla, puedes iterar sobre erroresValidacion para mostrar los mensajes correspondientes.

Además, es posible que necesites reintentar solicitudes fallidas. Puedes implementar esta lógica en el catch del error o utilizar bibliotecas adicionales que faciliten este comportamiento.

En resumen, el manejo adecuado de errores con axios en Vue.js implica capturar y procesar los errores de las solicitudes, brindar información útil al usuario y mantener la aplicación robusta ante fallos en la comunicación con el servidor.

Aprende Vuejs GRATIS online

Ejercicios de esta lección Solicitudes HTTP con Axios

Evalúa tus conocimientos de esta lección Solicitudes HTTP con Axios con nuestros retos de programación de tipo Test, Puzzle, Código y Proyecto con VSCode, guiados por IA.

Todas las lecciones de Vuejs

Accede a todas las lecciones de Vuejs y aprende con ejemplos prácticos de código y ejercicios de programación con IDE web sin instalar nada.

Introducción A Vue Y Su Ecosistema

Vue.js

Introducción Y Entorno

Instalar Y Configurar Vue Con Vite

Vue.js

Introducción Y Entorno

Introducción A La Sintaxis De Plantillas

Vue.js

Componentes

Introducción A Componentes

Vue.js

Componentes

Componentes Con Options Api

Vue.js

Componentes

Componentes Con Composition Api

Vue.js

Componentes

Renderizado Condicional Con V-if

Vue.js

Componentes

Renderizado Iterativo Con V-for

Vue.js

Componentes

Props Y Comunicación Entre Componentes

Vue.js

Componentes

Manejo De Eventos En Vue Con V-on

Vue.js

Componentes

Binding Bidireccional Con V-model Y Definemodel

Vue.js

Componentes

Estilización De Componentes

Vue.js

Componentes

Reactividad Con Ref Y Reactive

Vue.js

Composición Y Reactividad

Ciclo De Vida Con Composition Api

Vue.js

Composición Y Reactividad

Composition Api: Provide E Inject

Vue.js

Composición Y Reactividad

Introducción A Los Composables

Vue.js

Composición Y Reactividad

Uso Avanzado De Composables

Vue.js

Composición Y Reactividad

Introducción A Vue Router

Vue.js

Navegación Y Enrutamiento

Definición Y Manejo De Rutas

Vue.js

Navegación Y Enrutamiento

Rutas Anidadas Y Dinámicas

Vue.js

Navegación Y Enrutamiento

Navegación Programática Y Redirección

Vue.js

Navegación Y Enrutamiento

Solicitudes Http Con Fetch Api

Vue.js

Interacción Http Con Apis De Backend

Solicitudes Http Con Axios

Vue.js

Interacción Http Con Apis De Backend

Introducción A Suspense

Vue.js

Interacción Http Con Apis De Backend

Evaluación Test De Conocimientos Vuejs

Vue.js

Evaluación

Accede GRATIS a Vuejs y certifícate

Certificados de superación de Vuejs

Supera todos los ejercicios de programación del curso de Vuejs y obtén certificados de superación para mejorar tu currículum y tu empleabilidad.

En esta lección

Objetivos de aprendizaje de esta lección

  1. Instalar y configurar la librería Axios en un proyecto Vue.js.
  2. Realizar solicitudes GET para obtener datos de una API.
  3. Enviar datos al servidor mediante solicitudes POST.
  4. Actualizar recursos en el servidor utilizando PUT y PATCH.
  5. Eliminar recursos con solicitudes DELETE.
  6. Implementar manejo de errores eficiente para solicitudes HTTP.
  7. Utilizar interceptores de Axios para manejo global de errores y autenticación.
  8. Comprender el uso de async/await para la gestión asíncrona de solicitudes.