JSON Schema: Valide e navegue entre suas APIS

Post on 12-Apr-2017

53 views 4 download

Transcript of JSON Schema: Valide e navegue entre suas APIS

JSON SCHEMAVALIDE 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ÇÃOMONOLITO 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