SlideShare uma empresa Scribd logo
GraphQL na GetNinjas
20/09/2017
A maior plataforma de contratação de serviços do Brasil
bsoares.com • @bsoares • labs.bsoares.com
Bruno Soares
Introdução
O que é GraphQL?
Introdução
Uma especificação criada pelo Facebook em 2012 e aberta ao
público em 2015 (graphql.org).
Trata-se de uma linguagem de consulta para APIs e um
runtime para preencher essas consultas com seus dados.
Por que o Facebook criou isso?
Principalmente por:
● Desempenho: Seus aplicativos faziam diversas requisições
na API para renderizar cada tela.
● Flexibilidade: Diversos aplicativos sendo criados, uma
série demandas de API diferentes.
Introdução
Como funciona?
Introdução
graphql.org
Sim!
● O GraphQL não tem nada a ver com o banco de dados.
● E nem com a camada de transporte.
Funciona com qualquer banco de dados?
Introdução
Sim.
Você pode fazer uma chamada de
API, uma query no banco, rodar
uma lógica qualquer…
Só colocar dentro da resolve
function.
Da pra retornar qualquer coisa em um field?
Introdução
Da pra alterar dados?
Introdução
Sim! Via Mutations.
Tecnicamente qualquer query pode
ser usada para modificar dados,
porém, por convenção devemos
usar mutations para escritas.
Da pra alterar dados?
Introdução
Exemplo de mutation da nova API GraphQL do Github usando a GraphiQL IDE.
Pontos Positivos
Flexibilidade
Pontos Positivos
Você pode consultar o schema
navegando através das relações
entre os recursos, economizando
requisições ao servidor, sem a
necessidade de definir novos
recursos contendo o set de campos
que você precisa no momento.
Flexibilidade
Pontos Positivos
Exemplo de consulta / resposta da nova API GraphQL do Github usando a GraphiQL IDE.
Desempenho
Pontos Positivos
Retorne apenas o que precisa, e não
um resource que contém todos os
dados.
Documentação
Pontos Positivos
Documente campo a campo durante
o desenvolvimento.
Documentação
Pontos Positivos
Exemplo da tela de documentação gerada automaticamente pelo GraphiQL IDE (API GraphQL do Github).
Desenvolvimento
Pontos Positivos
Evolua todo o schema da API em vez
de apenas um endpoint de uma API
REST. Quando você adiciona um
campo, ele pode ser usado por
outros consumidores da sua API.
Versionamento orgânico
Pontos Positivos
Basta adicionar campos quando
precisar ou marcá-los como
deprecated quando você planeja
parar de usá-los.
Monitoramento
Pontos Positivos
Acompanhe o uso de cada campo em
sua API, você pode acompanhar
quem está usando, o desempenho e
o uso de campos deprecated.
Pontos Negativos
ou apenas preocupações
O GraphQL não faz consulta em
profundidade indefinida, então, se
você tiver uma árvore e quiser
retornar um ramo sem saber a
profundidade, você terá que fazer
algum tipo de paginação.
Consulta em profundidade indefinida
Pontos Negativos
Resposta com estrutura específica
Pontos Negativos
No GraphQL, a resposta
corresponde ao formato da
consulta, portanto, se você precisar
responder em uma estrutura muito
específica, você terá que adicionar
uma camada de transformação para
remodelar a resposta.
Cache à nível de rede
Pontos Negativos
Devido à maneira que o GraphQL é
usado em APIs (POST em um único
endpoint), o cache à nível de rede
torna-se difícil.
Uma maneira de resolver é usar
persisted / static queries.
Imprevisibilidade da execução
Pontos Negativos
A flexibilidade é um dos pontos mais fortes
do GraphQL, porém, ela não é gratuita.
● Queries complexas
● Optimização de SQL; N+1
● Segurança
Digamos que um cliente da sua API faça uma consulta gigante.
Seu backend sofrerá para responder.
● Maximum Depth: Bloqueia consultas que excedem a profundidade máxima
pré-definida.
● Cost Analysis: Bloqueia consultas que excedem o custo máximo de execução.
O custo máximo é uma soma do custo definido para cada campo.
● Persisted / Static Queries: Executa somente consultas pré-aprovadas; O
Facebook parece estar usando essa estratégia (bit.ly/gql-gn-face).
Queries complexas
Pontos Negativos • Imprevisibilidade da execução
Em APIs como REST, com endpoints para cada recurso, você
tem a oportunidade de optimizar as consultas SQL,
melhorando a performance e vitando N+1.
● Facebook DataLoader: Ajuda a carregar dados de várias fontes, como bancos
de dados ou serviços da Web, faz batch e cache
(github.com/facebook/dataloader).
● GraphQL::Batch: Um executor em batches para a gem graphql
(github.com/Shopify/graphql-batch).
Optimização de SQL; N+1
Pontos Negativos • Imprevisibilidade da execução
Evoluir um Schema de GraphQL sem pensar em autorização
de acesso pode ser extremamente perigoso, dado que um
usuário da API poderia navegar pelo schema todo sem
restrição nenhuma.
● graphql-guard: Esta gem fornece autorização à nível de field para a gem
graphql-ruby (github.com/exAspArk/graphql-guard).
● GraphQL::Pro: Versão PRO da gem graphql-ruby, fornece recursos de
autorização à nível de field e mais algumas coisas (graphql.pro).
Segurança
Pontos Negativos • Imprevisibilidade da execução
No caso de um serviço que expõe uma API muito simples, o
GraphQL somente adicionará complexidade desnecessária,
então uma simples API REST pode resolver o seu problema.
● Responder um JSON é muito simples.
● Em muitas linguagem o JSON já vem built-in.
● GraphQL é uma dependência a mais.
APIs super simples
Pontos Negativos
Patentes e licença de uso
Pontos Negativos
Existe uma polêmica sobre as patentes dos projetos do
Facebook, mesmo "parecendo" existir um esforço para deixar
tudo claro (bit.ly/gql-gn-patents).
Nosso Caso de Uso
Usamos GraphQL para acesso aos dados de outros sistemas
durante a execução dos BPMNs das nossas réguas de
comunicação.
E o que raios é um BPMN?
Business Process Model and Notation (Notação de
Modelagem de Processos de Negócio) é uma série de ícones
padrões para o desenho de processos.
Nosso caso de uso
Nosso Caso de Uso
Exemplo de um BPMN
Nosso Caso de Uso
Arquitetura
Nosso Caso de Uso
Arquitetura
Sistema responsável pela
origem da maior parte dos
dados da GetNinjas.
Nosso Caso de Uso
Sistema responsável pelos
pagamentos.
Nosso Caso de Uso
Arquitetura
Processa os eventos
disparados pelos outros
sitemas e quando
necessário inicia processos
de BPMN no Camunda.
Nosso Caso de Uso
Arquitetura
Engine de processamento
dos BPMNs.
Nosso Caso de Uso
Arquitetura
Ajudante do Camunda.
Possui um admin onde são
cadastradas as tarefas que
o Camunda precisa
executar.
Nosso Caso de Uso
Arquitetura
O que acontece quando uma fatura é criada?
Execução
O Kitana lança um evento
de "fatura_criada" contendo
o ID da Fatura e o ID do
Usuário.
Nosso Caso de Uso
A engine de processamento
de eventos, inicia o BPMN
de cobrança no Camunda
via API.
Nosso Caso de Uso
Execução
Executa o BPMN e chama o
Gaara sempre que precisa
executar alguma tarefa ou
carregar mais dados.
Nosso Caso de Uso
Execução
Tomando como exemplo uma
tarefa de envio de e-mails:
ref: "enviar-email-cobranca-1"
invoice_id: 1
user_id: 1
Nosso Caso de Uso
Execução
- Executa as queries de GraphQL cadastradas
no admin.
- Roda a operação cadastrada passando como
parâmetro o resultado obtido via GraphQL.
Nosso Caso de Uso
Execução
Como que funciona esse admin de tarefas?
Admin de Tarefas
Nosso Caso de Uso
Admin de Tarefas
Nosso Caso de Uso
Admin de Tarefas
Nosso Caso de Uso
O que acontece quando uma tarefa é executada?
Executa as queries cadastradas
Nosso Caso de Uso
Envia o payload para a operação
Nosso Caso de Uso
Bônus: Subscriptions
Subscriptions
Bônus
Uma forma de manter a conexão
aberta com o servidor, sendo
avisado a cada alteração.
bit.ly/gql-gn-sub
Bônus: Schema Stitching
Schema Stitching
Bônus
Uma ferramenta que combina vários schemas em um só.
bit.ly/gql-gn-sti
Por hoje é só pessoal!

