SlideShare uma empresa Scribd logo
De um sistema legado
para microsserviços
com GraphQL
Sebastian Ferrari
sebas@taller.net.br
@sebas5384
Momentum (do inglês)
● Momento linear na física.
● Impulso, ímpeto ou velocidade adquirida.
Microservices
Momentum
Motivo ?
Legacy System
Proxy
● Migração de sistemas legados monólitos.
● Mudanças são lentas, custosas e com alto risco.
● Baixíssima experimentação.
● Tecnologias antigas, dificulta contratação de
novos talentos.
● Tecnologias proprietárias com licenças, vendor
lock-in, customização lenta e custosa…
Novos problemas
De um sistema legado para micro serviços com GraphQL
De um sistema legado para micro serviços com GraphQL
● Baixa interoperabilidade entre os serviços e
seus consumidores / clients.
○ Padrões abertos e bem definidos.
○ Ontologia é um modelo de dados que
representa um conjunto de conceitos
dentro de um domínio e os
relacionamentos entre estes.
● Muito esforço para criar documentação e
manter atualizada!
● Resposta dos serviços não é tolerante a falhas.
● Relação entre recursos/models inconsistente.
● Começa com 1 serviço e rapidamente vai para
mais de 20.
● A complexidade aumenta.
De um sistema legado para micro serviços com GraphQL
De um sistema legado para micro serviços com GraphQL
GraphQL
Schema language
type Project {
name: String
tagline: String
contributors: [User]
}
type User {
name: String
projects: [Project]
}
type Query {
users: [User]
}
Query language
query {
users {
name
projects {
name
tagLine
}
}
}
Result
{
users: [{
name: 'Sebastian McKenzie',
projects: [{
name: 'Babel',
tagLine: 'Use next generation...'
}]
}, {
name: 'Sashko Stubailo',
projects: [{
name: 'Apollo Client',
tagLine: 'A fully-featured, production ready...'
}]
}]
}
types.gql
type User {
id: String
name: String
}
type Query {
user (id: String): User
}
Apollo
resolvers.js
const resolvers = {
Query: {
user: (root, { id }) =>
fetch(`/api/users/${id}`)
}
}
export default resolvers
Johnny Cash
React Apollo
react-apollo
import { withQuery } from '@apollo/react-hoc'
import gql from 'graphql-tag'
const UserAvatar = ({ data: { user } }) => (
<div>
<img src={ user.photo } alt={ user.name } />
<h4>{ user.name }</h4>
</div>
)
const query = gql`
query UserInfo {
user (id: '1') {
name
photo
}
}
`
const withData = withQuery(query)
export default withData(UserAvatar)
Conectar o uma GraphQL query a um
componente.
Por que
GraphQL ?
● Pensamento grafo !! mais do que recursos.
● Tipagem estática.
○ Documentação automática.
○ Erros de validação de graça.
● Tolerante a falha. Um campo pode falhar, mas o
resto da resposta é resolvida.
● Monitoração de performance por campo, não
só por query ou request.
De um sistema legado para micro serviços com GraphQL
● Query Declarativa de vários serviços
● Cada campo / “resolver” é independente.
● Linguagem ubíqua onde os domínios de
negócio usam a o mesmo idioma para se
comunicar com a área técnica. (DDD)
● Adoção progressiva + thin layer
● Application Layer (DDD Eric Evans) ou Service
Layer (Martin Fowler)
Legacy System
GraphQL Gateway
Microservices
Domain Layer
Business Logic
bit.ly/2tKxYxI
Legacy System
Backend for Frontends (BFF)
Microservices
Domain Layer
Business Logic
● Aumento na performance do client, menos
round trips.
○ /user/1 -> /user/1/comments -> …
● Menos código no client !!
● Mudanças mais rápidas sem quebrar clients,
com detecção de breaking changes no build.
● API evolutiva, não revolucionária com v1 v2…
○ uglyField
@deprecated(reason: “Use other new field")
De um sistema legado para micro serviços com GraphQL
De um sistema legado para micro serviços com GraphQL
Developer
Experience (DX)
De um sistema legado para micro serviços com GraphQL
De um sistema legado para micro serviços com GraphQL
De um sistema legado para micro serviços com GraphQL
Quem usa em produção?
Agregação de
schemas (APIs)
- Stitching e Delegation
- Apollo Federation
- API’s Fractais
De um sistema legado para micro serviços com GraphQL
De um sistema legado para micro serviços com GraphQL
Antes
Depois
De um sistema legado para micro serviços com GraphQL
Account Product Review
Review
Service
De um sistema legado para micro serviços com GraphQL
De um sistema legado para micro serviços com GraphQL

Mais conteúdo relacionado

Mais procurados

Agile Software Development Overview
Agile Software Development OverviewAgile Software Development Overview
Agile Software Development Overview
Stewart Rogers
 
Scrum Process
Scrum ProcessScrum Process
Scrum Process
Rodrigo Paolucci
 
Platform engineering 101
Platform engineering 101Platform engineering 101
Platform engineering 101
Sander Knape
 
Presentación de Scrum en 15 mins
Presentación de Scrum en 15 minsPresentación de Scrum en 15 mins
Presentación de Scrum en 15 mins
Fátima Casaú Pérez
 
Heart of Agile: What is Agile?
Heart of Agile: What is Agile?Heart of Agile: What is Agile?
Heart of Agile: What is Agile?
Agile Tour Beirut
 
Agile & SCRUM
Agile & SCRUMAgile & SCRUM
Agile & SCRUM
ejlp12
 
Gestao agil de projetos
Gestao agil de projetosGestao agil de projetos
Gestao agil de projetos
Adriano Tavares
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
Glaucio Scheibel
 
Launching a BPT Process on Entity Update
Launching a BPT Process on Entity UpdateLaunching a BPT Process on Entity Update
Launching a BPT Process on Entity Update
OutSystems
 
Integração Contínua
Integração ContínuaIntegração Contínua
Integração Contínua
Jackson Veroneze
 
CI/CD Best Practices for Your DevOps Journey
CI/CD Best  Practices for Your DevOps JourneyCI/CD Best  Practices for Your DevOps Journey
CI/CD Best Practices for Your DevOps Journey
DevOps.com
 
API Lifecycle, Part 2: Monitor and Deploy an API
API Lifecycle, Part 2: Monitor and Deploy an APIAPI Lifecycle, Part 2: Monitor and Deploy an API
API Lifecycle, Part 2: Monitor and Deploy an API
Postman
 
Highlights of WSO2 API Manager 4.0.0
Highlights of WSO2 API Manager 4.0.0Highlights of WSO2 API Manager 4.0.0
Highlights of WSO2 API Manager 4.0.0
WSO2
 
Aula 1 - Revisão UML
Aula 1 - Revisão UMLAula 1 - Revisão UML
Aula 1 - Revisão UML
Rosanete Grassiani dos Santos
 
Introducing Swagger
Introducing SwaggerIntroducing Swagger
Introducing Swagger
Tony Tam
 
Agile Methodology
Agile MethodologyAgile Methodology
Agile Methodology
Omar Al-Sabek
 
diagrama de componentes
diagrama de componentesdiagrama de componentes
diagrama de componentes
elliando dias
 
Agile presentation
Agile presentationAgile presentation
Agile presentation
infolock
 
Introduction to DevOps | Edureka
Introduction to DevOps | EdurekaIntroduction to DevOps | Edureka
Introduction to DevOps | Edureka
Edureka!
 
Scrum
ScrumScrum

Mais procurados (20)

Agile Software Development Overview
Agile Software Development OverviewAgile Software Development Overview
Agile Software Development Overview
 
Scrum Process
Scrum ProcessScrum Process
Scrum Process
 
Platform engineering 101
Platform engineering 101Platform engineering 101
Platform engineering 101
 
Presentación de Scrum en 15 mins
Presentación de Scrum en 15 minsPresentación de Scrum en 15 mins
Presentación de Scrum en 15 mins
 
Heart of Agile: What is Agile?
Heart of Agile: What is Agile?Heart of Agile: What is Agile?
Heart of Agile: What is Agile?
 
Agile & SCRUM
Agile & SCRUMAgile & SCRUM
Agile & SCRUM
 
Gestao agil de projetos
Gestao agil de projetosGestao agil de projetos
Gestao agil de projetos
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
 
Launching a BPT Process on Entity Update
Launching a BPT Process on Entity UpdateLaunching a BPT Process on Entity Update
Launching a BPT Process on Entity Update
 
Integração Contínua
Integração ContínuaIntegração Contínua
Integração Contínua
 
CI/CD Best Practices for Your DevOps Journey
CI/CD Best  Practices for Your DevOps JourneyCI/CD Best  Practices for Your DevOps Journey
CI/CD Best Practices for Your DevOps Journey
 
API Lifecycle, Part 2: Monitor and Deploy an API
API Lifecycle, Part 2: Monitor and Deploy an APIAPI Lifecycle, Part 2: Monitor and Deploy an API
API Lifecycle, Part 2: Monitor and Deploy an API
 
Highlights of WSO2 API Manager 4.0.0
Highlights of WSO2 API Manager 4.0.0Highlights of WSO2 API Manager 4.0.0
Highlights of WSO2 API Manager 4.0.0
 
Aula 1 - Revisão UML
Aula 1 - Revisão UMLAula 1 - Revisão UML
Aula 1 - Revisão UML
 
Introducing Swagger
Introducing SwaggerIntroducing Swagger
Introducing Swagger
 
Agile Methodology
Agile MethodologyAgile Methodology
Agile Methodology
 
diagrama de componentes
diagrama de componentesdiagrama de componentes
diagrama de componentes
 
Agile presentation
Agile presentationAgile presentation
Agile presentation
 
Introduction to DevOps | Edureka
Introduction to DevOps | EdurekaIntroduction to DevOps | Edureka
Introduction to DevOps | Edureka
 
Scrum
ScrumScrum
Scrum
 

Semelhante a De um sistema legado para micro serviços com GraphQL

Tdc Future 2021 - simples soluções grandes resultados - Márcio Rogério Nizzola
Tdc Future 2021 - simples soluções grandes resultados - Márcio Rogério NizzolaTdc Future 2021 - simples soluções grandes resultados - Márcio Rogério Nizzola
Tdc Future 2021 - simples soluções grandes resultados - Márcio Rogério Nizzola
Dextra Sistemas / Etec Itu
 
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on AzureTDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
tdc-globalcode
 
ERES 2018 - Microserviços: Desafios para Lidar com a Qualidade
ERES 2018 - Microserviços: Desafios para Lidar com a QualidadeERES 2018 - Microserviços: Desafios para Lidar com a Qualidade
ERES 2018 - Microserviços: Desafios para Lidar com a Qualidade
André Abe Vicente
 
Google AppEngine: Desafios da adoção de cloud no mercado de seguros
Google AppEngine: Desafios da adoção de cloud no mercado de segurosGoogle AppEngine: Desafios da adoção de cloud no mercado de seguros
Google AppEngine: Desafios da adoção de cloud no mercado de seguros
Gustavo Concon
 
Introdução a Service Mesh com Istio
Introdução a Service Mesh com IstioIntrodução a Service Mesh com Istio
Introdução a Service Mesh com Istio
Jonh Wendell
 
Workshop soa, microservices e devops
Workshop soa, microservices e devopsWorkshop soa, microservices e devops
Workshop soa, microservices e devops
Diego Pacheco
 
Arquitetura de Software e o DNAD2013
Arquitetura de Software e o DNAD2013Arquitetura de Software e o DNAD2013
Arquitetura de Software e o DNAD2013
André Borgonovo
 
Demoiselle e o novo paradigma HTML5 Restful
Demoiselle e o novo paradigma HTML5 RestfulDemoiselle e o novo paradigma HTML5 Restful
Demoiselle e o novo paradigma HTML5 Restful
Demoiselle Framework
 
Metralhando sua API
 Metralhando sua API Metralhando sua API
Metralhando sua API
minastestingconference
 
Aula 1 - Programação Dinâmica para Web
Aula 1 - Programação Dinâmica para WebAula 1 - Programação Dinâmica para Web
Aula 1 - Programação Dinâmica para Web
Daniel Brandão
 
World Wide Web
World Wide WebWorld Wide Web
World Wide Web
Sérgio Rocha
 
Scrum e o Ambiente de Desenvolvimento Ágil
Scrum e o Ambiente de Desenvolvimento ÁgilScrum e o Ambiente de Desenvolvimento Ágil
Scrum e o Ambiente de Desenvolvimento Ágil
abacrazy
 
TDC2017 | São Paulo - Trilha Banco de Dados How we figured out we had a SRE t...
TDC2017 | São Paulo - Trilha Banco de Dados How we figured out we had a SRE t...TDC2017 | São Paulo - Trilha Banco de Dados How we figured out we had a SRE t...
TDC2017 | São Paulo - Trilha Banco de Dados How we figured out we had a SRE t...
tdc-globalcode
 
Desafio de crescer
Desafio de crescerDesafio de crescer
Desafio de crescer
Guilherme
 
Treinamento ASP.NET 2014
Treinamento ASP.NET 2014Treinamento ASP.NET 2014
Treinamento ASP.NET 2014
Eric Gallardo
 
tdc-2022-poa-quem-tem-medo-low-code.pdf
tdc-2022-poa-quem-tem-medo-low-code.pdftdc-2022-poa-quem-tem-medo-low-code.pdf
tdc-2022-poa-quem-tem-medo-low-code.pdf
Douglas Siviotti
 
Arquitetura Serverless para Machine Learning
Arquitetura Serverless para Machine LearningArquitetura Serverless para Machine Learning
Arquitetura Serverless para Machine Learning
Felipe Santos
 
Vacinando mais de 200 mil pessoas com ReactJS e GraphQL
Vacinando mais de 200 mil pessoas com ReactJS e GraphQLVacinando mais de 200 mil pessoas com ReactJS e GraphQL
Vacinando mais de 200 mil pessoas com ReactJS e GraphQL
Taller Negócio Digitais
 
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
 
Funcionalidades das versões 9.x do PostgreSQL
Funcionalidades das versões 9.x do PostgreSQLFuncionalidades das versões 9.x do PostgreSQL
Funcionalidades das versões 9.x do PostgreSQL
Matheus Espanhol
 

Semelhante a De um sistema legado para micro serviços com GraphQL (20)

Tdc Future 2021 - simples soluções grandes resultados - Márcio Rogério Nizzola
Tdc Future 2021 - simples soluções grandes resultados - Márcio Rogério NizzolaTdc Future 2021 - simples soluções grandes resultados - Márcio Rogério Nizzola
Tdc Future 2021 - simples soluções grandes resultados - Márcio Rogério Nizzola
 
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on AzureTDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
 
ERES 2018 - Microserviços: Desafios para Lidar com a Qualidade
ERES 2018 - Microserviços: Desafios para Lidar com a QualidadeERES 2018 - Microserviços: Desafios para Lidar com a Qualidade
ERES 2018 - Microserviços: Desafios para Lidar com a Qualidade
 
Google AppEngine: Desafios da adoção de cloud no mercado de seguros
Google AppEngine: Desafios da adoção de cloud no mercado de segurosGoogle AppEngine: Desafios da adoção de cloud no mercado de seguros
Google AppEngine: Desafios da adoção de cloud no mercado de seguros
 
Introdução a Service Mesh com Istio
Introdução a Service Mesh com IstioIntrodução a Service Mesh com Istio
Introdução a Service Mesh com Istio
 
Workshop soa, microservices e devops
Workshop soa, microservices e devopsWorkshop soa, microservices e devops
Workshop soa, microservices e devops
 
Arquitetura de Software e o DNAD2013
Arquitetura de Software e o DNAD2013Arquitetura de Software e o DNAD2013
Arquitetura de Software e o DNAD2013
 
Demoiselle e o novo paradigma HTML5 Restful
Demoiselle e o novo paradigma HTML5 RestfulDemoiselle e o novo paradigma HTML5 Restful
Demoiselle e o novo paradigma HTML5 Restful
 
Metralhando sua API
 Metralhando sua API Metralhando sua API
Metralhando sua API
 
Aula 1 - Programação Dinâmica para Web
Aula 1 - Programação Dinâmica para WebAula 1 - Programação Dinâmica para Web
Aula 1 - Programação Dinâmica para Web
 
World Wide Web
World Wide WebWorld Wide Web
World Wide Web
 
Scrum e o Ambiente de Desenvolvimento Ágil
Scrum e o Ambiente de Desenvolvimento ÁgilScrum e o Ambiente de Desenvolvimento Ágil
Scrum e o Ambiente de Desenvolvimento Ágil
 
TDC2017 | São Paulo - Trilha Banco de Dados How we figured out we had a SRE t...
TDC2017 | São Paulo - Trilha Banco de Dados How we figured out we had a SRE t...TDC2017 | São Paulo - Trilha Banco de Dados How we figured out we had a SRE t...
TDC2017 | São Paulo - Trilha Banco de Dados How we figured out we had a SRE t...
 
Desafio de crescer
Desafio de crescerDesafio de crescer
Desafio de crescer
 
Treinamento ASP.NET 2014
Treinamento ASP.NET 2014Treinamento ASP.NET 2014
Treinamento ASP.NET 2014
 
tdc-2022-poa-quem-tem-medo-low-code.pdf
tdc-2022-poa-quem-tem-medo-low-code.pdftdc-2022-poa-quem-tem-medo-low-code.pdf
tdc-2022-poa-quem-tem-medo-low-code.pdf
 
Arquitetura Serverless para Machine Learning
Arquitetura Serverless para Machine LearningArquitetura Serverless para Machine Learning
Arquitetura Serverless para Machine Learning
 
Vacinando mais de 200 mil pessoas com ReactJS e GraphQL
Vacinando mais de 200 mil pessoas com ReactJS e GraphQLVacinando mais de 200 mil pessoas com ReactJS e GraphQL
Vacinando mais de 200 mil pessoas com ReactJS e GraphQL
 
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)
 
