Este documento fornece uma introdução sobre serviços RESTful e mashups. Resume as seguintes informações essenciais:
1) Apresenta os conceitos fundamentais de arquitetura REST e como serviços RESTful funcionam;
2) Discutem a API JAX-RS para construir serviços RESTful em Java;
3) Explicam como consumir e testar serviços RESTful usando ferramentas como RESTClient, cURL e bibliotecas JavaScript;
4) Introduzem o conceito de mashups e como agregam conteúdo de v
1. De Web Services RESTFul a
aplicações Mashups
Wagner Roberto dos Santos
Arquiteto Software/Scrum Master
2. Apresentação
• Arquiteto Java EE / Scrum Master
• Lead Editor da Queue Arquitetura do Portal InfoQ
Brasil (http://infoq.com/br).
• Participação nos projetos de tradução e teste do
NetBeans.
• Palestrante de eventos como Just Java, Sun Tech
Days, Campus Party.
• Premiações em competições de tecnologia .
• Autor de artigos para as revistas Mundo Java e
Java Magazine.
• Participação em diversos projetos Open Source.
• Certificações: SCJA, SCJP, SCSNI, SCJWSD,
SCBCD, SCEA (I), CSM.
• Mantém o blog http://netfeijao.blogspot.com/
3. Agenda
O que é REST?
JAX-RS – Java API for RESTful Web
Services
Consumindo e testando serviços REST
O que são Mashups?
Aprendendo a partir de Exemplos
Ferramentas
Criando suas próprias APIs
Conclusão
4. Afinal, o que é REST?
REST = REpresentational State Transfer
REST ≠ Tecnologia
REST ≠ Padrão
REST = Estilo de Arquitetura
Estilo de arquitetura de software
para sistemas hipermídia distribuídos...
5. Afinal, o que é REST?
Como por exemplo ....
... a própria WEB.
6. O Pai da Criança
Autor da especificação HTTP.
Em 2000, apresentou como
tese para seu doutorado
uma nova forma de integrar
sistemas multimídia,
chamada REST.’
Doutor Roy Fielding.
10. Afinal, O que é REST?
Media Types
atom+xml
xhtml+xml
mpeg4-generic
jpeg
html
3gpp-tt
form-data
11. Afinal, O que é REST?
Recursos e Representações
URI – Uniform Resource Identifier
Identificador único de um recurso físico ou abstrato.
URN: Uniform Resource Name
Uma URI pode ser
classificada como:
URL: Uniform Resource Locator
12. Afinal, O que é REST?
URI – Uniform Resource Identifier
Exemplos
ftp://ftp.is.co.za/rfc/rfc1808.txt
http://www.ietf.org/rfc/rfc2396.txt
ldap://[2001:db8::7]/c=GB?objectClass?one
mailto:John.Doe@example.com
news:comp.infosystems.www.servers.unix
tel:+1-816-555-1212
telnet://192.0.2.16:80/
urn:oasis:names:specification:docbook:dtd:xml:4.1.2
13. Afinal, O que é REST?
O recurso é exposto pela URI
http://www.justjava.com.br/palestrantes/wrsantos
http://www.justjava.com.br/palestras/54811
Nome da Coleção de Recursos
Chave Primária
Definição de como URI mapeia o
recurso
14. Afinal, O que é REST?
Representações
em diversos sabores..
XML
JSON
(X)HTML
15. Afinal, O que é REST?
Representações
Negociação de conteúdo.
HTTP Request
Host: justjava.com.br
XML User-Agent: Mozilla/5.0
Accept: application/json, application/xml
JSON Accept-Language: pt-br,pt
Accept-Encoding: gzip,deflate justjava.com.br
(X)HTML Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Proxy-Connection: keep-alive
Referer: http://justjava.com.br/
http://justjava.com.br/palestrantes/wrsantos
Servidor Web
16. Afinal, O que é REST?
Métodos HTTP
GET Solicita que o servidor envie um recurso.
PUT O inverso do GET. Realiza operações de escrita
no servidor.
DELETE Solicita a exclusão de um recurso no servidor.
POST Foi projetado para envio de dados de input, por
exemplo, os dados de um formulário.
HEAD Mesmo comportamento que o método GET,
porém o servidor retorna apenas o cabeçalho da
resposta.
17. Afinal, O que é REST?
Então REST é..
REpresentational State Transfer
Recursos são identificados por URIs
Métodos (verbos) HTTP para manipular os Recursos
Representação é como você vê o Estado do Recurso.
18. Afinal, O que é REST?
Request justjava.com.br
Exemplo: Host: justjava.com.br
Accept: application/xml
GET http://www.justjava.com.br/palestrantes/wrsantos
Método (Verbo) Recurso
RESPONSE
HTTP/ 1.1 200 OK
Content-Type: application/xml;
charset=UTF-8
Date: Mon, 14 Sep 2009 15:09:37 GMT
Server: GFE/2.0
Estado de <?xml version="1.0" encoding="UTF-8"?>
Transferência <palestrante num_cpf="123456789">
<nome>Wagner</nome>
<idade>29</idade> Representação
<statusCivil>Casado</statusCivil>
</ palestrante >
19. Afinal, O que é REST?
Códigos de Status
Range Descrição
100-101 Informacional.
200-206 Sucesso.
300-305 Redirecionamento.
400-415 Erro do Cliente.
500-505 Erro do Servidor.
20. JAX –RS - Java API for RESTful Web Services
JSR-311
21. JAX - RS
Objetivos
Definida pela JSR-311.
Torna fácil construir código Java como um serviço
REST
Uma alternativa aos Web Services SOAP com
JAX-WS
Integração com WebBeans, EJB e JPA.
23. JAX - RS
Trabalhando com Recursos
Anotação @Path
@Path("/palestrantes/{nome}")
public class PalestranteREST{...}
“/palestrantes/” é o prefixo da URI que
a classe irá atender e {nome} é valor do
parâmetro nome.
24. JAX - RS
Acessando os Recursos
@GET
@POST
@PUT
@DELETE
@HEAD
@HttpMethod(“MétodoCustomizado”)
e devem ser atribuídas a métodos públicos
25. JAX - RS
Definindo as Representações
Para tratamento de Request
@Consumes
Exemplo:
@PUT
@Consumes("application/xml","application/json")
@Path("/autores/")
public Response putPessoa(PessoaBinding pessoa) { ... }
.
26. JAX - RS
Definindo as Representações
Para tratamento de Response
@Produces
Exemplo:
@GET
@Produces({"application/xml", "application/json"})
public PessoaConverter getPessoa(@QueryParam("CPF")
String numCPF) {
// Retorna representação em XML ou JSON
}
27. JAX - RS
Extraindo valores da URI na Requisição
@PathParam Extrai um parâmetro informado no
caminho da URI.
@QueryParam Extrai um parâmetro informado no
caminho da URI.
@FormParam Extrai um parâmetro de formulário no
body da requisição.
@MatrixParam Extrai os valores (chave/valor) da matriz
de parâmetros da URI.
@CookieParam Extrai os valores de cookies vinculados a
sessão.
@HeaderParam Extrai dados do cabeçalho de uma
requisição HTTP.
28. JAX - RS
Extraindo valores da URI na Requisição
Exemplo:
@Path("/Palestrantes/")
public class EventoResource {
@GET
@Produces("application/xml")
@Path("/autores/{nomeAutor}/")
public PalestranteBinding getPessoa(@PathParam(“login") String loginName,
@QueryParam(“tipo") int macroTema,
@HeaderParam("CPF") String CPF,
@MatrixParam(“ano") String anoEvento) {
return new PalestranteBinding(loginName, macroTema, CPF, anoEvento);
}
}
30. JAX - RS
Interface uniforme para Response
@PUT
@Consumes("application/xml")
@Path("/Palestrantes/update/")
public Response putPalestrante(PalestranteBinding pessoa){
String retorno = "<html><body><h1>Bem vindo "+pessoa.
getNome()+"</h1></body></html>";
URI uri = // Pega a URI;
return Response.created(uri).
status(Response.Status.ACCEPTED).
entity(retorno).
type(MediaType.TEXT_HTML).
build();
}
31. JAX - RS
Tratando Exceções
A especificação define a exceção
WebApplicationException que extende
Runtime.
• Pode ser lançada por um método de recurso.
• Permite abortar a execução do serviço.
32. JAX - RS
Tratando Exceções
@GET
@Produces("application/xml")
@Path("/autores/{palestrante}/{idade: [0-9]+}/")
public PalestranteBinding getPalestrante(
@PathParam(“palestrante") String name,
@PathParam("idade") int idade,
@HeaderParam("CPF") String numCPF) {
if (idade <= 0 || idade > 120){
throw new WebApplicationException(Response.status(412).
entity("Idade inválida!").
build());
}
return new PalestranteBinding(name, idade, numCPF);
}
47. Mashups
Formato de Dados
XML
Continua sendo importante.
Não é fácil fazer parsing no Browser.
RSS/ATOM
Mais do que notícias e Blogs
Troca de Dados
JSON
Formato Textual e Estrutura Simples
Mais fácil que XML
Uma linha: var oi = eval(codigo_JSON);
Útil para APIs públicas
48. Mashups
Overview em Mashups Client-Side
Tecnologia Centrada no Cliente
Prós
Facilidades em adicionar funcionalidades exportada
Não precisa de um componente server-side
Não ocorre latência de acesso a rede duas vezes
Não precisa de um plugin customizado para o Navegador
Contras
Devo confiar no fornecedor do serviço
API pode mudar.
49. Mashups
Componentes de uma biblioteca
Client-Side
Criação de um serviço server-side.
Criação de um arquivo JScript para o client-side
Posso criar um arquivo CSS para o cliente-side
Posso documentar a API
Posso criar exemplos de demonstração
52. Mashups
Por que não
utilizar
Web Services
SOAP ou WS* ?
Veja: http://netfeijao.blogspot.com/2009/05/web-services-ws-vs-rest.html
53. Mashups
SOAP e WS-*
Pontos Positivos Pontos Negativos
•Diversas ferramentas de desenvolvimento. •Diversos padrões.
•Tipagem forte e um vocabulário bem •Complexidade dos padrões.
definido. •Performance.
•Quando utilizado sobre HTTP, dificilmente é •Mensagens podem ficar muito
bloqueado por proxies e firewalls. extensas, por serem codificadas
•Permite o uso de diferentes tipos de com XML
protocolos.
•Plataforma independente.
•Linguagem independente
54. Mashups
REST
Pontos Positivos Pontos Negativos
•Simplicidade, interface imutável, agnóstica. •Faltam padrões.
•Interação assíncrona, não possui estado. •Falta de segurança.
•Facilidade de adoção, pois não requer uma •Não é indicado para trafegar
grande infra-estrutura, menos um middleware grandes volumes de parâmetros
WS-* ou camada adicional. via URI.
•Utiliza a web como meio de transporte, •Em muitas empresas apenas os
sendo assim uma carga baixa na rede. métodos GET e POST do HTTP
•Utilizada por grande parte das aplicações são liberados em proxies e
Web 2.0. (Google, Flickr, Amazon, etc..). firewalls.
Portanto, ótimo para mashups. •Não há mecanismos de
transação.
•Curva de aprendizagem baixa.
•Não existe um padrão como
UDDI.
62. De Web Services REST aos Mashups
OBRIGADO
Contatos
Email: wrsconsulting@gmail.com
Blog: http://netfeijao.blogspot.com
Twitter: http://twitter.com/wrsantos