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.

REST Web Services com Java

Apresentação realizada por William Antônio Siqueira para o 1º Encontro do JUG Vale sobre a criação de REST Web Services em Java(RESTful)

REST Web Services com Java

  1. 1. REST Web Services com Java
  2. 2. Sobre● Programação ABAP● BI com a ferramenta Business Objects● Suporte ferramentas JBoss● Paralelamente: ○ S2 programação, principalmente Java ○ JavaFX ○ Comunidades e fóruns ○ Projetos Open Source● Com WEB Services RESTful: ○ TCC ○ APIs RESTful ○ RESTEasy● Na WEB: ○ @william_antonio ○ http://williamantonio.wordpress.com
  3. 3. Web Services● Tecnologia para integração de sistemas● Independência de plataforma● Utiliza padrões abertos(você não fica preso a um vendedor)● Rock star em sistemas atuais● Baixo acoplamento entre quem consome e quem produz● WS-* e SOAP ○ Uma URL, um método HTTP, um formato ○ Muito código gerado (eca!) ○ HTTP é *desprezado* ○ Soluções dadas por grandes empresas com um "toque especial" = Estaca zero de novo! ○ Complexo? ○ Imensa discussão SOAP/WS X REST: http://bit. ly/s0Gofp
  4. 4. http://www.arcwebservices.com/arcwebonline/services/soap_samples.htm?
  5. 5. REST● A WEB é um sucesso!● REST? Tese de Roy Fielding● "The idea of REST is essentially a reverse-engineering of how the Web works" - Java SOA Cookbook● Um estilo arquitetural com os seguintes princípios ○ Foco em recursos ○ Identificação única de cada recurso ○ Interface uniforme ○ Stateless ○ Múltiplas representações de um mesmo recurso● Vantagens: ○ Escalabilidade ○ Simplicidade ○ Representa sua aplicação através de recursos ao invés de métodos não explicados (vantagem?)
  6. 6. REST com HTTP● HTTP é perfeito para aplicarmos os princípios REST: ○ Identificação através de URIs ○ Interface uniforme: ■ Verbos HTTP: GET, POST, PUT, DELETE... ■ Códigos informativos: 404, 201, 500 e outras dezenas...● Simples e praticamente acessível de qualquer linguagem de programação● HTTP é maduro e consolidado● Simples: ○ No cabeçalho da requisição informações como formatos de dados, codificação, linguagem, entre outras ○ No corpo da requisição a representação do recurso● Autenticação, encriptação, autorização: Use o que o HTTP oferece
  7. 7. Uma requisição HTTP
  8. 8. RESTful WEB Services● Web Services que seguem os princípios REST● Restful Web Services é o livro!● Algo a acrescentar: ○ GET sempre seguro ○ GET, PUT, DELETE idempotentes, POST não ○ Transações com REST ○ Como criar REST WS com Java, Ruby, Python● ROA - Resource Oriented Architeture● Comunidade em ação ○ Críticas a muitos WEB Services e APIs existente. São realmente REST? ○ HATEOAS - Ligar os recursos através de URIs para implementar o sistema. O cliente usa as URIs para a próxima iteração com o servidor
  9. 9. Na prática● Recurso Cachorro ○ GET /cachorro/{id} Recupera ○ DELETE /cachorro/{id} Apaga ○ POST /cachorro Cria ○ GET /cachorro Recupera todos● Formatos: XML e JSON● Códigos HTTP ○ 404 - Não encontrado ○ 500 - Erro desconhecido no servidor ○ 201 - Criado
  10. 10. RESTful WEB Services com Java● Usar Servlets? Usar frameworks de terceiros não padronizados? Nada disso!!● JAX-RS● Foco em POJOs e anotações● JSR 311 e JSR 339 (a caminho)● Aplicações JAX-RS podem rodar em um simples servlet contêiner● Acreditem em mim, programar em Java é prazeroso de novo!● Você não faz parse de XML nem JSON, nem de nenhum outro formato famoso● Você só anota e programa sua lógica de negócio● O livro da vez é RESTful Java with JAX-RS.
  11. 11. A maneira JAX-RS de programar● Anote suas classes e métodos com @Path para dizer qual URI seus métodos representam● Use @GET, @POST, @DELETE, @PUT para dizer qual o método HTTP● Use @Produces para determinar os formatos de dados que serão produzidos● JAX-RS usará os métodos acima para determinar qual método será chamado de acordo com a requisição HTTP● Pode usar uma interface para representar seus recursos● Use "templates" em Paths para injetar parâmetros que estão na URI através das anotações @PathParam e @QueryParam
  12. 12. Exemplo ● recuperaFoo responde a GET em /foo/{id}, onde id é um número ( responde a /foo/666, mas não a /foo/abc) ● criaFoo responde a POST em /foo ● apagaFoo responde a DELETE em /foo ● atualizaFoo responde a PUT em /foo cujo corpo da requisição contenha uma representação de Foo ● O método chamado é baseado nas informações da requisição HTTP
  13. 13. ● Implementação de JAX-RS● Oferece mais que a especificação● É um projeto JBoss● Open Source● Características extra JAX-RS: ○ Interceptores ○ API Cliente ○ Suporte a muitos formatos ○ Ligação de recursos ○ API JavaScript ○ Integração com Spring, EJB, CDI, outros ○ Suporte a testes e contêiner integrado para testes ○ Mais...
  14. 14. Uma API que usa RESTful WS● WEB Services REST para ler informações dos nossos candidatos● Falha em alguns princípios REST :(● Dados só em XML● Implementado com Jersey● Segunda versão a caminho● Publicada no ProgrammableWEB :O ○ http://www.programmableweb.com/api/brazilian-election- candidates● Código aberto :) ○ https://bitbucket.org/williamAntonio/elei-es-abertas● Demonstração "ao vivo" :) ○ http://williamprogrammer.com/EleicoesAbertas/
  15. 15. Mais APIs que usam JAX-RS● Consumir APIs É TDB ○ Twitter ○ Facebook ○ APIs do Google● Exemplo de um cliente simples do Last FM usando RESTEasy: ○ http://javafree.uol.com.br/artigo/882228/Um-simples- cliente-da-API-do-LastFM-com-RESTEasy.html● Entre no ProgrammableWeb.com e seja feliz. Vamos entrar? ○ http://www.programmableweb.com/apis/directory/1? protocol=REST
  16. 16. Além da apresentação● Livros: ○ RESTful Web Services ○ RESTful Java with JAX-RS ○ REST In Practice*● WEB ○ Tese do Roy Fielding ■ http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm ○ JAX-RS ■ http://jcp.org/en/jsr/detail?id=311 ■ http://jcp.org/en/jsr/detail?id=339 ■ http://www.jboss.org/resteasy ○ Blogs ■ http://blog.steveklabnik.com/2011/07/03/nobody- understands-rest-or-http.html ■ http://timelessrepo.com/haters-gonna-hateoas ■ http://martinfowler.com/articles/richardsonMaturityModel. html
  17. 17. Perguntas?
  18. 18. Muito Obrigado!

×