Funcionalidades das versões 9.x do PostgreSQL
Funcionalidades das versões 9.x do PostgreSQLFuncionalidades das versões 9.x do PostgreSQL
Funcionalidades das versões 9.x do PostgreSQL
 

Mais de Taller Negócio Digitais

Indo além do técnico para desenvolver sistemas que evoluem na velocidade do...
Indo além do técnico para desenvolver sistemas que evoluem na velocidade do...Indo além do técnico para desenvolver sistemas que evoluem na velocidade do...
Indo além do técnico para desenvolver sistemas que evoluem na velocidade do...
Taller Negócio Digitais
 
Discovery kanban
Discovery kanbanDiscovery kanban
Discovery kanban
Taller Negócio Digitais
 
Taller Negócios Digitais
Taller Negócios DigitaisTaller Negócios Digitais
Taller Negócios Digitais
Taller Negócio Digitais
 
Next.js with drupal, the good parts
Next.js with drupal, the good partsNext.js with drupal, the good parts
Next.js with drupal, the good parts
Taller Negócio Digitais
 
Gestão Ágil com Fluxo Unificado
Gestão Ágil com Fluxo UnificadoGestão Ágil com Fluxo Unificado
Gestão Ágil com Fluxo Unificado
Taller Negócio Digitais
 
