7. “
GraphQL é uma linguagem de consulta
para APIs e um tempo de execução para
atender essas consultas com seus dados
existentes.
7
8. História
O Facebook começou um projeto interno com o
intuito de resolver o problema de do feed de
notícias, que antes é renderizado em HTML e
eles tinham o desafio de construir nativamente no
IOS, porém se debateram com a quantidade de
dados que eram relacionadas a esta área da
aplicação, daí surgiu o GraphQL, que em 2015 foi
anunciado na RubyConf e disponibilizado para a
comunidade.
8
9. Especificaçã
o
Hoje o GraphQl é um especificação, ou seja,
outros projetos como o Falcor da Netflix seguem
este mesmo modelo.
O público-alvo desta especificação não é o
desenvolvedor do cliente, mas aqueles que têm
ou estão ativamente interessados em construir
suas próprias implementações e ferramentas
GraphQL.
9
10. O que não é…
Não está vinculado a nenhum
banco de dados ou mecanismo de
armazenamento específico.
13. Under-fetching
Múltiplas chamadas que o cliente tem que fazer
para montar uma experiência para o usuário, isso
se resume em várias idas e voltas no
servidor(round trips) para se ter os dados
necessários.
/ofertas
/preferencias
/produtos/{id}
/produtos/{id}/ofertas
14. Over-Fetching
Recebimento de dados
desnecessários para um contexto do
cliente.{
"type": {
"color": "#808080",
"order": 0,
"name": "Blackout",
"description": "No production deployments during this
blackout period",
"ghostedDate": 0,
"id": "00000000-0000-1100-0000-000000000011",
"version": 0,
"dateCreated": 0
},
"startDate": 1413384452,
"endDate": 1413394452,
"isOneDay": false,
"releases": [],
"description": "Optional description",
"name": "Example event",
"id": "4f47d1fe-f25a-4f9e-a91a-c8fb0668e99a",
"version": 0,
"dateCreated": 1421692929323
}
15. Versionamento e
manutenção de API
Necessidade de cada cliente, aparece a
necessidade de modificação dos recursos
oferecidos, isso requer versionamento e gestão
dos recursos existentes e novos.
16. Falta de
independência entre
front e backend
Front-end sempre fica dependendo do backend
para evoluir a experiência visual das aplicações.
17. Payload
Problemas com payloads em plataformas mobile
visto que muitos clientes acabam usando
aplicativos mobile e com internet muitas vezes
bem limitada, afetando a experiência e melhoria
no consumo da banda da aplicação.
18. Alternativa
Rotas específicas por URL: ainda teria a questão
da dependência, quando sua experiência mudar o
serviço rest deverá ser alterado também. Isso
considerando que você terá rotas específicas
para cada cliente de cada view, nem sempre uma
aplicação web e mobile tem os mesmos dados
para a mesma tela, isso gera duplicidade que por
sua vez gera mais dificuldades na hora de dar
manutenção.
20. O que temos?
Único endpoint
Fortemente
tipado
o cliente obtém
os dados que
realmente vai
utilizar
21. Quem utiliza?
Airbnb, Atlassian, Audi, CNBC,
GitHub, Major League Soccer,
Netflix, Shopify, The New York
Times, Twitter, Pinterest, etc..
21
https://graphql.org/users/
23. Type
23
tipo Starship {
id : ID !
nome : String !
length ( unidade : LengthUnit = METER ) : Float
}
● Int: Um inteiro de 32 bits assinado.
● Float: Um valor de ponto flutuante de precisão dupla assinado.
● String: Uma seqüência de caracteres UTF-8.
● Boolean: trueOu false.
● ID: O tipo escalar de ID representa um identificador exclusivo
24. Query e
Mutation
type Query {
recentPosts(count: Int, offset: Int): [Post]!
}
type Mutation {
writePost(title: String!, text: String!,
category: String) : Post!
}
32. CASE
- Client - server
- Cache com Apolo
- Versionamento tão
complexo quanto com
REST
- Certeza 1 - atrapalha o
desenvolvimento mobile
- Certeza 2 - melhora a
experiência do cliente
Ubiratran Soares
32
33. Pontos de
atenção
● Implementar um cache
simplificado com o GraphQL é
mais complexo do que
implementá-lo no REST.
● Limitação dos recursos
● Governança
33