Skip to content

Como chamar uma API GraphQL com JavaScript?

Uma vez que temos um servidor funcional com uma API GraphQL, precisamos de uma maneira de acessar essas informações a partir da nossa aplicação. A seguir, mostrarei diferentes maneiras de consultar uma API GraphQL usando JavaScript.

Usaremos crases, ou seja, (` `) em vez de (" ") ou (' ') para strings, pois elas nos permitem colocar strings de várias linhas em JavaScript.

Axios

Axios é uma biblioteca para fazer consultas ajax. É popular por sua simplicidade e seu uso baseado em Promises, além de ter suporte para async e await.

javascript
// consulta para pessoas com 18 anos
axios({
  url: 'http://localhost:4000/graphql', 
  method: 'POST',
  data: {
    query: `
      query {
        people(age: 18) {
          id
          name
          surname
          age 
          hobbies
        }
      }
    `,
  },
})
  .then((res) => console.log(res.data))
  .catch((err) => console.log(err));

Fetch

Fetch é uma função nativa do JavaScript para fazer consultas ajax, no entanto, não tem suporte em navegadores mais antigos.

javascript
fetch('http://localhost:4000/graphql', {
  method: 'POST', 
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    query: `
    query {
      person(id: 1) {
        id
        name
        surname
        hobbies
      }
    }
  `,
  }),
})
  .then((res) => res.json())
  .then((res) => console.log(res));

XMLHttpRequest

Como fetch, XMLHttpRequest é uma função nativa do JavaScript, exceto que, ao contrário de fetch, tem muito melhor suporte para navegadores mais antigos.

javascript
let query = {
  query: `
    query {
      person(id: 1) {
        id
        name 
        surname
        hobbies
      }
    }`,
};

let xhr = new XMLHttpRequest();
xhr.responseType = 'json';
xhr.open('POST', 'http://localhost:4000/graphql');
xhr.setRequestHeader('Content-Type', 'application/json');

xhr.onload = function () {
  console.log(xhr.response);
};

xhr.send(JSON.stringify(query));

Diversos

Podemos criar funções em torno desses métodos de consulta que nos permitem encurtar o código e evitar que repitamos a mesma coisa várias vezes. Mostrarei um exemplo com axios.

javascript
// wrapper para consultar uma api graphql com axios
function gql(query) {
  return new Promise((resolve, reject) => {
    axios({
      url: 'http://localhost:4000/graphql',
      method: 'POST',
      data: { query },
    })
      .then((res) => resolve(res.data['data']))
      .catch((err) => reject(err));
  });
}

Então poderíamos usar esta função da seguinte maneira

javascript
gql(`
  query {
    person(id: 1) {
      id
      name
      surname
      hobbies 
    }
  }
`)
  .then((data) => console.log(data))
  .catch((err) => console.log(err));

Dessa forma, podemos consumir nossa API com o método de nossa preferência.

Espero que este guia seja útil.