Alinhando Discovery com Delivery usando Upstream Kanban
Alinhando Discovery com Delivery usando Upstream KanbanAlinhando Discovery com Delivery usando Upstream Kanban
Alinhando Discovery com Delivery usando Upstream Kanban
Taller Negócio Digitais
 
Lições Aprendidas com Fluxo Unificado
Lições Aprendidas com Fluxo UnificadoLições Aprendidas com Fluxo Unificado
Lições Aprendidas com Fluxo Unificado
Taller Negócio Digitais
 
Como a liderança descentralizada tornou a Taller mais efetiva
Como a liderança descentralizada tornou a Taller mais efetivaComo a liderança descentralizada tornou a Taller mais efetiva
Como a liderança descentralizada tornou a Taller mais efetiva
Taller Negócio Digitais
 
Métricas no Fluxo Unificado
Métricas no Fluxo UnificadoMétricas no Fluxo Unificado
Métricas no Fluxo Unificado
Taller Negócio Digitais
 
Práticas e ferramentas de feedback: potencializando a cultura da confiança
Práticas e ferramentas de feedback: potencializando a cultura da confiançaPráticas e ferramentas de feedback: potencializando a cultura da confiança
Práticas e ferramentas de feedback: potencializando a cultura da confiança
Taller Negócio Digitais
 
