32
Restful WebServices em Java Alexandre Macedo K19 Treinamentos 15 de novembro de 2010 Alexandre Macedo Restful WebServices em Java www.k19.com.br

WebService Restful em Java

Embed Size (px)

DESCRIPTION

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

Citation preview

Page 1: WebService Restful em Java

Restful WebServices em Java

Alexandre Macedo

K19 Treinamentos

15 de novembro de 2010

Alexandre Macedo Restful WebServices em Java www.k19.com.br

Page 2: WebService Restful em Java

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 Javademonstrando um WebService na prática.

Alexandre Macedo Restful WebServices em Java www.k19.com.br

Page 3: WebService Restful em Java

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 Javademonstrando um WebService na prática.

Alexandre Macedo Restful WebServices em Java www.k19.com.br

Page 4: WebService Restful em Java

O que são WebServices?

Características de WebServices:

I é um sistema que utiliza o protocolo HTTP, do mesmo jeito que umaaplicaçã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 disponibilizaruma série de serviços de uma aplicação, como o Twitter ou Flicker.

Alexandre Macedo Restful WebServices em Java www.k19.com.br

Page 5: WebService Restful em Java

O que são WebServices?

Características de WebServices:

I é um sistema que utiliza o protocolo HTTP, do mesmo jeito que umaaplicaçã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 disponibilizaruma série de serviços de uma aplicação, como o Twitter ou Flicker.

Alexandre Macedo Restful WebServices em Java www.k19.com.br

Page 6: WebService Restful em Java

O que são WebServices?

Alexandre Macedo Restful WebServices em Java www.k19.com.br

Page 7: WebService Restful em Java

O que são WebServices?

Alexandre Macedo Restful WebServices em Java www.k19.com.br

Page 8: WebService Restful em Java

Exemplos de uso

API do TwitterI buscando os últimos tweets da @oliviamunn:http://api.twitter.com/1/statuses/user_timeline.xml?screen_name=oliviamunn

API do FlickerI 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

Page 9: WebService Restful em Java

O que é REST?

Definição“REpresentational State Transfer (REST) é um estilo de arquitetura desoftware para hipermídia distribuída, tal como a World Wide Web.”

— Wikipedia

Alexandre Macedo Restful WebServices em Java www.k19.com.br

Page 10: WebService Restful em Java

O que é REST?

Na prática, funciona como um conjunto de princípios que servem paradefinir 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

Page 11: WebService Restful em Java

O que é REST?

Na prática, funciona como um conjunto de princípios que servem paradefinir 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

Page 12: WebService Restful em Java

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

Page 13: WebService Restful em Java

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 teremosoperações que variam conforme o método HTTP utilizado. Essas operaçõesseriam equivalentes às mesmas operações de CRUD.

Alexandre Macedo Restful WebServices em Java www.k19.com.br

Page 14: WebService Restful em Java

RESTful URIs

Operações sobre uma coleção:

http://exemplo.com/livros/

GET obtém a coleçãoPOST adiciona um item à coleçãoPUT substitue a coleção

DELETE remove a coleção

Alexandre Macedo Restful WebServices em Java www.k19.com.br

Page 15: WebService Restful em Java

RESTful URIs

Operações sobre um item:

http://exemplo.com/livros/45

GET obtém o itemPOST —PUT atualiza o item

DELETE remove o item

Alexandre Macedo Restful WebServices em Java www.k19.com.br

Page 16: WebService Restful em Java

Implementando em Java

I no Java EE, existe uma especificação chamada JAX-RS (JSR-311) quepadroniza anotações para criar um web service seguindo os princípiosREST,

I aqui será utilizado o Jersey (na versão 1.3) que é a implementação dereferência desenvolvida pela própria Sun.

Alexandre Macedo Restful WebServices em Java www.k19.com.br

Page 17: WebService Restful em Java

O que é necessário?

Para ter o básico:I jersey-server.jarI jersey-core.jarI jsr311-api.jarI 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

Page 18: WebService Restful em Java

A Entidade

