Axios é um cliente HTTP baseado em Promises que facilita o processo de fazer requisições, utilizado tanto no navegador quando no Node.js.
Introdução
É um projeto open source, disponível no Github que tem 89 mil stars e 8 mil forks. E com ele, a forma de fazer chamadas HTTPs no JavaScript ficaram muito mais rápidas e práticas.
Características
- Por baixo dos panos faz requisições Ajax no browser via XMLHttpRequests;
- Faz requisições http com Node.js;
- Suporta a API de Promises;
- Intercepta requisições e respostas (request & response);
- Cancela requisições;
- Transforma os dados em JSON automaticamente;
- No lado cliente suporta a proteção contra XRSF;
- Transforma os dados da requisição e da resposta.
Instalação
Usando NPM:
npm install axios
Usando YARN:
yarn add axios
Configurando
O processo de configuração é bastante simples e prático, com o Axios é possível criar uma baseurl que é utilizada como a rota base do servidor, desse modo, para cada requisição apenas é necessário informar a rota e seus parâmetros.
Geralmente, criamos uma pasta "services" e um arquivo chamado "api.js" ou "api.ts" que é onde as configurações do Axios são deixadas.
- src/services/api.js:
import axios from "axios"; // Pode ser algum servidor executando localmente: // http://localhost:3000 const api = axios.create({ baseURL: "https://api.github.com", }); export default api;
Como utilizar o Axios
Para utilizar basta importar o arquivo api no arquivo que irá fazer as requisições:
- ex:
import api from '../services/api' // Buscando usuários do github api.get("users/tgmarinho") .then((response) => doSomething(response.data)) .catch((err) => { console.error("ops! ocorreu um erro" + err); }); // Enviando um Post na rota posts com os parâmetros image, title e content // Utilizando o método HTTP POST const response = await api.post("posts", {image, title, content }); // DELETE - Deletando um arquivo por ID api.delete('files', { id }); // PUT - atualizando apenas o nome const personUpdated = await api.put(`person/${person.id}`, { name: "Thiago" });
Podemos fazer todos os tipos de requisições HTTP. E para fazer as requisições importamos apenas o arquivo api. e utilizamos a sintaxe: api.get("minhaRota"), api.delete("outraRota").
Mais funcionalidades
O Axios também permite que tokens de autenticação sejam passados em suas requisições. Em requisições para rotas que necessitam de autenticação, podemos passar o token da requisição na propriedade Authorization dos headers:
api.defaults.headers.authorization = `Bearer ${token}`;
- Requisições Simultâneas:
É possível realizar execução de várias requisições simultâneas:
useEffect(() => { Promise.all([ api.get("users/tgmarinho"), api.get("users/diego3g"), api.get("users/vinifraga") ]).then((response) => { for (const res of response) { const { data: { login, bio } } = res; setUsers((state) => [...state, { login, bio }]); } }); }, []);
Middlewares
O Axios também permite moddlewares sejam utilizados para fazer interceptações nas rotas.
import axios from "axios"; const api = axios.create({ baseURL: "<https://api.github.com>" }); let countReq = 0; // Add a request interceptor api.interceptors.request.use( function (config) { if (config.method === "get") { ++countReq; } console.log( `Já tivemos ${countReq} requisições do tipo ${config.method.toUpperCase()}` ); return config; }, function (error) { // Do something with request error return Promise.reject(error); } ); export default api; /** Resposta: Já tivemos 1 requisições do tipo GET Já tivemos 2 requisições do tipo GET Já tivemos 3 requisições do tipo GET **/
Conclusão
Axios tem se demonstrado bastante versátil, a sua API foi bem projetada e é bem mantida pelos desenvolvedores. Podemos utilizar a mesma biblioteca em vários ambientes — Front End, Back End, Desktop, Mobile. O que facilita o processo de desenvolvimento de aplicações FullStack com o JavaScript ou Typescript. Qualquer dúvida, dicas ou sugestões, não se esqueça de deixar nos comentário aqui em baixo.
Espero que tenha curtido 🤟