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.