O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

JSON Schema: Valide e navegue entre suas APIS

314 visualizações

Publicada em

Como validar e navegar entre APIS utilizando JSON Schema com Hypermedia

Publicada em: Tecnologia
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

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

×