Mais conteúdo relacionado

Semelhante a GraphQL na GetNinjas (2017-09-20)

TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
tdc-globalcode
 
GraphQL - aposta ou retrocesso?
GraphQL - aposta ou retrocesso?GraphQL - aposta ou retrocesso?
GraphQL - aposta ou retrocesso?
Wender Machado
 
Workshop Ruby on Rails dia 2 ruby-pt
Workshop Ruby on Rails dia 2  ruby-ptWorkshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2 ruby-pt
Pedro Sousa
 
Front end architecture
Front end architectureFront end architecture
Front end architecture
Rafael Salerno de Oliveira
 
GraphQL e WordPress, uma bonita união
GraphQL e WordPress, uma bonita uniãoGraphQL e WordPress, uma bonita união
GraphQL e WordPress, uma bonita união
Leo Baiano
 
ExpressoBR para Um Milhão (de Usuários)
ExpressoBR para Um Milhão (de Usuários)ExpressoBR para Um Milhão (de Usuários)
ExpressoBR para Um Milhão (de Usuários)
Flávio Lisboa
 
GraphQL na Era das APIs
GraphQL na Era das APIsGraphQL na Era das APIs
GraphQL na Era das APIs
Daniel Varanda
 
Bancos de Dados em “Clouds”
Bancos de Dados em “Clouds”Bancos de Dados em “Clouds”
Bancos de Dados em “Clouds”
elliando dias
 