Como preparar seu time para receber feedback - Scrum Gathering Rio 2017
Como preparar seu time para receber feedback - Scrum Gathering Rio 2017Como preparar seu time para receber feedback - Scrum Gathering Rio 2017
Como preparar seu time para receber feedback - Scrum Gathering Rio 2017
Taller Negócio Digitais
 
Taller – Treinamentos e consultorias
Taller – Treinamentos e consultoriasTaller – Treinamentos e consultorias
Taller – Treinamentos e consultorias
Taller Negócio Digitais
 
Taller - Ateliê de desenvolvimento de software
Taller - Ateliê de desenvolvimento de softwareTaller - Ateliê de desenvolvimento de software
Taller - Ateliê de desenvolvimento de software
Taller Negócio Digitais
 
Introdução ao Fluxo Unificado - TDC Florianópolis 2017
Introdução ao Fluxo Unificado - TDC Florianópolis 2017Introdução ao Fluxo Unificado - TDC Florianópolis 2017
Introdução ao Fluxo Unificado - TDC Florianópolis 2017
Taller Negócio Digitais
 
Javascript Funcional - TDC Florianópolis 2017
Javascript Funcional - TDC Florianópolis 2017Javascript Funcional - TDC Florianópolis 2017
Javascript Funcional - TDC Florianópolis 2017
Taller Negócio Digitais
 
11 maneiras de compartilhar conhecimento - TDC Florianópolis 2017
11 maneiras de compartilhar conhecimento  - TDC Florianópolis 201711 maneiras de compartilhar conhecimento  - TDC Florianópolis 2017
11 maneiras de compartilhar conhecimento - TDC Florianópolis 2017
Taller Negócio Digitais
 
Kanban no Fluxo Unificado de Portfolio de Projetos - Agile Brazil 2016
Kanban no Fluxo Unificado de Portfolio de Projetos - Agile Brazil 2016Kanban no Fluxo Unificado de Portfolio de Projetos - Agile Brazil 2016
Kanban no Fluxo Unificado de Portfolio de Projetos - Agile Brazil 2016
Taller Negócio Digitais
 
Programação Eficaz - Agile Trends Floripa 2016
Programação Eficaz -  Agile Trends Floripa 2016Programação Eficaz -  Agile Trends Floripa 2016
Programação Eficaz - Agile Trends Floripa 2016
Taller Negócio Digitais
 
Trabalhando a cultura do feedback. Por onde começar?
Trabalhando a cultura do feedback. Por onde começar?Trabalhando a cultura do feedback. Por onde começar?
Trabalhando a cultura do feedback. Por onde começar?
Taller Negócio Digitais
 
Superando o GitFlow - DrupalCamp Campinas 2016
Superando o GitFlow - DrupalCamp Campinas 2016 Superando o GitFlow - DrupalCamp Campinas 2016
Superando o GitFlow - DrupalCamp Campinas 2016
Taller Negócio Digitais
 

Mais de Taller Negócio Digitais (20)

Indo além do técnico para desenvolver sistemas que evoluem na velocidade do...
Indo além do técnico para desenvolver sistemas que evoluem na velocidade do...Indo além do técnico para desenvolver sistemas que evoluem na velocidade do...
Indo além do técnico para desenvolver sistemas que evoluem na velocidade do...
 
Discovery kanban
Discovery kanbanDiscovery kanban
Discovery kanban
 
Taller Negócios Digitais
Taller Negócios DigitaisTaller Negócios Digitais
Taller Negócios Digitais
 
Next.js with drupal, the good parts
Next.js with drupal, the good partsNext.js with drupal, the good parts
Next.js with drupal, the good parts
 
Gestão Ágil com Fluxo Unificado
Gestão Ágil com Fluxo UnificadoGestão Ágil com Fluxo Unificado
Gestão Ágil com Fluxo Unificado
 
Alinhando Discovery com Delivery usando Upstream Kanban
Alinhando Discovery com Delivery usando Upstream KanbanAlinhando Discovery com Delivery usando Upstream Kanban
Alinhando Discovery com Delivery usando Upstream Kanban
 
Lições Aprendidas com Fluxo Unificado
Lições Aprendidas com Fluxo UnificadoLições Aprendidas com Fluxo Unificado
Lições Aprendidas com Fluxo Unificado
 
Como a liderança descentralizada tornou a Taller mais efetiva
Como a liderança descentralizada tornou a Taller mais efetivaComo a liderança descentralizada tornou a Taller mais efetiva
Como a liderança descentralizada tornou a Taller mais efetiva
 
Métricas no Fluxo Unificado
Métricas no Fluxo UnificadoMétricas no Fluxo Unificado
Métricas no Fluxo Unificado
 
Práticas e ferramentas de feedback: potencializando a cultura da confiança
Práticas e ferramentas de feedback: potencializando a cultura da confiançaPráticas e ferramentas de feedback: potencializando a cultura da confiança
Práticas e ferramentas de feedback: potencializando a cultura da confiança
 
Como preparar seu time para receber feedback - Scrum Gathering Rio 2017
Como preparar seu time para receber feedback - Scrum Gathering Rio 2017Como preparar seu time para receber feedback - Scrum Gathering Rio 2017
Como preparar seu time para receber feedback - Scrum Gathering Rio 2017
 
Taller – Treinamentos e consultorias
Taller – Treinamentos e consultoriasTaller – Treinamentos e consultorias
Taller – Treinamentos e consultorias
 
Taller - Ateliê de desenvolvimento de software
Taller - Ateliê de desenvolvimento de softwareTaller - Ateliê de desenvolvimento de software
Taller - Ateliê de desenvolvimento de software
 
Introdução ao Fluxo Unificado - TDC Florianópolis 2017
Introdução ao Fluxo Unificado - TDC Florianópolis 2017Introdução ao Fluxo Unificado - TDC Florianópolis 2017
Introdução ao Fluxo Unificado - TDC Florianópolis 2017
 
Javascript Funcional - TDC Florianópolis 2017
Javascript Funcional - TDC Florianópolis 2017Javascript Funcional - TDC Florianópolis 2017
Javascript Funcional - TDC Florianópolis 2017
 
11 maneiras de compartilhar conhecimento - TDC Florianópolis 2017
11 maneiras de compartilhar conhecimento  - TDC Florianópolis 201711 maneiras de compartilhar conhecimento  - TDC Florianópolis 2017
11 maneiras de compartilhar conhecimento - TDC Florianópolis 2017
 
Kanban no Fluxo Unificado de Portfolio de Projetos - Agile Brazil 2016
Kanban no Fluxo Unificado de Portfolio de Projetos - Agile Brazil 2016Kanban no Fluxo Unificado de Portfolio de Projetos - Agile Brazil 2016
Kanban no Fluxo Unificado de Portfolio de Projetos - Agile Brazil 2016
 
Programação Eficaz - Agile Trends Floripa 2016
Programação Eficaz -  Agile Trends Floripa 2016Programação Eficaz -  Agile Trends Floripa 2016
Programação Eficaz - Agile Trends Floripa 2016
 
Trabalhando a cultura do feedback. Por onde começar?
Trabalhando a cultura do feedback. Por onde começar?Trabalhando a cultura do feedback. Por onde começar?
Trabalhando a cultura do feedback. Por onde começar?
 
Superando o GitFlow - DrupalCamp Campinas 2016
Superando o GitFlow - DrupalCamp Campinas 2016 Superando o GitFlow - DrupalCamp Campinas 2016
Superando o GitFlow - DrupalCamp Campinas 2016
 

De um sistema legado para micro serviços com GraphQL

  • 1. De um sistema legado para microsserviços com GraphQL Sebastian Ferrari sebas@taller.net.br @sebas5384
  • 2. Momentum (do inglês) ● Momento linear na física. ● Impulso, ímpeto ou velocidade adquirida.
  • 6. ● Migração de sistemas legados monólitos. ● Mudanças são lentas, custosas e com alto risco. ● Baixíssima experimentação. ● Tecnologias antigas, dificulta contratação de novos talentos. ● Tecnologias proprietárias com licenças, vendor lock-in, customização lenta e custosa…
  • 10. ● Baixa interoperabilidade entre os serviços e seus consumidores / clients. ○ Padrões abertos e bem definidos. ○ Ontologia é um modelo de dados que representa um conjunto de conceitos dentro de um domínio e os relacionamentos entre estes.
  • 11. ● Muito esforço para criar documentação e manter atualizada! ● Resposta dos serviços não é tolerante a falhas. ● Relação entre recursos/models inconsistente. ● Começa com 1 serviço e rapidamente vai para mais de 20. ● A complexidade aumenta.
  • 14. GraphQL Schema language type Project { name: String tagline: String contributors: [User] } type User { name: String projects: [Project] } type Query { users: [User] } Query language query { users { name projects { name tagLine } } } Result { users: [{ name: 'Sebastian McKenzie', projects: [{ name: 'Babel', tagLine: 'Use next generation...' }] }, { name: 'Sashko Stubailo', projects: [{ name: 'Apollo Client', tagLine: 'A fully-featured, production ready...' }] }] }
  • 15. types.gql type User { id: String name: String } type Query { user (id: String): User } Apollo resolvers.js const resolvers = { Query: { user: (root, { id }) => fetch(`/api/users/${id}`) } } export default resolvers
  • 17. React Apollo react-apollo import { withQuery } from '@apollo/react-hoc' import gql from 'graphql-tag' const UserAvatar = ({ data: { user } }) => ( <div> <img src={ user.photo } alt={ user.name } /> <h4>{ user.name }</h4> </div> ) const query = gql` query UserInfo { user (id: '1') { name photo } } ` const withData = withQuery(query) export default withData(UserAvatar) Conectar o uma GraphQL query a um componente.
  • 19. ● Pensamento grafo !! mais do que recursos. ● Tipagem estática. ○ Documentação automática. ○ Erros de validação de graça. ● Tolerante a falha. Um campo pode falhar, mas o resto da resposta é resolvida. ● Monitoração de performance por campo, não só por query ou request.
  • 21. ● Query Declarativa de vários serviços ● Cada campo / “resolver” é independente. ● Linguagem ubíqua onde os domínios de negócio usam a o mesmo idioma para se comunicar com a área técnica. (DDD) ● Adoção progressiva + thin layer ● Application Layer (DDD Eric Evans) ou Service Layer (Martin Fowler)
  • 24. Legacy System Backend for Frontends (BFF) Microservices Domain Layer Business Logic
  • 25. ● Aumento na performance do client, menos round trips. ○ /user/1 -> /user/1/comments -> … ● Menos código no client !! ● Mudanças mais rápidas sem quebrar clients, com detecção de breaking changes no build. ● API evolutiva, não revolucionária com v1 v2… ○ uglyField @deprecated(reason: “Use other new field")
  • 32. Quem usa em produção?
  • 33. Agregação de schemas (APIs) - Stitching e Delegation - Apollo Federation - API’s Fractais
  • 36. Antes