Aula 24
Como Usar Input Type para Facilitar a Mutation no GraphQL (Aula Tutorial)
Summary
Resumo da Aula sobre Input Types em Mutations
Nesta aula, aprendemos a utilizar Input Types para simplificar a definição de mutações no GraphQL, especificamente para adicionar uma nova companhia. Aqui está um resumo dos principais pontos abordados:
O que são Input Types?
- Os Input Types permitem agrupar vários argumentos em um único objeto, facilitando a passagem de dados para a mutação.
- Em vez de receber múltiplos argumentos separados (como nome, data de fundação e site), podemos encapsular todos eles em um único argumento.
Criação do Input Type
-
Definição de um novo tipo:
- Criamos um tipo chamado
companhiaInputType
como umGraphQL input object type
, que contém os mesmos campos que o tipo de companhia, mas sem o ID. - Os campos definidos são:
nome
,fundada_em
, esite
.
- Criamos um tipo chamado
-
Configuração dos campos:
- Os campos no input type podem ser definidos como obrigatórios utilizando
new GraphQLNonNull(GraphQLString)
.
- Os campos no input type podem ser definidos como obrigatórios utilizando
const companhiaInputType = new GraphQLInputObjectType({
name: 'companhiaInput',
fields: {
nome: { type: GraphQLNonNull(GraphQLString) },
fundada_em: { type: GraphQLNonNull(GraphQLString) },
site: { type: GraphQLNonNull(GraphQLString) },
},
});
Modificação da Mutações
- Alteramos a mutação para que o argumento não seja uma lista separada de
args
, mas sim um único argumento,input
, que é do tipocompanhiaInputType
.
addCompanhia: {
type: companhiaType,
args: {
input: { type: companhiaInputType },
},
resolve(parent, args) {
const { nome, fundada_em, site } = args.input;
// lógica para adicionar a companhia
},
}
Conclusão
A introdução de Input Types torna a manipulação de múltiplos argumentos mais eficiente e organizada. A mutação agora espera um único objeto, permitindo uma estrutura clara e simplificada durante a adição de novas companhias.
Video Transcript
Estamos de volta, acabamos de aprender na uma télioca como fazer uma mutação,
a Muteche, para poder adicionar uma nova companhia.
Nesta aula nós vamos falar de input type para poder facilitar a criação de recursos
aqui na nossa Muteche.
Nos argumentos, em vez de ter vários argumentos separados, vamos ter só um argumento que
embrulha todos os outros.
Então, vamos falar de input type.
Note aqui que quando a gente criou a mutação para adicionar a companhia, temos aqui os
argumentos com o nome da companhia, a data de fundação e o site.
E todos eles são separados.
E você nota aqui de volta de todo o texto, lá no Muteche de adicionar a companhia,
nós criamos args e separamos cada arg aqui.
E quando você dá o Creator todos são separados.
Agora, seria legal se a gente pudesse pegar todos esses argumentos e colocar em uma só
propriedade, uma só entidade.
Para isso a gente vai usar input types.
Para input types vai ser assim.
Você note aqui de volta o esquema 4js, lá no definição do companhia type, nós definimos
esse tipo aqui com o nome companhia e as fields, os campos de D, nome, fundada e site e um
relacionamento aqui com os produtos.
Então, para poder fazer o seguinte aqui, em vez de dizer esses caras separados, você
pode fazer input e passa um objeto de ssamsim, o chave, ao redor de todas as propriedades,
para poder fazer isso a gente vai usar input type.
Input type você faz o seguinte, você vai criar um novo tipo chamado companhia input
type.
Agora, não vai ser GraphQL object type, vai ser GraphQL input object type.
Então, vai ter as mesmas fields de companhia, exceto o ID, porque a gente só precisa do
nome, fundada em e o site.
Então, vamos aqui em cima, antes de companhia type, vamos definir companhia input type,
vai ser new GraphQL input object type e passa um objeto.
Agora, a gente não tem esse cara requerido, vamos lá em cima e requerir GraphQL input
object type.
Adicionei a lista de requerir methods ao pacote GraphQL.
E com isso, vamos continuar aqui.
Então, a gente vai fazer aquela mesma coisa, name, com o nome da field, companhia input,
eu vou chamar.
Qual é os fields, os campos?
Os campos vai ser o nome, fundada em e site.
Então, eu posso até copiar do companhia type, tá?
Copiar aqui.
Nome, fundada em e o site.
Agora, se você quiser deixar cada um desses argumentos obrigatórios, você pode adicionar
new GraphQL, no, no e chamar-se cara com todos a string, tá?
Então, vou descerar esse e esse.
Dessa maneira, todos os argumentos serão obrigatórios.
Então, criamos o companhia input type, que é um GraphQL input object type.
Depois de a gente criar isso, a gente tem que modificar a nossa mutação.
Vai lá embaixo na mutação, newTest aqui.
Em vez de falar os orgs aqui, dessa maneira, você vai, eu vou comentar aqui só para deixar
o código para você, você vai falar input, o argumento vai ser input, aí você põe
companhia input type, tá?
Aqui, ó.
Dessa maneira.
Aí quando chegar em orgs, não vai ser mais orgs, nome, fundada em site.
Você pode pegar o input que está dentro do orgs, tá?
Isso significa orgs.input, eu pego esse cara e põe na variável input.
Então, aqui, em vez desses caras de orgs, você pode votar input.
Tá?
Em salvar.
Vamos agora tentar novamente, voltando ao navegador.
Vamos ver, você adiciona a propriedade aqui.
Input e passa um objeto, se informar a trugação.
Vou executar adicionar a companhia.
Adicionar a companhia, deixa eu reiniciar.
O tipo de mutation type para adicionar companhia tem que ser input type, mas ele é o bitve
undefined, então vamos ver o que está acontecendo aqui.
Eu botei companhia input type como input.
Retorna companhia type, tá certo.
Companhia input type lá em cima.
Graphic é o input object type.
Companhia input, fields.
Nenhum comentário ainda (loading...)
Nenhum comentário ainda (loading...)
Gostou da aula? 😆👍
Apoie nosso trabalho com uma doação: