Publicidad

Restful APIs com Spring 3

Principal Software Engineer en knab
7 de Oct de 2013
Publicidad

Más contenido relacionado

Similar a Restful APIs com Spring 3(20)

Último(20)

Publicidad

Restful APIs com Spring 3

  1. Globalcode – Open4education Restful APIs com Spring 3
  2. Globalcode – Open4education Restful APIs com Spring 3 Alex Miranda Software Engineer Guilherme Branco Software Engineer
  3. Globalcode – Open4education REpresentational State Transfer ● Comunicação Cliente - Servidor ● Estilo Arquitetural ● Termo cunhado por Roy Fielding em 2000 ● Interface web simples que utiliza diversos formatos de dados, sem abstrações adicionais ● Ênfase nos recursos e sem estado
  4. Globalcode – Open4education Porque REST? ● Simples, leve e escalável ● Orientado a recursos ● Sem estado, cada requisição contém toda informação necessária ● Utiliza todo o poder da Web – Restful ● Fácil de começar a desenvolver uma aplicação que conecte inúmeros clientes ● Suporta diversas plataformas, dispositivos ou tipos de clientes
  5. Globalcode – Open4education Porque Spring? ● Plataforma completa para desenvolvimento de aplicações em Java, groovy ou outras linguagens que rodam na JVM ● Facilitou o desenvolvimento de aplicações enterprise ● Permite que o desenvolvedor foque no negócio ● Um dos frameworks mais populares e com comunidade ativa ● Open-source ● Spring MVC Test framework
  6. Globalcode – Open4education Princípios do REST ● Expõe recursos logicamente organizados como uma estrutura de um sistema de arquivos, fácil de ser entendido ● O cliente acessa representações de um estado do recurso ● As mensagens utilizam métodos HTTP padrões (GET, POST, PUT e DELETE) ● O servidor é sem estado, ficando a cargo do cliente manter estado entre requisições ao servidor ● Utiliza hipermedia tanto para representação de estados, como para transições deste estado
  7. Globalcode – Open4education Conceito de Recursos ● É tudo aquilo que o seu sistema expõe ● Tudo é um recurso ○ Usuários, assinatura, autenticação, carrinho de compra, contagem de uma produtos… ● Deve ser independente de sua representação ○ /api/users/1001.html ○ /api/users/1001.json ○ /api/users/1001 [Accept: application/xml]
  8. Globalcode – Open4education GET ● Seguro ● Idempotente ● Aceita headers como ○ Accept ○ If-None-Match ● Responde com ○ 200, 304 ou 404… ○ Content-Type ○ Content-Length ○ ETag
  9. Globalcode – Open4education GET
  10. Globalcode – Open4education GET - Exemplo URI: /api/games/1 METHOD: Get HEADERS: Accept: application/json Status Code: 200 OK HEADERS: Content-Type: application/json Content-Length: 199 bytes
  11. Globalcode – Open4education GET - Exemplo URI: /api/games/1 METHOD: Get HEADERS: Accept: application/json Status Code: 404 NOT FOUND
  12. Globalcode – Open4education GET - Exemplo URI: /api/games/1 METHOD: Get HEADERS: Accept: application/json Status Code: 304 Moved HEADERS: Location: /api/archivedGames/1
  13. Globalcode – Open4education PUT ● Idempotente ● Aceita headers como ○ Accept ○ If-Match ● Responde com ○ 200, 202, 400, 404, 409, 500… ○ Content-Type ○ Content-Length ○ ETag
  14. Globalcode – Open4education PUT
  15. Globalcode – Open4education PUT - Exemplo URI: /api/games/1 METHOD: Put HEADERS: Accept: application/json Content: { status: ‘OVER’ } Status Code: 200 OK
  16. Globalcode – Open4education PUT - Exemplo URI: /api/games/1 METHOD: Put HEADERS: Accept: application/json Content: { status: ‘INVALID’ } Status Code: 400 BAD REQUEST Content: { status: 400, reason: “invalid data” }
  17. Globalcode – Open4education DELETE ● Pode ser assíncrono ● Não aceita Message Body ● Não aceita Response Body * ● Aceita headers como ○ Accept ● Responde com ○ 200, 202, 404, 409, 500…
  18. Globalcode – Open4education DELETE
  19. Globalcode – Open4education DELETE - Exemplo URI: /api/games/1 METHOD: Delete Status Code: 200 OK * Side-effect
  20. Globalcode – Open4education DELETE - Exemplo URI: /api/games/1 METHOD: Delete Status Code: 202 ACCEPTED
  21. Globalcode – Open4education DELETE - Exemplo URI: /api/games/1 METHOD: Delete Status Code: 301 MOVED PERMANENTLY 302 MOVED HEADERS: Location: /api/archivedGames/1
  22. Globalcode – Open4education POST ● Criar um recurso no servidor ● Enviar uma mensagem contendo uma requisição para uma operação ● Aceita headers como ○ Accept ● Responde com ○ 200, 202, 400, 500… ○ Content-Type ○ Content-Length ○ Location ○ ETag
  23. Globalcode – Open4education POST
  24. Globalcode – Open4education POST - Exemplo URI: /api/games METHOD: Post HEADERS: Accept: application/json Status Code: 201 CREATED HEADERS: Location: /api/games/3 *CRIAUMNOVOJOGOVAZIO
  25. Globalcode – Open4education POST - Exemplo URI: /api/games/3 METHOD: Post HEADERS: Accept: application/json Content Type: application/json Content: { mark: ‘X’, position: ‘TopLeftCorner’ } Status Code: 200 CREATED *ENVIAJOGADAPARASERVIDOR
  26. Globalcode – Open4education HIPERMEDIA ● Páginas da Web ● Diversos formatos ● Permite descobrir operações disponíveis
  27. Globalcode – Open4education Modelo de Maturidade http://martinfowler.com/articles/richardsonMaturityModel.html
  28. Globalcode – Open4education HATEOAS ● Hypermedia As The Engine Of Application State ● A interação do cliente com servidor se dá através de hypermedia ● A lista de links de um recurso deve ser dinâmica e refletir cada estado possível ● Diálogo entre cliente e servidor ● Desacopla cliente e servidor, permitindo que a API evolua independente
  29. Globalcode – Open4education Jogo-da-velha
  30. Globalcode – Open4education Spring MVC ● Centrado em um servlet que dispacha as requisições - FrontController; ● DispatcherServlet; ● Integrado com o container IoC do Spring;
  31. Globalcode – Open4education Spring MVC Get - api/games/1 Mapeamento no controller - api/games Post - api/games/1
  32. Globalcode – Open4education Spring HATEOAS ● Fornece APIs que facilitam a criação das representações e links; ● Criação de links com base em métodos do Controller
  33. Globalcode – Open4education Spring HATEOAS ● ResourceSupport, ResourceAssemblerSupport
  34. Globalcode – Open4education Spring MVC Test ● Suporte para testes de client e server-side ● Requisições utilizando o DispatcherServlet ● API fluente para os asserts
  35. Globalcode – Open4education Spring MVC Test
  36. Globalcode – Open4education Spring MVC Test
  37. Globalcode – Open4education DEMO 1. Projeto 2. Rest shell 3. Aplicação HTML5 + JavaScript
  38. Globalcode – Open4education Erros clássicos ● Expor estritamente todas as entidades do modelo ● Achar que todas as “ações” devem ser implementadas para todos os recursos ● Adicionar “métodos” que não se encaixam com os Verbos HTTP, ou métodos padrões
  39. Globalcode – Open4education Perguntas?
  40. Globalcode – Open4education Obrigado br.linkedin.com/pub/guilherme-branco/26/775/2a4 github.com/gpbranco twitter.com/guipbranco br.linkedin.com/in/mmirandaalex github.com/alexmiranda twitter.com/mmalx alexmiranda.net https://github.com/alexmiranda/tic-tac-toe-restful Alex Miranda Software Engineer Guilherme Branco Software Engineer
Publicidad