rest web services com java

18
REST Web Services com Java

Upload: jugvale

Post on 22-Apr-2015

3.613 views

Category:

Technology


5 download

DESCRIPTION

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)

TRANSCRIPT

Page 1: REST Web Services com Java

REST Web Services com Java

Page 2: REST Web Services com Java

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

Page 3: REST Web Services com Java

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

Page 4: REST Web Services com Java

http://www.arcwebservices.com/arcwebonline/services/soap_samples.htm?

Page 5: REST Web Services com Java

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?)

Page 6: REST Web Services com Java

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

Page 7: REST Web Services com Java

Uma requisição HTTP

Page 8: REST Web Services com Java

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

Page 9: REST Web Services com Java

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

Page 10: REST Web Services com Java

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.

Page 11: REST Web Services com Java

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

Page 12: REST Web Services com Java

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

Page 13: REST Web Services com Java

● 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...

Page 14: REST Web Services com Java

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/

Page 15: REST Web Services com Java

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

Page 16: REST Web Services com Java

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

Page 17: REST Web Services com Java

Perguntas?

Page 18: REST Web Services com Java

Muito Obrigado!