0% acharam este documento útil (0 voto)
166 visualizações4 páginas

APIs Flexíveis com GraphQL

O documento descreve como o GraphQL pode ser usado para criar APIs flexíveis, fornecendo uma alternativa à abordagem REST. Ele discute como o GraphQL define uma linguagem de consulta para APIs que permite que os clientes solicitem exatamente os dados de que precisam através de uma única URL, ao invés de múltiplos endpoints como no REST. Também destaca como o GraphQL delega a responsabilidade de especificar os dados desejados para o cliente, ao invés do servidor determinar quais dados retornar como no REST.
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
166 visualizações4 páginas

APIs Flexíveis com GraphQL

O documento descreve como o GraphQL pode ser usado para criar APIs flexíveis, fornecendo uma alternativa à abordagem REST. Ele discute como o GraphQL define uma linguagem de consulta para APIs que permite que os clientes solicitem exatamente os dados de que precisam através de uma única URL, ao invés de múltiplos endpoints como no REST. Também destaca como o GraphQL delega a responsabilidade de especificar os dados desejados para o cliente, ao invés do servidor determinar quais dados retornar como no REST.
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd

GraphQL criando APIs profissionais e flexíveis

01. Introdução
02. Schema e Query
03. Mutations
04. Banco de dados
05. Projeto final
06. Tópicos avançados
07. Conclusão

O conceito de GraphQL e onde ele está na stack de desenvolvimento…


O GraphQL está aonde temos nossa API REST, nossa API webservice
que usamos normalmente REST, o GraphQL é uma alternativa ao REST.

O GraphQL pode tanto substituir uma API REST quanto pode trabalhar
em conjunto, dentro de uma mesma aplicação podemos ter serviços
REST (webservices REST) e além de ter uma API GraphQL executando,
podemos usar a API GraphQL para encapsular várias aplicações REST
existindo várias possibilidades, pois é um framework bastante
poderoso que traz flexibilidades que uma API do tipo REST não
conseguira entregar.

Então o GraphQL está situado no back-end da aplicação e é uma


alternativa muito interessante, inclusive o projeto final do curso
é baseado em um projeto real da Coder, foi extraído desse projeto
algumas coisas a mais que não agregariam conhecimento para nós
deixando apenas algumas coisas como: autenticação (não só
autenticar mas também definir perfis de usuários) por exemplo a
consulta tal pode ser acessada pelo administrador, a consulta “x”
pode ser acessada por qualquer usuário logado, a consulta “y” é
pública então todo mundo consegue acessar independente de estar
logado ou não, a consulta “z” nem o administrador pode acessar
pois apenas o dono do sistema (awner)que é um perfil ainda maior
que adminstrador pode acessar, então conseguimos ter uma
flexibilidade muito grande além de trazer padrões de organização
de aplicações reais em back-end.

Podemos usar também como referência para a nossa própria


aplicação, no capítulo 2 veremos schema e query que é a alma do
framework.

No projeto final iremos ver como podemos colocar um projeto só


backend ter tanto parte da API disponibilizada via GraphQL como
também parte da API disponibilizada via REST.

Podemos ter uma API REST e uma API GraphQL sendo executadas dentro
de uma mesma aplicação.

Nos primeiros exercícios vamos usar o Apollo Server sem o Express


sendo que mais adiante veremos como será feita essa integração.

No capítulo 4 veremos conceitos como migrations, QueryBuilder e


além de outros conceitos relacionados a banco de dados.
O que é GraphQL?

Nada mais interessante do que vermos o site do GraphQL:

O GraphQL atende a necessidade de se obter dados ou até mesmo


persistir dados do nosso back-end de uma forma mais flexível.

O GraphQL é uma linguagem de consulta para APIs em tempo de


execução para atender consultas com dados existentes. O GraphQL
fornece uma descrição completa e compreensível dos dados em sua
API, oferece aos clientes o poder de solicitar exatamente o que
eles precisam e nada mais, facilita a evolução das APIs ao longo
do tempo e permite poderosas ferramentas de desenvolvimento.

O GraphQL define uma forma de pedirmos para a API aquilo que


