Skip to main content

Codegen

Gerando código a partir de uma API GraphQL.

Para garantir o funcionamento do Codegen é necessário configurar o arquivo codegen_fetch.ts, o mesmo faz toda a autenticação se necessário na API GraphQL e em seguida faz toda a geração de código.

Existe a possibilidade de ao tentar rodar o comando de geração não ocorrer com sucesso, pois a API estará com a rota de consulta das informações bloqueada apenas para quem tiver autenticado. Em seguida será mostrada a forma de como contornar isso.

codegen_fetch.ts
import fetch from 'cross-fetch';import { getIntrospectionQuery, buildClientSchema } from 'graphql';import publicEnv from './public.env';export default async () => {  const API_URL = publicEnv.GRAPHQL_CODEGEN_URL;  // Authentication request to obtain token to fetch schemas.  const authResponse = await fetch(API_URL, {    method: 'POST',    headers: {      'Content-Type': 'application/json'    },    body: JSON.stringify({      query: `query login($user: UserLoginInput!) {                login(user: $user) {                    token                }            }`,      variables: {        user: {          email: 'test@email.com',          password: '123'        }      },      operationName: 'login'    })  });  const dataAuth = await authResponse.json();  // Get introspection query to fetch all details of api.  const introspectionQuery = getIntrospectionQuery();  // Instrospection query pass to codegen obtain all details of api and generate types and composables.  const response = await fetch(API_URL, {    method: 'POST',    headers: {      'Content-Type': 'application/json',      Authorization: `Bearer ${dataAuth.data.login.token}`    },    body: JSON.stringify({      query: introspectionQuery,      operationName: 'IntrospectionQuery'    })  });  const data = await response.json();  return buildClientSchema(data.data);};

Atente-se as linhas destacadas:

  • Linhas 9 à 28: É feita uma request de autenticação para obter um token válido.
  • Linha 30: Obtemos o resultado dessa request.
  • Linha 33: Aqui a partir da biblioteca graphql geramos uma query de introspecção, que serve para consultar todos os dados da api.
  • Linha 36: Fazemos a request de introspecção para a api passando no header Authorization o token, assim obtendo todas as informações necessárias para o codegen gerar todos os códigos necessários.
  • Linha 48: Obtemos o resultado da request de introspecção.
  • Linha 50: Retormanos como resultado final o metódo final de construção das informações com o que foi retornado da request de introspecção.
i
Para saber: Todo o processo de autenticação só é necessário para API's que tem esse nível de proteção, em caso de não haver necessidade de obtem um token previamente, não há necessidade de configurar o arquivo codegen_fetch.ts.

Nesse caso apenas configurar o arquivo codegen.yaml já será o suficiente passando um schema com uma url apontando para a API GraphQL.