SlideShare ist ein Scribd-Unternehmen logo
1 von 35
Downloaden Sie, um offline zu lesen
JSON SCHEMA
VALIDE E NAVEGUE ENTRE SUAS APIS
WILSON JÚNIOR
ENGENHEIRO DE SOFTWARE NA GLOBO.COM
HÁ QUASE 3 ANOS, MANTÉM PARTE DOS
SERVIÇOS DE PUBLICAÇÃO DE CONTEÚDO,
APAIXONADO POR MAIS DE UMA DÉCADA
POR SOFTWARE E PESSOAS.
INTRODUÇÃO
MONOLITO VS MICROSERVICES
O JEITO DE ARQUITETAR
SOFTWARE MUDOU …
ERA UMA VEZ …
SOFTWARE MONOLITO
CARACTERÍSTICAS DE UM MONOLITO
▸ Codebase grande
▸ Toda regra de negocio
▸ Muitas pessoas mantendo
▸ Uma stack legada
▸ Alto culto de mudança
CASE GLOBO-CORE AT GLOBO.COM
▸ 40+ pessoas
▸ git merge hell
▸ Difícil fazer deploy
PARA RESOLVER ESSE PROBLEMA
OS NOVOS MAGOS JOVENS
CRIARAM UMA NOVA SOLUÇÃO …
MICRO SERVIÇOS
VANTAGENS DE UTILIZAR MICRO SERVIÇOS
▸ Única responsabilidade
▸ Pequenos times
▸ Rápido de escrever
▸ Stack independente
▸ Banco de dados isolado
EXEMPLO GLOBO.COM
AUTENTICAÇÃO API DE CONTEÚDOS
API DE VÍDEOS API SEMÂNTICA
CLIENTE RENDERIZADOR
DE CONTEÚDO
ADMIN SPA
COMO OS SERVIÇOS SE INTERAGEM
▸ HTTP - Restful
▸ JSON
▸ N Clients
CONSEQUÊNCIA DE VÁRIAS
APIS
CONSEQUÊNCIA DE VÁRIAS APIS
▸ Muitos contratos para manter
▸ Muita documentação
▸ Validação
▸ Descobrir os endereços
▸ Lidar com breaking changes
▸ Difícil navegação
JSON SCHEMA!
VANTAGENS
▸ Descreve o formato dos dados
▸ limpa para leitura de máquinas e humanos
▸ Completa estrutura de validação
EXEMPLO
{
"id": 1000501,
"name": "Wilson Júnior",
"city": {
"name": "Rio de Janeiro",
"state": "RJ"
},
"age": 24
}
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "Pessoa",
"type": "object",
"properties": {
"id": { "type": "number", "title": "Identifier" },
"name": { "type": "string", "minLength": 3, "title":
"Person name" },
"city": {
"title": "City",
"type": "object",
"description": "Where person lives",
"properties": {
"name": { "type": "string", "title": "Name"},
"state": { "type": "string", "title": "State",
"enum": ["RJ", "SP", "GO"]}
}
},
"age": { "type": "number" }
},
"required": ["name", "city"]
}
CONSEQUÊNCIA

VALIDAÇÃO CLIENT-SIDE E
SERVER-SIDE
JÁ PODEMOS VALIDAR,
O QUE MAIS FALTA …
NAVEGAR ENTRE
AS APIS
JSON HYPER-
SCHEMA
▸ Descreve a sua API
▸ Descreve links
▸ Descreve formulários
EXEMPLO
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "Pessoa",
"type": "object",
...
"links": [
{
"rel": "photos",
"href": “http://my-photo-service/by-person/{id}“
}
]
}
TEXT
EXEMPLO (MANUTENABILIDADE)
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "Pessoa",
"type": "object",
...
"links": [
{
"rel": "photos",
"href": “http://my-photo-v2/photos/{id}“
},
{
"rel": "delete",
"href": "/api/person/{id}",
"method": "DELETE"
}
]
}
COMO EU AMARRO UM
SCHEMA A UM RECURSO
DENTRO DE UMA API RESTFUL
curl -i http://myapi.com/people/1000501



HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8;
profile=“http://myapi.com/schemas/people”
{“id”: “xpto”, …}
FERRAMENTAS
VALIDAÇÕES
▸ Python: github.com/Julian/jsonschema
▸ GO: github.com/xeipuuv/gojsonschema
▸ Ruby: github.com/ruby-json-schema/json-schema
▸ Javascript: geraintluff.github.io/tv4/
▸ Mais em: json-schema.org/implementations.html
TEXT
PLUCT
github.com/globocom/pluct
import pluct
# Load a resource
item = pluct.resource('http://myapi.com/people/1000501')
photos = item.rel('photos', params={'q': 'Roupa bonita'})
TECNOLOGIAS ALTERNATIVAS/RELACIONADAS
▸ GRPC
▸ JSON-LD
▸ GraphQL
GOSTOU DA
TECNOLOGIA ?
VENHA TRABALHAR COM A GENTE
talentos.globo.com
OBRIGADO
▸ Github: wpjunior
▸ Outras redes sociais: about.me/
wpjunior

Weitere ähnliche Inhalte

Mehr von Wilson Júnior

Pensando e Arquitetando Aplicações Resilientes
Pensando e Arquitetando Aplicações ResilientesPensando e Arquitetando Aplicações Resilientes
Pensando e Arquitetando Aplicações ResilientesWilson Júnior
 
Escreva aplicações web assíncronas com python3 + tornado
Escreva aplicações web assíncronas com python3 + tornadoEscreva aplicações web assíncronas com python3 + tornado
Escreva aplicações web assíncronas com python3 + tornadoWilson Júnior
 
Arquitetura de projetos e pacotes em GO
Arquitetura de projetos e pacotes em GOArquitetura de projetos e pacotes em GO
Arquitetura de projetos e pacotes em GOWilson Júnior
 
Golang para desenvolvedores pragmáticos parte 2
Golang para desenvolvedores pragmáticos  parte 2Golang para desenvolvedores pragmáticos  parte 2
Golang para desenvolvedores pragmáticos parte 2Wilson Júnior
 
Go Lang para desenvolvedores pragmáticos (parte 1)
Go Lang para desenvolvedores pragmáticos (parte 1)Go Lang para desenvolvedores pragmáticos (parte 1)
Go Lang para desenvolvedores pragmáticos (parte 1)Wilson Júnior
 

Mehr von Wilson Júnior (6)

Pensando e Arquitetando Aplicações Resilientes
Pensando e Arquitetando Aplicações ResilientesPensando e Arquitetando Aplicações Resilientes
Pensando e Arquitetando Aplicações Resilientes
 
Escreva aplicações web assíncronas com python3 + tornado
Escreva aplicações web assíncronas com python3 + tornadoEscreva aplicações web assíncronas com python3 + tornado
Escreva aplicações web assíncronas com python3 + tornado
 
Arquitetura de projetos e pacotes em GO
Arquitetura de projetos e pacotes em GOArquitetura de projetos e pacotes em GO
Arquitetura de projetos e pacotes em GO
 
Golang para desenvolvedores pragmáticos parte 2
Golang para desenvolvedores pragmáticos  parte 2Golang para desenvolvedores pragmáticos  parte 2
Golang para desenvolvedores pragmáticos parte 2
 
Go Lang para desenvolvedores pragmáticos (parte 1)
Go Lang para desenvolvedores pragmáticos (parte 1)Go Lang para desenvolvedores pragmáticos (parte 1)
Go Lang para desenvolvedores pragmáticos (parte 1)
 
Mongoengine
MongoengineMongoengine
Mongoengine
 

Valide e navegue entre suas APIs com JSON Schema