Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

JSON Schema: Valide e navegue entre suas APIS

379 views

Published on

Como validar e navegar entre APIS utilizando JSON Schema com Hypermedia

Published in: Technology
  • Be the first to comment

  • Be the first to like this

JSON Schema: Valide e navegue entre suas APIS

  1. 1. JSON SCHEMA VALIDE E NAVEGUE ENTRE SUAS APIS
  2. 2. 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.
  3. 3. INTRODUÇÃO MONOLITO VS MICROSERVICES
  4. 4. O JEITO DE ARQUITETAR SOFTWARE MUDOU …
  5. 5. ERA UMA VEZ …
  6. 6. SOFTWARE MONOLITO
  7. 7. CARACTERÍSTICAS DE UM MONOLITO ▸ Codebase grande ▸ Toda regra de negocio ▸ Muitas pessoas mantendo ▸ Uma stack legada ▸ Alto culto de mudança
  8. 8. CASE GLOBO-CORE AT GLOBO.COM ▸ 40+ pessoas ▸ git merge hell ▸ Difícil fazer deploy
  9. 9. PARA RESOLVER ESSE PROBLEMA OS NOVOS MAGOS JOVENS CRIARAM UMA NOVA SOLUÇÃO …
  10. 10. MICRO SERVIÇOS
  11. 11. VANTAGENS DE UTILIZAR MICRO SERVIÇOS ▸ Única responsabilidade ▸ Pequenos times ▸ Rápido de escrever ▸ Stack independente ▸ Banco de dados isolado
  12. 12. EXEMPLO GLOBO.COM AUTENTICAÇÃO API DE CONTEÚDOS API DE VÍDEOS API SEMÂNTICA CLIENTE RENDERIZADOR DE CONTEÚDO ADMIN SPA
  13. 13. COMO OS SERVIÇOS SE INTERAGEM ▸ HTTP - Restful ▸ JSON ▸ N Clients
  14. 14. CONSEQUÊNCIA DE VÁRIAS APIS
  15. 15. 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
  16. 16. JSON SCHEMA!
  17. 17. VANTAGENS ▸ Descreve o formato dos dados ▸ limpa para leitura de máquinas e humanos ▸ Completa estrutura de validação
  18. 18. EXEMPLO { "id": 1000501, "name": "Wilson Júnior", "city": { "name": "Rio de Janeiro", "state": "RJ" }, "age": 24 }
  19. 19. { "$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"] }
  20. 20. CONSEQUÊNCIA
 VALIDAÇÃO CLIENT-SIDE E SERVER-SIDE
  21. 21. JÁ PODEMOS VALIDAR, O QUE MAIS FALTA …
  22. 22. NAVEGAR ENTRE AS APIS
  23. 23. JSON HYPER- SCHEMA
  24. 24. ▸ Descreve a sua API ▸ Descreve links ▸ Descreve formulários
  25. 25. EXEMPLO { "$schema": "http://json-schema.org/draft-04/schema#", "title": "Pessoa", "type": "object", ... "links": [ { "rel": "photos", "href": “http://my-photo-service/by-person/{id}“ } ] }
  26. 26. 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" } ] }
  27. 27. COMO EU AMARRO UM SCHEMA A UM RECURSO DENTRO DE UMA API RESTFUL
  28. 28. 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”, …}
  29. 29. FERRAMENTAS
  30. 30. 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
  31. 31. 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'})
  32. 32. TECNOLOGIAS ALTERNATIVAS/RELACIONADAS ▸ GRPC ▸ JSON-LD ▸ GraphQL
  33. 33. GOSTOU DA TECNOLOGIA ?
  34. 34. VENHA TRABALHAR COM A GENTE talentos.globo.com
  35. 35. OBRIGADO ▸ Github: wpjunior ▸ Outras redes sociais: about.me/ wpjunior

×