Este documento discute as vantagens de migrar de um sistema legado monolítico para uma arquitetura de microsserviços usando GraphQL. GraphQL permite que os serviços se comuniquem de forma mais eficiente através de uma interface declarativa e tolerante a falhas. Isso melhora a experiência do desenvolvedor e facilita a evolução contínua da API de forma não disruptiva.
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
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)
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")