O documento discute o desenvolvimento de APIs RESTful com Java. Aborda os principais conceitos de REST e como implementá-los usando JAX-RS, incluindo anotações para mapear URLs, verbos HTTP e formatos de dados. Também fornece um exemplo prático de CRUD de celulares usando essa abordagem.
2. 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
3. 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
5. 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?)
6. 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
8. 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
9. 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
10. 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.
11. 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
12. 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
13. ● 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...
14. 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/
15. 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
16. 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:
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 ID
POST /celular XML e JSON cria novo celular
Sem código aqui, vamos para a IDE!
17. 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