B Ds Clouds
B Ds CloudsB Ds Clouds
B Ds Clouds
elliando dias
 
Grails
GrailsGrails
Grails
Alex Guido
 
Desenvolvimento Ágil com Grails.
Desenvolvimento Ágil com Grails.Desenvolvimento Ágil com Grails.
Desenvolvimento Ágil com Grails.
Alex Guido
 
Pangea - Plataforma digital com Google Cloud Platform
Pangea - Plataforma digital com Google Cloud PlatformPangea - Plataforma digital com Google Cloud Platform
Pangea - Plataforma digital com Google Cloud Platform
André Paulovich
 
Webinar Novidades da Release R2017b
Webinar Novidades da Release R2017bWebinar Novidades da Release R2017b
Webinar Novidades da Release R2017b
Opencadd Advanced Technology
 
GraphQL com .NET Core
GraphQL com .NET CoreGraphQL com .NET Core
GraphQL com .NET Core
MVP Microsoft
 
Introducao ao GraphQL
Introducao ao GraphQLIntroducao ao GraphQL
Introducao ao GraphQL
MVP Microsoft
 
GraphQL - A Linguagem do Facebook para APIs
GraphQL - A Linguagem do Facebook para APIsGraphQL - A Linguagem do Facebook para APIs
GraphQL - A Linguagem do Facebook para APIs
Sergio Lima
 
Python, Google App Engine e Webapp-CE
Python, Google App Engine e Webapp-CE Python, Google App Engine e Webapp-CE
Python, Google App Engine e Webapp-CE
Renzo Nuccitelli
 
Google App Engine e Python
Google App Engine e PythonGoogle App Engine e Python
Google App Engine e Python
PeslPinguim
 
Drupal 8: desenvolvendo fora da ilha
Drupal 8: desenvolvendo fora da ilhaDrupal 8: desenvolvendo fora da ilha
Drupal 8: desenvolvendo fora da ilha
Luiz Filho
 
Algaworks ebook-java-ee-7-com-jsf-primefaces-e-cdi-2a-edicao-20150228
Algaworks ebook-java-ee-7-com-jsf-primefaces-e-cdi-2a-edicao-20150228Algaworks ebook-java-ee-7-com-jsf-primefaces-e-cdi-2a-edicao-20150228
Algaworks ebook-java-ee-7-com-jsf-primefaces-e-cdi-2a-edicao-20150228
MoisesInacio
 

Semelhante a GraphQL na GetNinjas (2017-09-20) (20)

TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
 
GraphQL - aposta ou retrocesso?
GraphQL - aposta ou retrocesso?GraphQL - aposta ou retrocesso?
GraphQL - aposta ou retrocesso?
 