queremos obter como resposta e acabamos de tirar digamos por assim
a responsabilidade do servidor.

Essa responsabilidade fica para o cliente (front-end), seja uma


aplicação mobile ou uma aplicação web.

A aplicação cliente dirá aquilo que ela quer e em resposta a API


GraphQL vai retornar os dados que foram solicitados.

Vamos supor que temos um webservice que vai retornar o id do


usuário, nome do usuário e e-mail do usuário de todas as contas
que o usuário tem, e aí temos outro serviço que necessitara
apenas de parte dessas informações, ou seja, veio mais dados para
o front-end do que o necessário, no GraphQL não temos esse
problema pois quem está dizendo que quer como resposta é o próprio
front-end e não a aplicação back-end.

Rest vs GraphQL

Uma das diferenças básicas de uma API GraphQL para uma API REST é
que na API REST vamos criar vários end-points (urls) sendo que
essas urls através de requisições do tipo GET, POST, PUT, DELETE e
dentre vários outros verbos do HTTP vamos obter, inserir, alterar
e deletar dados.

Nas APIs REST trabalhamos com vários end-points diferentes então,


por exemplo, temos o end-point /cliente/id, outro somente
/cliente, mais outro somente /fornecedor, então como podemos ver
temos várias urls cada uma retornando um conjunto específico de
dados.

Quando começamos a ter relacionamentos, por exemplo eu quero obter


a partir do fornecedor de código 3 quais os produtos que esse
fornecedor me vende, nesse caso teremos urls compostas.

O que pode acontecer dependendo da complexidade da consulta é que


criará mais e mais urls para que possamos definir formas
diferentes de obter esses dados.
Diferente no GraphQL terá um único ponto de entrada, sendo que a
partir dessa única url passaremos no corpo da requisição,(devemos
saber que quando temos nossa aplicação front-end e nossa aplicação
back-end em cima do protocolo HTTP essa comunicação se dá por
requisição e resposta, então temos uma request e uma response,
então quando fizermos a request para essa única url que será a
nossa “url api” precisaremos então no body dessa requisição passar
a nossa consulta “query” em GraphQL, ou seja, usando a sintaxe do
GraphQL) lá o servidor verá o que está dentro do body da
requisição que é uma consulta em GraphQL e ele usará essa consulta
para devolver os dados, ou seja, trocamos várias urls distintas do
REST por uma única do GraphQL.

No REST é necessário criar vários web-services para atender


determinadas demandas, pois na url passamos poucas informações, na
maioria das vezes passamos apenas um id e é retornado todos os
dados prontos pois o que será retornado já está implementado de
forma fixa na API REST.

Podemos ter uma API REST que retorna tudo aquilo que precisamos
mas também retorna informações extras que vai apenas consumir
banda e não terá nenhuma serventia.

Em uma API GraphQL passamos diretamente os dados que queremos


obter, estamos delegando a responsabilidade de dizer o que
queremos, o front-end passa uma consulta pedindo exatamente o que
quer, essa consulta será passada dentro do corpo da requisição
para um único end-point que criamos na nossa API GraphQL.

A partir da query que foi passada como parâmetro da requisição


então ela será interpretada pelo GraphQL, e a partir do mapeamento
que foi feito previamente através dos resolvers ou dos tipos que
criamos ele conseguira resolver os dados.

Como a API em GraphQL resolverá os dados é indiferente, esses


dados podem estar dentro de um ou de vários bancos de dados ou até
mesmo em um servidor REST ou GraphQL.

Então temos uma flexibilidade muito grande a partir de uma única


API em GraphQL obter dados de fontes distintas.

No REST temos múltiplas urls na nossa API, por exemplo


/clientes(GET), /clientes(POST), /clientes/1(PUT),
/clientes/1(DELETE), como vimos temos várias urls apenas pensando
no cliente, se tivermos fornecedor teríamos que ter uma série de
urls para fornecedor e assim por diante, nesse exemplo do REST
usamos os verbos do HTTP para diferenciar as funcionalidades em
cima de uma mesma url.
Como os dados são organizados?

Você também pode gostar