Rest web services com Java

20
REST Web Services com Java

Transcript of Rest web services com Java

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

Programar!

● Vamos fazer um CRUD de um sistema fictício de celulares ● Nosso cliente já tem a base e o acesso a base de dados

prontos, agora quer uma API RESTful● Nossas URIs:

Sem código aqui, vamos para a IDE!

Método URI Formato Faz o que?

GET /celular XML e JSON recupera todos celulares

GET /celular/{id} XML e JSON recupera um celular de acordo com o ID

DELETE /celular/{id} XML e JSON apaga celular de acordo com IDPOST /celular XML e JSON cria novo celular

Page 17: 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 18: Rest web services com Java

Perguntas?

Page 19: Rest web services com Java

Brindes

Page 20: Rest web services com Java

Muito Obrigado!