@XmlRootElementpublic class Livro {

private int id;

private String titulo;

private String autor;

// getters and setters}

Alexandre Macedo Restful WebServices em Java www.k19.com.br

Page 19: WebService Restful em Java

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

Page 20: WebService Restful em Java

O WebResource

@Path("livros")public class LivroResource {

@GET@Produces("text/xml")public List<Livro> getLivros() {

// busca livros na base de dados, ou outro lugarreturn livros;

}

@POST@Consumes("text/xml")@Produces("text/plain")public String adicionaLivro(Livro livro)

// adiciona o livro na base de dadosreturn "Livro adicionado.";

}

Alexandre Macedo Restful WebServices em Java www.k19.com.br

Page 21: WebService Restful em Java

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

Page 22: WebService Restful em Java

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

Page 23: WebService Restful em Java

Testando o WebService

I no exemplo anterior, basta acessar a URI a partir de qualquernavegador, que será mostrado um XML.

I às vezes, iremos necessitar de uma ferramenta mais elaborada paraconfigurar a requisição (PUT, POST ou DELETE) ou para enviardados no formato XML. No Linux, podemos utilizar o comando curlpara fazer diferentes tipos de requisições.

curl http://localhost:9999/livros

I outra opção, para quem utiliza Firefox, é o add-on Poster, quetambém permite configurar as requisições antes de serem enviadas.

Alexandre Macedo Restful WebServices em Java www.k19.com.br

Page 24: WebService Restful em Java

Testando o WebService

I no exemplo anterior, basta acessar a URI a partir de qualquernavegador, que será mostrado um XML.

I às vezes, iremos necessitar de uma ferramenta mais elaborada paraconfigurar a requisição (PUT, POST ou DELETE) ou para enviardados no formato XML. No Linux, podemos utilizar o comando curlpara fazer diferentes tipos de requisições.

curl http://localhost:9999/livros

I outra opção, para quem utiliza Firefox, é o add-on Poster, quetambém permite configurar as requisições antes de serem enviadas.

Alexandre Macedo Restful WebServices em Java www.k19.com.br

Page 25: WebService Restful em Java

Testando o WebService

I no exemplo anterior, basta acessar a URI a partir de qualquernavegador, que será mostrado um XML.

I às vezes, iremos necessitar de uma ferramenta mais elaborada paraconfigurar a requisição (PUT, POST ou DELETE) ou para enviardados no formato XML. No Linux, podemos utilizar o comando curlpara fazer diferentes tipos de requisições.

curl http://localhost:9999/livros

I outra opção, para quem utiliza Firefox, é o add-on Poster, quetambém permite configurar as requisições antes de serem enviadas.

Alexandre Macedo Restful WebServices em Java www.k19.com.br

Page 26: WebService Restful em Java

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çõesem AJAX, pois não existe um parser nativo para XML em Javascript. Dessemodo, requisições em AJAX que utilizam JSON são mais simples.

Alexandre Macedo Restful WebServices em Java www.k19.com.br

Page 27: WebService Restful em Java

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çõesem AJAX, pois não existe um parser nativo para XML em Javascript. Dessemodo, requisições em AJAX que utilizam JSON são mais simples.

Alexandre Macedo Restful WebServices em Java www.k19.com.br

Page 28: WebService Restful em Java

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çõesem AJAX, pois não existe um parser nativo para XML em Javascript. Dessemodo, requisições em AJAX que utilizam JSON são mais simples.

Alexandre Macedo Restful WebServices em Java www.k19.com.br

Page 29: WebService Restful em Java

Exemplo com JSON

@GET@Produces("application/json")public List<Livro> getLivrosEmJson() {

// busca livros na base de dadosreturn livros;

}

A URI é a mesma, o que muda é o cabeçalho da requisição, que deve incluirum 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

Page 30: WebService Restful em Java

Exemplo com JSON

@GET@Produces("application/json")public List<Livro> getLivrosEmJson() {

// busca livros na base de dadosreturn livros;

}

A URI é a mesma, o que muda é o cabeçalho da requisição, que deve incluirum 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

Page 31: WebService Restful em Java

Conclusão

O Jersey é simples de usar e altamente customizável, se tornando umaopção recomendada para criar APIs baseadas em URLs.

Alexandre Macedo Restful WebServices em Java www.k19.com.br

Page 32: WebService Restful em Java

Obrigado!

Dúvidas ou sugestões: [email protected] acompanhar as novidades confira o site: www.k19.com.br

Ou siga-nos no Twitter: @k19treinamentos