Download - Rest web services com Java
![Page 1: Rest web services com Java](https://reader033.vdocuments.us/reader033/viewer/2022052619/555ce0cad8b42a4f2b8b5776/html5/thumbnails/1.jpg)
REST Web Services com Java
![Page 2: Rest web services com Java](https://reader033.vdocuments.us/reader033/viewer/2022052619/555ce0cad8b42a4f2b8b5776/html5/thumbnails/2.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022052619/555ce0cad8b42a4f2b8b5776/html5/thumbnails/3.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022052619/555ce0cad8b42a4f2b8b5776/html5/thumbnails/4.jpg)
http://www.arcwebservices.com/arcwebonline/services/soap_samples.htm?
![Page 5: Rest web services com Java](https://reader033.vdocuments.us/reader033/viewer/2022052619/555ce0cad8b42a4f2b8b5776/html5/thumbnails/5.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022052619/555ce0cad8b42a4f2b8b5776/html5/thumbnails/6.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022052619/555ce0cad8b42a4f2b8b5776/html5/thumbnails/7.jpg)
Uma requisição HTTP
![Page 8: Rest web services com Java](https://reader033.vdocuments.us/reader033/viewer/2022052619/555ce0cad8b42a4f2b8b5776/html5/thumbnails/8.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022052619/555ce0cad8b42a4f2b8b5776/html5/thumbnails/9.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022052619/555ce0cad8b42a4f2b8b5776/html5/thumbnails/10.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022052619/555ce0cad8b42a4f2b8b5776/html5/thumbnails/11.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022052619/555ce0cad8b42a4f2b8b5776/html5/thumbnails/12.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022052619/555ce0cad8b42a4f2b8b5776/html5/thumbnails/13.jpg)
● 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](https://reader033.vdocuments.us/reader033/viewer/2022052619/555ce0cad8b42a4f2b8b5776/html5/thumbnails/14.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022052619/555ce0cad8b42a4f2b8b5776/html5/thumbnails/15.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022052619/555ce0cad8b42a4f2b8b5776/html5/thumbnails/16.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022052619/555ce0cad8b42a4f2b8b5776/html5/thumbnails/17.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022052619/555ce0cad8b42a4f2b8b5776/html5/thumbnails/18.jpg)
Perguntas?
![Page 19: Rest web services com Java](https://reader033.vdocuments.us/reader033/viewer/2022052619/555ce0cad8b42a4f2b8b5776/html5/thumbnails/19.jpg)
Brindes
![Page 20: Rest web services com Java](https://reader033.vdocuments.us/reader033/viewer/2022052619/555ce0cad8b42a4f2b8b5776/html5/thumbnails/20.jpg)
Muito Obrigado!