SlideShare uma empresa Scribd logo
1 de 42
Baixar para ler offline
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 micro serviços com GraphQL
De um sistema legado para micro serviços com GraphQL

Mais conteúdo relacionado

Mais procurados

Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)
Bruno Grange
 

Mais procurados (20)

Introdução ao HTML e CSS
Introdução ao HTML e CSSIntrodução ao HTML e CSS
Introdução ao HTML e CSS
 
Introduction to gRPC
Introduction to gRPCIntroduction to gRPC
Introduction to gRPC
 
Node.js e Express
Node.js e ExpressNode.js e Express
Node.js e Express
 
Curso de HTML5 - Aula 01
Curso de HTML5 - Aula 01   Curso de HTML5 - Aula 01
Curso de HTML5 - Aula 01
 
NodeJS guide for beginners
NodeJS guide for beginnersNodeJS guide for beginners
NodeJS guide for beginners
 
POO - 01 - Introdução ao Paradigma Orientado a Objetos
POO - 01 - Introdução ao Paradigma Orientado a ObjetosPOO - 01 - Introdução ao Paradigma Orientado a Objetos
POO - 01 - Introdução ao Paradigma Orientado a Objetos
 
Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)
 
Introdução APIs RESTful
Introdução APIs RESTfulIntrodução APIs RESTful
Introdução APIs RESTful
 
Padrões de projeto - Adapter, Proxy, Composite e Bridge
Padrões de projeto - Adapter, Proxy, Composite e BridgePadrões de projeto - Adapter, Proxy, Composite e Bridge
Padrões de projeto - Adapter, Proxy, Composite e Bridge
 
POO - 18 - Sobrecarga e Sobreposição de Métodos
POO - 18 - Sobrecarga e Sobreposição de MétodosPOO - 18 - Sobrecarga e Sobreposição de Métodos
POO - 18 - Sobrecarga e Sobreposição de Métodos
 
POO - 10 - Herança
POO - 10 - HerançaPOO - 10 - Herança
POO - 10 - Herança
 
Angular Best Practices - Perfomatix
Angular Best Practices - PerfomatixAngular Best Practices - Perfomatix
Angular Best Practices - Perfomatix
 
REST API and CRUD
REST API and CRUDREST API and CRUD
REST API and CRUD
 
Apresentação rest api
Apresentação rest apiApresentação rest api
Apresentação rest api
 
PHP - Introdução
PHP - IntroduçãoPHP - Introdução
PHP - Introdução
 
Boas práticas técnica para um código limpo (Clean Code)
Boas práticas técnica para um código limpo (Clean Code)Boas práticas técnica para um código limpo (Clean Code)
Boas práticas técnica para um código limpo (Clean Code)
 
Postman Webinar: Postman 101
Postman Webinar: Postman 101Postman Webinar: Postman 101
Postman Webinar: Postman 101
 
Overview of Rest Service and ASP.NET WEB API
Overview of Rest Service and ASP.NET WEB APIOverview of Rest Service and ASP.NET WEB API
Overview of Rest Service and ASP.NET WEB API
 
Rest in flask
Rest in flaskRest in flask
Rest in flask
 
Optional in Java 8
Optional in Java 8Optional in Java 8
Optional in Java 8
 

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

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
 
Desafio de crescer
Desafio de crescerDesafio de crescer
Desafio de crescer
Guilherme
 

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

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…
  • 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.