WebService Restful em Java

15,057 views

Published on

Introdução à WebServices Restful em Java, utilizando JAX-RS e Jersey.

Published in: Technology, News & Politics
1 Comment
10 Likes
Statistics
Notes
No Downloads
Views
Total views
15,057
On SlideShare
0
From Embeds
0
Number of Embeds
650
Actions
Shares
0
Downloads
430
Comments
1
Likes
10
Embeds 0
No embeds

No notes for slide

WebService Restful em Java

  1. 1. Restful WebServices em Java Alexandre Macedo K19 Treinamentos 15 de novembro de 2010 Alexandre Macedo Restful WebServices em Java www.k19.com.br
  2. 2. Objetivos Responder as seguintes perguntas: I o que é um WebService? I o que é um Restful WebService? Alexandre Macedo Restful WebServices em Java www.k19.com.br
  3. 3. Objetivos Responder as seguintes perguntas: I o que é um WebService? I o que é um Restful WebService? Além disso vamos desenvolver uma pequena aplicação em Java demonstrando um WebService na prática. Alexandre Macedo Restful WebServices em Java www.k19.com.br
  4. 4. O que são WebServices? Características de WebServices: Alexandre Macedo Restful WebServices em Java www.k19.com.br
  5. 5. O que são WebServices? Características de WebServices: I é um sistema que utiliza o protocolo HTTP, do mesmo jeito que uma aplicação web, com requests e responses; I tipicamente utiliza XML ou outros formatos de arquivos, como JSON, para transferência de dados; I geralmente utilizado para integrar sistemas diferentes, ou disponibilizar uma série de serviços de uma aplicação, como o Twitter ou Flicker. Alexandre Macedo Restful WebServices em Java www.k19.com.br
  6. 6. O que são WebServices? Alexandre Macedo Restful WebServices em Java www.k19.com.br
  7. 7. O que são WebServices? Alexandre Macedo Restful WebServices em Java www.k19.com.br
  8. 8. Exemplos de uso API do Twitter I buscando os últimos tweets da @oliviamunn: http://api.twitter.com/1/statuses/user_timeline. xml?screen_name=oliviamunn API do Flicker I buscando imagens da Megan Fox: http://api.flickr.com/services/feeds/photos_ public.gne?tags=megan+fox&format=xml Alexandre Macedo Restful WebServices em Java www.k19.com.br
  9. 9. O que é REST? Definição “REpresentational State Transfer (REST) é um estilo de arquitetura de software para hipermídia distribuída, tal como a World Wide Web.” — Wikipedia Alexandre Macedo Restful WebServices em Java www.k19.com.br
  10. 10. O que é REST? Na prática, funciona como um conjunto de princípios que servem para definir um sistema, tais como: Alexandre Macedo Restful WebServices em Java www.k19.com.br
  11. 11. O que é REST? Na prática, funciona como um conjunto de princípios que servem para definir um sistema, tais como: I arquitetura cliente/servidor; I não armazenar estado; I uma interface única e bem definida, tais como os métodos do HTTP (GET, POST, PUT, DELETE); I entre outras. Alexandre Macedo Restful WebServices em Java www.k19.com.br
  12. 12. O que é um RESTful Web Service? É um web service que utiliza HTTP e segue os princípios REST. Em geral, possui 3 características principais: I uma URI base para o web service; I um formato de dados suportado pelo web service, em geral XML ou JSON; I um conjunto de operações suportados, utilizando os métodos HTTP. Alexandre Macedo Restful WebServices em Java www.k19.com.br
  13. 13. RESTful URIs A parte mais importante de um web service restful se refere à suas URIs. Em geral, temos uma URI base para identificar um recurso, e teremos operações que variam conforme o método HTTP utilizado. Essas operações seriam equivalentes às mesmas operações de CRUD. Alexandre Macedo Restful WebServices em Java www.k19.com.br
  14. 14. RESTful URIs Operações sobre uma coleção: http://exemplo.com/livros/ GET obtém a coleção POST adiciona um item à coleção PUT substitue a coleção DELETE remove a coleção Alexandre Macedo Restful WebServices em Java www.k19.com.br
  15. 15. RESTful URIs Operações sobre um item: http://exemplo.com/livros/45 GET obtém o item POST — PUT atualiza o item DELETE remove o item Alexandre Macedo Restful WebServices em Java www.k19.com.br
  16. 16. Implementando em Java I no Java EE, existe uma especificação chamada JAX-RS (JSR-311) que padroniza anotações para criar um web service seguindo os princípios REST, I aqui será utilizado o Jersey (na versão 1.3) que é a implementação de referência desenvolvida pela própria Sun. Alexandre Macedo Restful WebServices em Java www.k19.com.br
  17. 17. O que é necessário? Para ter o básico: I jersey-server.jar I jersey-core.jar I jsr311-api.jar I asm.jar Para criar um WebServer (opcional): I grizzly-servlet-webserver.jar Para ter suporte a JSON: I jersey-json.jar Alexandre Macedo Restful WebServices em Java www.k19.com.br
  18. 18. A Entidade @XmlRootElement public class Livro { private int id; private String titulo; private String autor; // getters and setters } Alexandre Macedo Restful WebServices em Java www.k19.com.br
  19. 19. Anotações O Jersey é baseado em diversas anotações. As principais são as seguintes: @Path indica qual a URI correspondente. @GET/@POST/@PUT/@DELETE indicam a qual verbo HTTP o método deve ser executado. @Produces indica o MIME-type da Response. @Consumes indica o MIME-type do conteúdo da Request. Alexandre Macedo Restful WebServices em Java www.k19.com.br
  20. 20. O WebResource @Path("livros") public class LivroResource { @GET @Produces("text/xml") public List<Livro> getLivros() { // busca livros na base de dados, ou outro lugar return livros; } @POST @Consumes("text/xml") @Produces("text/plain") public String adicionaLivro(Livro livro) // adiciona o livro na base de dados return "Livro adicionado."; } Alexandre Macedo Restful WebServices em Java www.k19.com.br
  21. 21. O WebService public class Main { public static void main(String[] args) throws IllegalArgumentException, IOException { final String baseUri = "http://localhost:9999/"; final Map<String, String> initParams = new HashMap<String, String>(); initParams.put( "com.sun.jersey.config.property.packages", "resources"); System.out.println("Iniciando o Grizzly..."); Alexandre Macedo Restful WebServices em Java www.k19.com.br
  22. 22. Continuando... SelectorThread threadSelector = GrizzlyWebContainerFactory.create( baseUri, initParams); System.out.println("Aperte enter para encerrar..."); System.in.read(); threadSelector.stopEndpoint(); System.out.println("Encerrado."); System.exit(0); } } Alexandre Macedo Restful WebServices em Java www.k19.com.br
  23. 23. Testando o WebService I no exemplo anterior, basta acessar a URI a partir de qualquer navegador, que será mostrado um XML. Alexandre Macedo Restful WebServices em Java www.k19.com.br
  24. 24. Testando o WebService I no exemplo anterior, basta acessar a URI a partir de qualquer navegador, que será mostrado um XML. I às vezes, iremos necessitar de uma ferramenta mais elaborada para configurar a requisição (PUT, POST ou DELETE) ou para enviar dados no formato XML. No Linux, podemos utilizar o comando curl para fazer diferentes tipos de requisições. curl http://localhost:9999/livros Alexandre Macedo Restful WebServices em Java www.k19.com.br
  25. 25. Testando o WebService I no exemplo anterior, basta acessar a URI a partir de qualquer navegador, que será mostrado um XML. I às vezes, iremos necessitar de uma ferramenta mais elaborada para configurar a requisição (PUT, POST ou DELETE) ou para enviar dados no formato XML. No Linux, podemos utilizar o comando curl para fazer diferentes tipos de requisições. curl http://localhost:9999/livros I outra opção, para quem utiliza Firefox, é o add-on Poster, que também permite configurar as requisições antes de serem enviadas. Alexandre Macedo Restful WebServices em Java www.k19.com.br
  26. 26. Exemplo com JSON Um livro em XML: <livro> <autor>Orwell</autor> <titulo>1984</titulo> <id>42</id> </livro> Alexandre Macedo Restful WebServices em Java www.k19.com.br
  27. 27. Exemplo com JSON Um livro em XML: <livro> <autor>Orwell</autor> <titulo>1984</titulo> <id>42</id> </livro> Um livro em JSON: { "autor": "George Orwell", "titulo": "1984", "id": 42 } Alexandre Macedo Restful WebServices em Java www.k19.com.br
  28. 28. Exemplo com JSON Um livro em XML: <livro> <autor>Orwell</autor> <titulo>1984</titulo> <id>42</id> </livro> Um livro em JSON: { "autor": "George Orwell", "titulo": "1984", "id": 42 } A vantagem do JSON sobre o XML ocorre principalmente nas requisições em AJAX, pois não existe um parser nativo para XML em Javascript. Desse modo, requisições em AJAX que utilizam JSON são mais simples. Alexandre Macedo Restful WebServices em Java www.k19.com.br
  29. 29. Exemplo com JSON @GET @Produces("application/json") public List<Livro> getLivrosEmJson() { // busca livros na base de dados return livros; } Alexandre Macedo Restful WebServices em Java www.k19.com.br
  30. 30. Exemplo com JSON @GET @Produces("application/json") public List<Livro> getLivrosEmJson() { // busca livros na base de dados return livros; } A URI é a mesma, o que muda é o cabeçalho da requisição, que deve incluir um campo "Accept:application/json". Veja o exemplo com curl: curl -H "Accept:application/json" http://localhost:9999/livros Alexandre Macedo Restful WebServices em Java www.k19.com.br
  31. 31. Conclusão O Jersey é simples de usar e altamente customizável, se tornando uma opção recomendada para criar APIs baseadas em URLs. Alexandre Macedo Restful WebServices em Java www.k19.com.br
  32. 32. Obrigado! Dúvidas ou sugestões: contato@k19.com.br Para acompanhar as novidades confira o site: www.k19.com.br Ou siga-nos no Twitter: @k19treinamentos

×