DEV Community

Gustavo H. J.
Gustavo H. J.

Posted on

Axios 👾

Intro


Repositório

Confira no link o repositório dos códigos do artigo: https://github.com/MrNullus/learn-axios;

O que é Axios

Axios é um cliente HTTP baseado em promessa (promisse) para NodeJS e navegador.
Ou seja é uma library do ecossistema do JavaScript para fazer requisições HTTP.

É isómorfico - pode ser executado no navegador e no NodeJS com a mesma base de código.

No lado do servidor, ele usa módulo HTTP NodeJS nativo, enquanto n cliente ele usa XMLHttpRequests.


Promisse

É a promessa feita que tem uma resposta (positiva, ou negativa) e enquanto a promessa existir ela será pendente até ter uma resposta.

    ___________
    |        | |
    | Client | |  ______
    |        |/         |
    /--------/          |
  /[][][][]/            | Requisição
  ---------             |
                        |
         / \            |
          |            \ /
          |         _________
Resposta  |        | [    o] |
          |        |---------|
          |        | [ o   ] |
          |        |---------| 
          |_______ | [    o] |
                   |---------|
                   | [ o   ] |
                   |---------|
                   |  Server |
Enter fullscreen mode Exit fullscreen mode

Transformando uma operação em código Axios:

axios.get('user/?ID=12345')
  .then(( response ) => {
    // manipular sucesso
  })
  .catch(( error ) => {
    // manipular erro
  })
  .then(( ) => {
    // manipular sempre que for executado
  });
Enter fullscreen mode Exit fullscreen mode

Install

Para instalar vá a documentação do Axios: https://axios-http.com/docs/intro;


Requisição GET

A requisição GET é usada para em geral para retornar dados do servidor.

A utilização do Axios se dá em implementar a variável axios;

Para o método GET é necessário no mínimo dois atributos dentro
do objeto de configuração, sendo eles: o método e a url;

Ex |>

axios({
  method: 'get',
  url: 'https://jsonplaceholder.typicode.com/posts'
});

// O GET funciona de modo default então pode-se apenas omitir um argumento:
axios({
  url: 'https://jsonplaceholder.typicode.com/posts'
});
Enter fullscreen mode Exit fullscreen mode

Pode-se usar de outra forma mais enxuta e limpa:

axios.get(url);

// Servindo para os outros métodos:
axios.post(url);
Enter fullscreen mode Exit fullscreen mode

Passagem de parametros

Pode-se usar o atributo params para passar os parametros da requisição dentro dele usa-se o nome do parametro e o seu valor.

Ex |>

axios.get('https://jsonplaceholder.typicode.com/posts', {
  params: {
      _limit: 5
  }
})
  .then(( response ) => {
      renderOutput(response);
  });
Enter fullscreen mode Exit fullscreen mode

Requisição POST

Para usar o método POST é necessário ter também dois parâmetros:

  • url

  • data (dados que se quer enviar)

Ex |>

const data = {
  title: 'foo',
  body: 'bar',
  userID: 1,
};

axios.post(url, data)
  .then(( response ) => renderOutput(response));
Enter fullscreen mode Exit fullscreen mode

Requisição PUT e PATCH

Os dois verbos HTTP, são parecidos, mas:

  • PUT -> é usado para quando for alterar todos os atributos de um dado objeto;

  • PATCH -> é usado quand for ter que alterar um único atributo deste dado objeto;

Ex |>

const put = () => {
    const data = {
        id: 1,
        title: 'Dev Punk',
        body: 'Dev Full Punkoso Mobile',
        userID: 1,
    };

    axios.put(`${url}/1`, data)
        .then(( response ) => renderOutput(response));

    console.log('put');
}


const patch = () => {
    const data = {
        title: 'Dev Punk da Silva',
    };

    axios.patch(`${url}/1`)
        .then(( response ) => renderOutput(response));

    console.log('patch');
}
Enter fullscreen mode Exit fullscreen mode

