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.

Restful APIs com Spring 3

910 views

Published on

Apresentação feita no SerraStartec 2013 em Lages/SC 05/10/2013. O objetivo foi uma introdução as REST webservices utilizando o Spring.

Published in: Technology
  • Login to see the comments

  • Be the first to like this

Restful APIs com Spring 3

  1. 1. Globalcode – Open4education Restful APIs com Spring 3
  2. 2. Globalcode – Open4education Restful APIs com Spring 3 Alex Miranda Software Engineer Guilherme Branco Software Engineer
  3. 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. 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. 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. 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. 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. 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. 9. Globalcode – Open4education GET
  10. 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. 11. Globalcode – Open4education GET - Exemplo URI: /api/games/1 METHOD: Get HEADERS: Accept: application/json Status Code: 404 NOT FOUND
  12. 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. 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. 14. Globalcode – Open4education PUT
  15. 15. Globalcode – Open4education PUT - Exemplo URI: /api/games/1 METHOD: Put HEADERS: Accept: application/json Content: { status: ‘OVER’ } Status Code: 200 OK
  16. 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. 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. 18. Globalcode – Open4education DELETE
  19. 19. Globalcode – Open4education DELETE - Exemplo URI: /api/games/1 METHOD: Delete Status Code: 200 OK * Side-effect
  20. 20. Globalcode – Open4education DELETE - Exemplo URI: /api/games/1 METHOD: Delete Status Code: 202 ACCEPTED
  21. 21. Globalcode – Open4education DELETE - Exemplo URI: /api/games/1 METHOD: Delete Status Code: 301 MOVED PERMANENTLY 302 MOVED HEADERS: Location: /api/archivedGames/1
  22. 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. 23. Globalcode – Open4education POST
  24. 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. 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. 26. Globalcode – Open4education HIPERMEDIA ● Páginas da Web ● Diversos formatos ● Permite descobrir operações disponíveis
  27. 27. Globalcode – Open4education Modelo de Maturidade http://martinfowler.com/articles/richardsonMaturityModel.html
  28. 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. 29. Globalcode – Open4education Jogo-da-velha
  30. 30. Globalcode – Open4education Spring MVC ● Centrado em um servlet que dispacha as requisições - FrontController; ● DispatcherServlet; ● Integrado com o container IoC do Spring;
  31. 31. Globalcode – Open4education Spring MVC Get - api/games/1 Mapeamento no controller - api/games Post - api/games/1
  32. 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. 33. Globalcode – Open4education Spring HATEOAS ● ResourceSupport, ResourceAssemblerSupport
  34. 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. 35. Globalcode – Open4education Spring MVC Test
  36. 36. Globalcode – Open4education Spring MVC Test
  37. 37. Globalcode – Open4education DEMO 1. Projeto 2. Rest shell 3. Aplicação HTML5 + JavaScript
  38. 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. 39. Globalcode – Open4education Perguntas?
  40. 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

×