Aula 30
Revisão e Conclusão do Curso de GraphQL com servidor Express
Summary
Resumo da Aula de GraphQL com Express
Nesta aula, foi concluído o curso sobre GraphQL com Express. A seguir, um resumo dos principais tópicos abordados:
Instalação e Configuração
- Instalamos pacotes como Express para rodar o servidor e Express GraphQL como middleware.
- Usamos
app.use
para definir o endpoint de GraphQL e configuramos o middleware com o schema.
Schema de GraphQL
- Query: Usado para obter dados.
- Mutation: Usado para criar, atualizar ou deletar dados.
- A declaração do schema é feita com
new GraphQLSchema
.
Tipos do GraphQL
- GraphQL Object Type: Define os tipos de objetos, como
rootQueryType
. - Cada tipo tem fields, que são os campos desse tipo, como obter todas as companhias ou uma companhia por ID.
- O método resolve determina como encontrar os recursos solicitados.
Definição de Tipos
- Companhia Type: Utilizamos
GraphQLObjectType
para definir campos como ID, nome, data de fundação e site. - Realizamos relações entre companhias e produtos através de fields.
- Usamos GraphQL Non-Null para indicar que um campo é obrigatório.
Mutações
- Definidas de maneira similar às queries, com um objeto GraphQL e ao menos um field por operação (ex: adicionar ou remover companhia).
- Os argumentos do usuário são coletados através da propriedade
args
. - Implementamos Input Types para simplificar a passagem de múltiplos argumentos como um único objeto.
Erros e Resolução
- Aprendemos a criar erros personalizados para retorná-los ao cliente caso ocorra algum problema, como por exemplo, se o site de uma companhia não começar com "http".
Testando com GraphiQL
- Testamos as queries e mutações utilizando a ferramenta GraphiQL, acessível pelo navegador.
- Podíamos utilizar variáveis em nossas operações, definindo tipos e requisitos conforme necessário.
Conclusão
- Ao final, o curso forneceu uma compreensão abrangente sobre como implementar e testar APIs GraphQL utilizando o Express.
- Agradecimentos aos participantes e incentivo para continuar praticando.
Obrigado por participar e até a próxima!
Video Transcript
Olá pessoal, nesta aula nós concluímos o nosso curso de GraphQL com Express.
Então vamos dar uma revisada.
Então a gente começou tudo instalando os placotes Express para poder rodar o nosso servidor
e Express GraphQL, que é o middleware de Express.
Nós usamos o middleware com app.use para o endpoint.graphql e chamamos o middleware que passamos o schema.
Também usamos o graphical só para debugar e testar o nosso servidor de GraphQL aqui.
Dentro do esquema de GraphQL nós determinamos duas propriedades.
Nós definimos o query, que são usados para obter dados.
Definimos a propriedade mutation, que é uma mutação,
normalmente usada para quando você cria, atualiza ou deleta dados.
Quando você cria o seu esquema de GraphQL você tem que dizer new GraphQL schema.
Nesses tipos você pode requerir do pacote chamado GraphQL.
Quando a gente faz nossa query a gente diz novo GraphQL object type, que é tipo objeto.
Esse tipo objeto sempre tem o nome, que é nem propriedade nem...
Você diz qualquer nome, nesse caso eu diz root query type, que é a query haiz.
O ponto de partida do nosso aplicativo para cada query vem daqui.
E tem as fields, são os campos desse tipo.
Nesse caso eu tenho um campo para cada recurso, por exemplo, para obter todas as companhias,
para obter uma só companhia por ID, para obter todos os produtos e assim por diante.
Por exemplo, para companhias pressa field, a gente sempre tem o type.
Nesse caso é uma lista de companhia type, a gente definiu o nosso propriedade para companhia.
E tem o método resolve, que é usado para dizer ao GraphQL como encontrar esse recurso.
É a função ou o método resolver.
Para a companhia type nós definimos nosso próprio tipo aqui usando o GraphQL object type,
sempre aquela mesma coisa, name, que é o nome do tipo, e o fields.
Metodo de fields, cada campo tem o tipo, nesse caso um ID, GraphQL int, que é inteiro.
Tem o nome da companhia, que é uma string, data de fundação, que é uma string também,
embora que seja uma data, tem o site também que é uma string.
E tem também o relacionamento a produtos por meio do campo chamado produtos,
que é uma lista de produto type, que é outro tipo que a gente criou.
Nós temos o método resolve do para poder localizar os produtos dessa companhia.
Se você tiver uma companhia tal, você pode pegar o ID da companhia, que é o chamado parent value, o valor pi.
Nesse caso será a companhia e eu posso pegar o ID da companhia dizendo parent value.id.
Nós definimos nossa API simulada com o método para poder encontrar produtos por p, o ID da companhia.
Se você olhar também o produto type, ver aquela mesma coisa, name, e fields.
Nós definimos o fields com uma função que retorna o objeto por causa daquele problema do companhia type aqui,
ser indefinido quando você executar o código.
Se você mudar o objeto para uma função que retorna o objeto para o fields,
não vai ter mais problema de companhia não ser definido, companhia type.
Também fizemos um ORM simulado para poder acessar um banco de dados falsos e encontrar companhia.
Nesse caso é o relacionamento do produto que pertence à companhia.
A gente adicionou a field chamada companhia e na função método resolve do,
ele usa o parent value.compania.id.
Nesse caso o parent vai ser o produto e você usa o campo companhia.id para poder encontrar companhia desse produto.
Estou voltando aqui às nossas campos para query.
Companhias, companhia, aprendemos o GraphQL non-null para poder indicar que o campo é obrigatório.
GraphQL non-null não pode ser valor-null.
E assim por diante.
Então aprendemos também sobre mutações, mutation, faz aquela mesma coisa,
define um objeto GraphQL, name, qualquer nome, mutation.
E os fields, nesse caso cada field será uma operação, por exemplo, adicionar companhia,
remover companhia, adicionar produto assim por diante.
Para fazer uma mutação é quase a mesma coisa que escrever uma query, aquela mesma coisa.
Ponho o type que você espera que seja retornado quando você executar essa mutação.
Nesse caso, normalmente você retorna o objeto da companhia,
incluindo o id quando você termina a operação com sucesso.
Para você obter argumentos ou parâmetros de entrada do usuário, você usa o propriedade args,
que também pode ser usada lá em cima da sua query, não é só para muta.
E você define, nesse caso a gente aprendeu, sobre o input type,
para a gente não ter que digitar, separar cada argumento aqui fornecido pelo usuário.
Em vez disso a gente usou companhia input type, que a gente definiu lá em cima.
Companhia input type é um GraphQL input, input object type.
Tem essa palavra, chave input aqui, e você põe as parâmetros dentro desse tipo, dentro do fields,
com os dados necessários para poder criar uma companhia.
Aí você, quando for no GraphQL, no GraphQL lá, você é só digitar o input aqui.
Formato JSON, em vez de separar cada argumento com um anvírgulo.
É em uma só entidade chamada input.
Voltando aqui ao editor de texto, depois do companhia type, voltando à mutação.
Mutação adicionar companhia.
Tem a função resolver, para adicionar companhia, que a gente aprendeu também como enviar erros ao cliente.
Por exemplo, a gente chegou, se o site da companhia realmente, a string começa com HTTP,
se não começar, a gente faz o seguinte, a gente cria um novo erro,
e dá throw para jogar o erro, e ele vai lá do cliente, dá receber aquele erro,
e não vai continuar para criar a companhia.
Se dá tudo certo, aí você chama companhia create, com objeto da companhia, que vem do args,
que são os argumentos pôrnecidos pelo usuário, pelo cliente, e dentro de args tem input que a gente usou aqui.
Mesma coisa, quase a mesma coisa para remover companhia, adicionar produto, aquela mesma coisa.
Para remover companhia, só precisa do ID da companhia, que é fornecido como argumento ID,
que é tipo GraphQL int, que é obrigatório e não pode ser no.
Tem a função resolver, que chama o ourm-simulado para destruir ou delatar a companhia pelo ID,
fornecido pelo argumento args.id.
Tá bom?
E esse é o code que a gente fez, e a gente aprendeu tudo isso usando,
testou tudo isso usando o nosso cliente GraphQL, que é bem útil para a gente testar as coisas.
Do navegador localhost, a porta, barra GraphQL, e você pode escrever as mutações de queries aqui,
pode dar o play, se você não mear cada mutação e query, você pode escolher qual das operações para rodar.
Esse cara vai aparecer no operation name quando você fizer a query.
Você pode também usar variáveis para suas queries ou mutações, é só adicionar parênteses.
Depois do nome da query ou do nome da mutação aqui, não confunda esse nome com o field, que é a companhia.
Não confunda esse adicionar companhia com essa field chamada adicionar companhia, tá?
Então, o parâmetro variables, você pode definir aqui os argumentos com o dollar e o nome da variável,
seguido do tipo da variável, depois de dois pontos.
Se você quiser que essa variável seja obrigatória, você adiciona o sinal de exclamação.
Aí é só dizer a sua field aqui, nesse caso companhia, os argumentos, nesse caso id, que vem com o valor vêm da variável, dollar e d.
Então, o cliente, você pode fornecer essa valor das variáveis, dentro da propriedade chamada variables,
que vai aparecer no seu pedido, no corpo do seu pedido.
Nesse caso, graphical tem essa sessão aqui de variáveis que você passa um objeto de alteração, que você pode definir cada variável aqui, tá?
E esses valores serão substituídos aqui pelo servidor, onde estiverem as variáveis.
Graphical também é interessante, porque você pode clicar nos seus tipos aqui para aprender mais sobre esses tipos de graphical,
até os seus próprios tipos, por exemplo, a gente criou o companhia input, você note aqui no lado direito que tem o nome,
fundado em site e o tipo de cada parâmetro, cada campo, e o sinal de exclamação significa que esse campo é obrigatório, não pode ser branco, ficar em branco, tá?
Então é bem legal, você pode ver companhia, tipo, companhia aqui, os campos, e pode rodar o companhia e pedir assim por diante.
Então, chegamos ao fim do curso, muito obrigado por assistir e até a próxima.
Nenhum comentário ainda (loading...)
Nenhum comentário ainda (loading...)
Gostou da aula? 😆👍
Apoie nosso trabalho com uma doação: