SlideShare une entreprise Scribd logo
1  sur  42
Télécharger pour lire hors ligne
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
● 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.
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.
● 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")
Developer
Experience (DX)
Quem usa em produção?
Agregação de
schemas (APIs)
- Stitching e Delegation
- Apollo Federation
- API’s Fractais
Antes
Depois
Account Product Review
Review
Service
De um sistema legado para microsserviços com GraphQL
De um sistema legado para microsserviços com GraphQL

Contenu connexe

Tendances

02 - Orientação a objetos e revisão de C# v1.5
02 - Orientação a objetos e revisão de C# v1.502 - Orientação a objetos e revisão de C# v1.5
02 - Orientação a objetos e revisão de C# v1.5César Augusto Pessôa
 
Typescript Fundamentals
Typescript FundamentalsTypescript Fundamentals
Typescript FundamentalsSunny Sharma
 
Introduction to Spring Framework
Introduction to Spring FrameworkIntroduction to Spring Framework
Introduction to Spring Framework Serhat Can
 
React vs Angular
React vs Angular React vs Angular
React vs Angular Appinventiv
 
SOLID - Teoria e Prática
SOLID - Teoria e PráticaSOLID - Teoria e Prática
SOLID - Teoria e PráticaEduardo Pires
 
[124]네이버에서 사용되는 여러가지 Data Platform, 그리고 MongoDB
[124]네이버에서 사용되는 여러가지 Data Platform, 그리고 MongoDB[124]네이버에서 사용되는 여러가지 Data Platform, 그리고 MongoDB
[124]네이버에서 사용되는 여러가지 Data Platform, 그리고 MongoDBNAVER D2
 
Confluence를 활용한 콘텐츠 협업 방법 - 모우소프트
Confluence를 활용한 콘텐츠 협업 방법 - 모우소프트Confluence를 활용한 콘텐츠 협업 방법 - 모우소프트
Confluence를 활용한 콘텐츠 협업 방법 - 모우소프트Atlassian 대한민국
 
Clean Code III - Software Craftsmanship
Clean Code III - Software CraftsmanshipClean Code III - Software Craftsmanship
Clean Code III - Software CraftsmanshipTheo Jungeblut
 
Introduction to react
Introduction to reactIntroduction to react
Introduction to reactkiranabburi
 
C# OOP Advanced Concepts
C# OOP Advanced ConceptsC# OOP Advanced Concepts
C# OOP Advanced Conceptsagni_agbc
 
Ivan Jovanovic - Micro Frontends - Codemotion Rome_2019
Ivan Jovanovic - Micro Frontends - Codemotion Rome_2019Ivan Jovanovic - Micro Frontends - Codemotion Rome_2019
Ivan Jovanovic - Micro Frontends - Codemotion Rome_2019Codemotion
 
Move your oracle apps to oci
Move your oracle apps to ociMove your oracle apps to oci
Move your oracle apps to ociVamsiKrishna815
 

Tendances (20)

02 - Orientação a objetos e revisão de C# v1.5
02 - Orientação a objetos e revisão de C# v1.502 - Orientação a objetos e revisão de C# v1.5
02 - Orientação a objetos e revisão de C# v1.5
 
SOLID Principles
SOLID PrinciplesSOLID Principles
SOLID Principles
 
Polimorfismo y herencia
Polimorfismo y herenciaPolimorfismo y herencia
Polimorfismo y herencia
 
Typescript Fundamentals
Typescript FundamentalsTypescript Fundamentals
Typescript Fundamentals
 
Introduction to Spring Framework
Introduction to Spring FrameworkIntroduction to Spring Framework
Introduction to Spring Framework
 
JAVA ORIENTADO A OBJETOS - INTERFACES
JAVA ORIENTADO A OBJETOS - INTERFACESJAVA ORIENTADO A OBJETOS - INTERFACES
JAVA ORIENTADO A OBJETOS - INTERFACES
 
React Hooks
React HooksReact Hooks
React Hooks
 
React vs Angular
React vs Angular React vs Angular
React vs Angular
 
SOLID - Teoria e Prática
SOLID - Teoria e PráticaSOLID - Teoria e Prática
SOLID - Teoria e Prática
 
[124]네이버에서 사용되는 여러가지 Data Platform, 그리고 MongoDB
[124]네이버에서 사용되는 여러가지 Data Platform, 그리고 MongoDB[124]네이버에서 사용되는 여러가지 Data Platform, 그리고 MongoDB
[124]네이버에서 사용되는 여러가지 Data Platform, 그리고 MongoDB
 
Confluence를 활용한 콘텐츠 협업 방법 - 모우소프트
Confluence를 활용한 콘텐츠 협업 방법 - 모우소프트Confluence를 활용한 콘텐츠 협업 방법 - 모우소프트
Confluence를 활용한 콘텐츠 협업 방법 - 모우소프트
 
Clean Code III - Software Craftsmanship
Clean Code III - Software CraftsmanshipClean Code III - Software Craftsmanship
Clean Code III - Software Craftsmanship
 
Paradigma Orientado a Objeto
Paradigma Orientado a ObjetoParadigma Orientado a Objeto
Paradigma Orientado a Objeto
 
Introduction to react
Introduction to reactIntroduction to react
Introduction to react
 
POO - 11 - Prática de Herança
POO - 11 - Prática de HerançaPOO - 11 - Prática de Herança
POO - 11 - Prática de Herança
 
VueJS: The Simple Revolution
VueJS: The Simple RevolutionVueJS: The Simple Revolution
VueJS: The Simple Revolution
 
POO - 17 - Interfaces
POO - 17 - InterfacesPOO - 17 - Interfaces
POO - 17 - Interfaces
 
C# OOP Advanced Concepts
C# OOP Advanced ConceptsC# OOP Advanced Concepts
C# OOP Advanced Concepts
 
Ivan Jovanovic - Micro Frontends - Codemotion Rome_2019
Ivan Jovanovic - Micro Frontends - Codemotion Rome_2019Ivan Jovanovic - Micro Frontends - Codemotion Rome_2019
Ivan Jovanovic - Micro Frontends - Codemotion Rome_2019
 
Move your oracle apps to oci
Move your oracle apps to ociMove your oracle apps to oci
Move your oracle apps to oci
 

Similaire à De um sistema legado para microsserviç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 NizzolaDextra 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 Azuretdc-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 QualidadeAndré 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 segurosGustavo 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 IstioJonh Wendell
 
Workshop soa, microservices e devops
Workshop soa, microservices e devopsWorkshop soa, microservices e devops
Workshop soa, microservices e devopsDiego Pacheco
 
Arquitetura de Software e o DNAD2013
Arquitetura de Software e o DNAD2013Arquitetura de Software e o DNAD2013
Arquitetura de Software e o DNAD2013André 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 RestfulDemoiselle Framework
 
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 WebDaniel Brandão
 
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 Ágilabacrazy
 
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 crescerGuilherme
 
Treinamento ASP.NET 2014
Treinamento ASP.NET 2014Treinamento ASP.NET 2014
Treinamento ASP.NET 2014Eric 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.pdfDouglas Siviotti
 
Arquitetura Serverless para Machine Learning
Arquitetura Serverless para Machine LearningArquitetura Serverless para Machine Learning
Arquitetura Serverless para Machine LearningFelipe 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 GraphQLTaller 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 PostgreSQLMatheus Espanhol
 

Similaire à De um sistema legado para microsserviç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
 

Plus 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
 
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 KanbanTaller 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 efetivaTaller 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çaTaller 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 2017Taller 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 softwareTaller 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 2017Taller 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 2017Taller 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 2017Taller 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 2016Taller 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 2016Taller 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
 

Plus 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 microsserviç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…
  • 8.
  • 9.
  • 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.
  • 12.
  • 13.
  • 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.
  • 20.
  • 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")
  • 26.
  • 27.
  • 29.
  • 30.
  • 31.
  • 32. Quem usa em produção?
  • 33. Agregação de schemas (APIs) - Stitching e Delegation - Apollo Federation - API’s Fractais
  • 34.
  • 35.
  • 36. Antes
  • 38.