Upload
jesuinopower
View
2.031
Download
4
Tags:
Embed Size (px)
Citation preview
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
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
http://www.arcwebservices.com/arcwebonline/services/soap_samples.htm?
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?)
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
Uma requisição HTTP
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
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
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.
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
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
● 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...
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/
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
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
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
Perguntas?
Brindes
Muito Obrigado!