Introdução ao GraphQL
Microsoft (MVP)
Thiago da Silva Adriano
Developer Squad Onboarding
Autor Técnico e Palestrante
Organizador dos meetups
/perfil/thiagoadriano
programadrianotadriano.net
programadriano
programadriano
Contatos
Blogs
/pt-br/microsofttech/author/thiagoadriano/
Contatos
Agenda
▸ Introdução ao GraphQL
▸ Exemplo prático
Introdução ao GraphQL
{ }
Banco de dados relacional?
Banco de dados NoSQL?
{ }
...?
Então…?
GraphQL is an open-source data query and
manipulation language for APIs, and a
runtime for fulfilling queries with existing
data. GraphQL was developed internally by
Facebook in 2012 before being publicly
released in 2015
Wikipedia
GraphQL
Problema Solução
Projetos frontend
Duvídas?
RestFul Api’s
REST
API
Cloud-Based
Services
Application
Servers Data
Legacy
Applications
Web
Applications
Mobile
Applications
Partner
Applications
Cloud
Resources
RestFul Api’s - Problemas
● Tráfego de dados desnecessários
● Muitas rotas para atender todos os cenários (get news, get products...etc)
● Versionamento de API
8
Tráfego de dados desnecessários
Tráfego de dados desnecessários
Muitas rotas
https://apieventos.band.uol.com.br/rolandgarros/v1/matches?date=2018-05-27&modality=SM&page=1&perPage=10
https://apieventos.band.uol.com.br/rolandgarros/v2/matches?date=2019-05-31&modality=SM&page=1&perPage=10
Versionamento de API´s
https://myserver.com/resource-name?param1=value1&param2=value2&param3=value3
REST API GraphQL API
Multiple Request to Fetch Data Single Request to Fetch Data
Data Data
DB-1
DB-2
DB-3
Clients GraphQL API GraphQL API
● Schemas: Base de uma implementação GraphQL
● Types: Mapeamento entre as nossas Models (Modelos)
● Query: GET/GETByID
● Mutations: POST/PUT/DELETE
Conceitos
Model Type
Exemplo Prático
mutation ($produto: produtoInput!) {
addProduto(produto: $produto) {
codigoBarras,
nome,
preco
}
}
{
"produto":{
"codigoBarras": "151333115321531s3",
"nome": "Produto novo",
"preco": 200.0
}
}
Inserindo dados
Atualizando dados
mutation ($produto: produtoInput!) {
updateProduto(produto: $produto) {
codigoBarras,
nome,
preco
}
}
{
"produto":{
"codigoBarras": "11111111111",
"nome": "Produto atualizado",
"preco": 200.0
}
}
Deletando dados
mutation ($codigoBarras: ID!) {
deleteProduto(codigoBarras:
$codigoBarras)
}
{
"codigoBarras": "11111111111"
}
.NET Core + GraphQL: https://github.com/programadriano/ASPNETCore2_CRUD-API-JWT-EFInMemory-GraphQL
Duvídas?
Obrigado
@programadriano

Introducao ao GraphQL