Setup Apollo Client para requisições graphQL em React
Eduardo Henrique Gris
Posted on November 25, 2024
Introdução
Nesse artigo será apresentado como configurar uma app React para requisições graphQL, para isso será usado a lib APolloClient
. A ideia é apresentar como configurar a app e um exemplo de como realizar as requisições.
Libs
-
@apollo/client
: lib que permite gerenciar estado e fazer requisições com GraphQL -
graphql
: lib que permite fazer o parse das queries GraphQL
Para adicionar as libs no projeto:
yarn add @apollo/client graphql --dev
Configuração
A seguir vou apresentar como fazer a configuração do ApolloClient para possibilitar requisições graphQL.
Primeiro será criado um context do ApolloClient, para tudo que estiver contido como children dele conseguir realizar requisições graphQL:
import {
ApolloClient,
ApolloProvider,
HttpLink,
InMemoryCache
} from '@apollo/client'
function ExampleApolloProvider({ children, token }) {
const httpLink = new HttpLink({
uri: 'https://www.example.com', // endpoint da sua api graphQL
headers: {
authorization: `Bearer ${token}`,
},
})
const client = new ApolloClient({
cache: new InMemoryCache(),
link: httpLink,
})
return <ApolloProvider client={client}>{children}</ApolloProvider>
}
export { ExampleApolloProvider as ApolloProvider }
Em const client
é inicializado o APolloClient
passando as informações da onde vai bater a partir do link
definido, e o cache a partir de uma instância de InMemoryCache
, que o APolloClient usa para fazer cache dos resultados das queries.
Em httpLink
é passada a uri
da api graphQL e definido os headers
necessários para as requisições, nesse caso está exemplificado um que usa Bearer token
.
Por fim, é definido o retorno e o export para permitir usar dentro da aplicação.
Na prática, tendo diferentes ambientes para teste e produção, a uri
poderia vir de uma env
definida para cada ambiente.
Considerando que é uma app que após o login salva o token no localStorage, e que se quer permitir requisições graphQL para toda a app de forma geral, é usado o ApolloProvider
que foi definido no arquivo acima:
import { ApolloProvider } from './contexts/ApolloContext'
import AppContent from './components/AppContent'
const token = localStorage.getItem('@tokenId')
const App = () => {
return (
<ApolloProvider token={token}>
<AppContent />
</ApolloProvider>
)
}
Nesse caso do exemplo, está se pegando o token
do localStorage (nesse exemplo, como se estivesse salvo com a chave @tokenId
lá) e passando para o ApolloProvider
. O AppContent
está sendo passado como children do ApolloProvider
, então tudo que está contido dentro dele, o que seria a app como um todo, vai conseguir realizar requisições graphQL.
Partindo de um query chamada user
que a api possui, a qual retorna o nome do usuário e a profissão, vai ser definido o arquivo com a query a ser chamada:
import { gql } from '@apollo/client'
const GET_USER = gql`
query GetUser {
user {
name
occupation
}
}
`
export default GET_USER
GET_USER
corresponde a como vai ser chamada a query pela app React e user
o nome da query que se vai buscar na api.
No arquivo que define o AppContent
, vai ser chamada a query GET_USER
e usado o retorno dela:
import { useQuery } from '@apollo/client';
import GET_USER from './query/UserQuery'
const AppContent = () => {
const { loading, error, data } = useQuery(GET_USER)
if (loading) return <p>Loading...</p>
if (error) return <p>Falha na requisição</p>
return (
<>
<h1>Welcome!</h1>
<p>Name: {data.user.name}</p>
<p>Occupation: {data.user.occupation}</p>
</>
)
}
O hook useQuery
vai executar a query definida em GET_USER
, retornando loading
true enquanto a requisição não for finalizada, retornando error
se a requisição falhar e retornando data
quando a requisição for finalizada com sucesso. Enquanto não tiver retornado data
, vai trazer a mensagem Loading...
na tela. Caso finalize a requisição com erro, vai trazer a mensagem Falha na requisição
. Caso finalize a requisição com sucesso, será populado na tela o nome do user e a profissão dele (name
e occupation
).
E dessa forma está configurado o ApolloClient
para requisições graphQL e pronto para uso.
Conclusão
A ideia foi apresentar como configurar o APolloClient para possibilitar app React realizar chamadas graphQL, mostrando a definição do context, o uso desse context e a exemplificação de como executar uma query.
Segue o link da documentação do ApolloClient para quem quiser se aprofundar mais.
Posted on November 25, 2024
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.