Workshop Ruby on Rails dia 2 ruby-pt
Workshop Ruby on Rails dia 2  ruby-ptWorkshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2 ruby-pt
 
Front end architecture
Front end architectureFront end architecture
Front end architecture
 
GraphQL e WordPress, uma bonita união
GraphQL e WordPress, uma bonita uniãoGraphQL e WordPress, uma bonita união
GraphQL e WordPress, uma bonita união
 
ExpressoBR para Um Milhão (de Usuários)
ExpressoBR para Um Milhão (de Usuários)ExpressoBR para Um Milhão (de Usuários)
ExpressoBR para Um Milhão (de Usuários)
 
GraphQL na Era das APIs
GraphQL na Era das APIsGraphQL na Era das APIs
GraphQL na Era das APIs
 
Bancos de Dados em “Clouds”
Bancos de Dados em “Clouds”Bancos de Dados em “Clouds”
Bancos de Dados em “Clouds”
 
B Ds Clouds
B Ds CloudsB Ds Clouds
B Ds Clouds
 
Grails
GrailsGrails
Grails
 
Desenvolvimento Ágil com Grails.
Desenvolvimento Ágil com Grails.Desenvolvimento Ágil com Grails.
Desenvolvimento Ágil com Grails.
 
Pangea - Plataforma digital com Google Cloud Platform
Pangea - Plataforma digital com Google Cloud PlatformPangea - Plataforma digital com Google Cloud Platform
Pangea - Plataforma digital com Google Cloud Platform
 
Webinar Novidades da Release R2017b
Webinar Novidades da Release R2017bWebinar Novidades da Release R2017b
Webinar Novidades da Release R2017b
 
GraphQL com .NET Core
GraphQL com .NET CoreGraphQL com .NET Core
GraphQL com .NET Core
 
Introducao ao GraphQL
Introducao ao GraphQLIntroducao ao GraphQL
Introducao ao GraphQL
 
GraphQL - A Linguagem do Facebook para APIs
GraphQL - A Linguagem do Facebook para APIsGraphQL - A Linguagem do Facebook para APIs
GraphQL - A Linguagem do Facebook para APIs
 
Python, Google App Engine e Webapp-CE
Python, Google App Engine e Webapp-CE Python, Google App Engine e Webapp-CE
Python, Google App Engine e Webapp-CE
 
Google App Engine e Python
Google App Engine e PythonGoogle App Engine e Python
Google App Engine e Python
 
Drupal 8: desenvolvendo fora da ilha
Drupal 8: desenvolvendo fora da ilhaDrupal 8: desenvolvendo fora da ilha
Drupal 8: desenvolvendo fora da ilha
 
Algaworks ebook-java-ee-7-com-jsf-primefaces-e-cdi-2a-edicao-20150228
Algaworks ebook-java-ee-7-com-jsf-primefaces-e-cdi-2a-edicao-20150228Algaworks ebook-java-ee-7-com-jsf-primefaces-e-cdi-2a-edicao-20150228
Algaworks ebook-java-ee-7-com-jsf-primefaces-e-cdi-2a-edicao-20150228
 

Último

Logica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptxLogica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptx
Momento da Informática
 
História da Rádio- 1936-1970 século XIX .2.pptx
História da Rádio- 1936-1970 século XIX   .2.pptxHistória da Rádio- 1936-1970 século XIX   .2.pptx
História da Rádio- 1936-1970 século XIX .2.pptx
TomasSousa7
 
Manual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdfManual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdf
WELITONNOGUEIRA3
 
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdfEscola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Gabriel de Mattos Faustino
 
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdfTOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
Momento da Informática
 
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
Faga1939
 
Certificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdfCertificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdf
joaovmp3
 
Segurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas PráticasSegurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas Práticas
Danilo Pinotti
 

Último (8)

Logica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptxLogica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptx
 
História da Rádio- 1936-1970 século XIX .2.pptx
História da Rádio- 1936-1970 século XIX   .2.pptxHistória da Rádio- 1936-1970 século XIX   .2.pptx
História da Rádio- 1936-1970 século XIX .2.pptx
 
Manual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdfManual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdf
 
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdfEscola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
 
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdfTOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
 
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
 
Certificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdfCertificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdf
 
Segurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas PráticasSegurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas Práticas
 