Requisição DELETE

Verbo usado para deletar dados no banco de dados.

Ex |>

const del = () => {
  axios.delete(url)
    .then(( response ) => renderOutput(response));

  console.log('delete');
}
Enter fullscreen mode Exit fullscreen mode

Múltiplas Requisições

Para fazer essas requisições o Axios usa as promisses do próprio JS.
Usando o método all para fazer isso:

Ex |>

const multiple = () => {
  Promisse.all([
      axios.get(`${url}?_limit=5`),
      axios.get(`${url_users}?_limit=5`),
  ]).then(( response ) =>  {
      console.table(response[0].data);
      console.table(response[1].data);
  });

  console.log('multiple');
}
Enter fullscreen mode Exit fullscreen mode

Transformar Respostas

Usado quando precisa adicionar um campo assim que for pego o payload (dados);

Ex |>

const transform = () => {
  const config = {
      params: {
          _limit: 5
      },
      transformResponse: [( data ) => {
          const payload = JSON.parse(data).map(( item ) => {
              return {
                  title: item.title
              }
          });

          return payload;
      }],
  };

  axios.get(url, config)
      .then(( response ) => renderOutput(response));

  console.log('transform');
}
Enter fullscreen mode Exit fullscreen mode

Tratamento de Erros

Os erros no Axios podem ser tratados da seguinte forma:

axios.get(`${url}/url-errada`)
  .then(( response ) => renderOutput(response))
  .catch(({ response }) => {
      renderOutput(response);
      console.log(response.data); // dados do erro
      console.log(response.status); // status desse erro
      console.log(response.headers); // retorna os headers dessa resposta
  });
Enter fullscreen mode Exit fullscreen mode

Cancelamento de Requisição

Para fazer isso, usa-se AbortController (nativa do JS) ou CancelToken
que são recomendadas pela Documentação do Axios.

Ex |>

const cancel = () => {
  const controller = new AbortController();
  const config = {
    params: {
        _limit: 5
    },
    signal: controller.signal
  };

  axios.get(url, config)
    .then(( response ) => renderOutput(response))
    .catch(( e ) => {
        console.log("MENSAGEM DE ERRO: ", e.message);
    });

  controller.abort();
  console.log('cancel');
}
Enter fullscreen mode Exit fullscreen mode

Interceptadores

Usados para fazer alguma transformação geral da aplicação, já que sempre fara isso quando tiver uma requisição;

Ex |>

// #> Intercept Request
// usado por exemplo para interceptar a requisição e injetar um json web token
axios.interceptors.request.use(( config ) => {
    config.headers.Authorization = 'dsfkandcuilmxmcmsaxZXdkaxmkc';
    console.log(config.headers);

    // Qualquer status que seja 2XX terá esse retorno
    return config;
}, ( error ) => {
        console.log('errooo');

        // Qualquer status que não seja 2XX terá esse retorno
        return new Promise.reject(error);
});


// #> Intercept Response
// usado por exemplo para interceptar a requisição e injetar um json web token
axios.interceptors.response.use(( response ) => {
    console.log(config.headers);

    // Qualquer status que seja 2XX terá esse retorno
    return response;
}, ( error ) => {
    console.log('errooo');

    // Qualquer status que não seja 2XX terá esse retorno
    return new Promise.reject(error);
});
Enter fullscreen mode Exit fullscreen mode

O Interceptadores de response podem ser usados para handling error assim não usaria catch.


Multiplas Instâncias do Axios

Criar múltiplas instâncias do Axios para manipular ele com varios contextos.

Desse jeito:

const newAxios = axios.create({
    baseURL: 'https://egg.api.com'
})

newAxios.defaults.headers.common['Authorization'] = 'New Axios';
Enter fullscreen mode Exit fullscreen mode

Assim podera consumir duas ou mais APIs com diferentes instâncias do Axios.


Chegamos ao fim e espero que tenha sido útil o conteúdo! 🤟

Top comments (0)