Entendendo o Graphql e seu uso, utilizando um servidor Java como exemplo.
Size: 1.96 MB
Language: pt
Added: May 05, 2019
Slides: 36 pages
Slide Content
GraphQl O que é, onde e porque usar? ‹#› PHP C++ JAVA HTML
Agenda Definição Problema Pontos importantes Estrutura Implementação O que ninguém fala Conclusão ‹#›
My name is Paula
Porque estamos vendo este tema?
‹#›
‹#› Definição
GraphQL é uma linguagem de consulta para APIs e um tempo de execução para atender essas consultas com seus dados existentes. ‹#›
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. ‹#›
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. ‹#›
O que não é… Não está vinculado a nenhum banco de dados ou mecanismo de armazenamento específico.
‹#› Problema
‹#› Microserviços UX Rest Mobile
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
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 }
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.
Falta de independência entre front e backend Front-end sempre fica dependendo do backend para evoluir a experiência visual das aplicações.
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 .
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.
‹#› Pontos Importantes
O que temos? Único endpoint Fortemente tipado o cliente obtém os dados que realmente vai utilizar
Quem utiliza? Airbnb, Atlassian, Audi, CNBC, GitHub, Major League Soccer, Netflix, Shopify, The New York Times, Twitter, Pinterest, etc.. ‹#› https://graphql.org/users/
Querys Mutations Types Schemas ‹#›
Type ‹#› 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 : true Ou false . ID : O tipo escalar de ID representa um identificador exclusivo
Query e Mutation type Query { recentPosts(count: Int, offset: Int): [Post]! } type Mutation { writePost(title: String!, text: String!, category: String) : Post! }
type Post { id: ID! title: String! text: String! category: String author: Author! } type Author { id: ID! name: String! thumbnail: String posts: [Post]! } # The Root Query for the application type Query { recentPosts(count: Int, offset: Int): [Post]! } # The Root Mutation for the application type Mutation { writePost(title: String!, text: String!, category: String) : Post! } Salvar : Onde -> /resources Como -> .graphqls
Type Query Beans GraphQLQueryResolver GraphQLMutationResolver Mutation
Query <campo> is<campo> – type Boolean get<campo> public List<Oferta> getObterOfertas() { return ofertasRepository.findAll(); }
‹#›
‹#› O que ninguém fala
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 ‹#›
Pontos de atenção I mplementar um cache simplificado com o GraphQL é mais complexo do que implementá-lo no REST. Limitação dos recursos Governança ‹#›
“Com grandes poderes vem grandes responsabilidades”
‹#›
Thanks! Any questions? /paula-macedo-santana-dev @ psanrosa13 psanrosa13/demographql