GraphQL na GetNinjas (2017-09-20)

  • 2. A maior plataforma de contratação de serviços do Brasil
  • 3. bsoares.com • @bsoares • labs.bsoares.com Bruno Soares
  • 5. O que é GraphQL? Introdução Uma especificação criada pelo Facebook em 2012 e aberta ao público em 2015 (graphql.org). Trata-se de uma linguagem de consulta para APIs e um runtime para preencher essas consultas com seus dados.
  • 6. Por que o Facebook criou isso? Principalmente por: ● Desempenho: Seus aplicativos faziam diversas requisições na API para renderizar cada tela. ● Flexibilidade: Diversos aplicativos sendo criados, uma série demandas de API diferentes. Introdução
  • 8. Sim! ● O GraphQL não tem nada a ver com o banco de dados. ● E nem com a camada de transporte. Funciona com qualquer banco de dados? Introdução
  • 9. Sim. Você pode fazer uma chamada de API, uma query no banco, rodar uma lógica qualquer… Só colocar dentro da resolve function. Da pra retornar qualquer coisa em um field? Introdução
  • 10. Da pra alterar dados? Introdução Sim! Via Mutations. Tecnicamente qualquer query pode ser usada para modificar dados, porém, por convenção devemos usar mutations para escritas.
  • 11. Da pra alterar dados? Introdução Exemplo de mutation da nova API GraphQL do Github usando a GraphiQL IDE.
  • 13. Flexibilidade Pontos Positivos Você pode consultar o schema navegando através das relações entre os recursos, economizando requisições ao servidor, sem a necessidade de definir novos recursos contendo o set de campos que você precisa no momento.
  • 14. Flexibilidade Pontos Positivos Exemplo de consulta / resposta da nova API GraphQL do Github usando a GraphiQL IDE.
  • 15. Desempenho Pontos Positivos Retorne apenas o que precisa, e não um resource que contém todos os dados.
  • 16. Documentação Pontos Positivos Documente campo a campo durante o desenvolvimento.
  • 17. Documentação Pontos Positivos Exemplo da tela de documentação gerada automaticamente pelo GraphiQL IDE (API GraphQL do Github).
  • 18. Desenvolvimento Pontos Positivos Evolua todo o schema da API em vez de apenas um endpoint de uma API REST. Quando você adiciona um campo, ele pode ser usado por outros consumidores da sua API.
  • 19. Versionamento orgânico Pontos Positivos Basta adicionar campos quando precisar ou marcá-los como deprecated quando você planeja parar de usá-los.
  • 20. Monitoramento Pontos Positivos Acompanhe o uso de cada campo em sua API, você pode acompanhar quem está usando, o desempenho e o uso de campos deprecated.
  • 21. Pontos Negativos ou apenas preocupações
  • 22. O GraphQL não faz consulta em profundidade indefinida, então, se você tiver uma árvore e quiser retornar um ramo sem saber a profundidade, você terá que fazer algum tipo de paginação. Consulta em profundidade indefinida Pontos Negativos
  • 23. Resposta com estrutura específica Pontos Negativos No GraphQL, a resposta corresponde ao formato da consulta, portanto, se você precisar responder em uma estrutura muito específica, você terá que adicionar uma camada de transformação para remodelar a resposta.
  • 24. Cache à nível de rede Pontos Negativos Devido à maneira que o GraphQL é usado em APIs (POST em um único endpoint), o cache à nível de rede torna-se difícil. Uma maneira de resolver é usar persisted / static queries.
  • 25. Imprevisibilidade da execução Pontos Negativos A flexibilidade é um dos pontos mais fortes do GraphQL, porém, ela não é gratuita. ● Queries complexas ● Optimização de SQL; N+1 ● Segurança
  • 26. Digamos que um cliente da sua API faça uma consulta gigante. Seu backend sofrerá para responder. ● Maximum Depth: Bloqueia consultas que excedem a profundidade máxima pré-definida. ● Cost Analysis: Bloqueia consultas que excedem o custo máximo de execução. O custo máximo é uma soma do custo definido para cada campo. ● Persisted / Static Queries: Executa somente consultas pré-aprovadas; O Facebook parece estar usando essa estratégia (bit.ly/gql-gn-face). Queries complexas Pontos Negativos • Imprevisibilidade da execução
  • 27. Em APIs como REST, com endpoints para cada recurso, você tem a oportunidade de optimizar as consultas SQL, melhorando a performance e vitando N+1. ● Facebook DataLoader: Ajuda a carregar dados de várias fontes, como bancos de dados ou serviços da Web, faz batch e cache (github.com/facebook/dataloader). ● GraphQL::Batch: Um executor em batches para a gem graphql (github.com/Shopify/graphql-batch). Optimização de SQL; N+1 Pontos Negativos • Imprevisibilidade da execução
  • 28. Evoluir um Schema de GraphQL sem pensar em autorização de acesso pode ser extremamente perigoso, dado que um usuário da API poderia navegar pelo schema todo sem restrição nenhuma. ● graphql-guard: Esta gem fornece autorização à nível de field para a gem graphql-ruby (github.com/exAspArk/graphql-guard). ● GraphQL::Pro: Versão PRO da gem graphql-ruby, fornece recursos de autorização à nível de field e mais algumas coisas (graphql.pro). Segurança Pontos Negativos • Imprevisibilidade da execução
  • 29. No caso de um serviço que expõe uma API muito simples, o GraphQL somente adicionará complexidade desnecessária, então uma simples API REST pode resolver o seu problema. ● Responder um JSON é muito simples. ● Em muitas linguagem o JSON já vem built-in. ● GraphQL é uma dependência a mais. APIs super simples Pontos Negativos
  • 30. Patentes e licença de uso Pontos Negativos Existe uma polêmica sobre as patentes dos projetos do Facebook, mesmo "parecendo" existir um esforço para deixar tudo claro (bit.ly/gql-gn-patents).
  • 32. Usamos GraphQL para acesso aos dados de outros sistemas durante a execução dos BPMNs das nossas réguas de comunicação. E o que raios é um BPMN? Business Process Model and Notation (Notação de Modelagem de Processos de Negócio) é uma série de ícones padrões para o desenho de processos. Nosso caso de uso Nosso Caso de Uso
  • 33. Exemplo de um BPMN Nosso Caso de Uso
  • 35. Arquitetura Sistema responsável pela origem da maior parte dos dados da GetNinjas. Nosso Caso de Uso
  • 37. Processa os eventos disparados pelos outros sitemas e quando necessário inicia processos de BPMN no Camunda. Nosso Caso de Uso Arquitetura
  • 38. Engine de processamento dos BPMNs. Nosso Caso de Uso Arquitetura
  • 39. Ajudante do Camunda. Possui um admin onde são cadastradas as tarefas que o Camunda precisa executar. Nosso Caso de Uso Arquitetura
  • 40. O que acontece quando uma fatura é criada?
  • 41. Execução O Kitana lança um evento de "fatura_criada" contendo o ID da Fatura e o ID do Usuário. Nosso Caso de Uso
  • 42. A engine de processamento de eventos, inicia o BPMN de cobrança no Camunda via API. Nosso Caso de Uso Execução
  • 43. Executa o BPMN e chama o Gaara sempre que precisa executar alguma tarefa ou carregar mais dados. Nosso Caso de Uso Execução
  • 44. Tomando como exemplo uma tarefa de envio de e-mails: ref: "enviar-email-cobranca-1" invoice_id: 1 user_id: 1 Nosso Caso de Uso Execução
  • 45. - Executa as queries de GraphQL cadastradas no admin. - Roda a operação cadastrada passando como parâmetro o resultado obtido via GraphQL. Nosso Caso de Uso Execução
  • 46. Como que funciona esse admin de tarefas?
  • 47. Admin de Tarefas Nosso Caso de Uso
  • 48. Admin de Tarefas Nosso Caso de Uso
  • 49. Admin de Tarefas Nosso Caso de Uso
  • 50. O que acontece quando uma tarefa é executada?
  • 51. Executa as queries cadastradas Nosso Caso de Uso
  • 52. Envia o payload para a operação Nosso Caso de Uso
  • 54. Subscriptions Bônus Uma forma de manter a conexão aberta com o servidor, sendo avisado a cada alteração. bit.ly/gql-gn-sub
  • 56. Schema Stitching Bônus Uma ferramenta que combina vários schemas em um só. bit.ly/gql-gn-sti
  • 57. Por hoje é só pessoal!