RESTIN
PEACEcom
JBOSS RESTEasy
• Quem sou eu?
• Conceitos
• JAX-RS
• Hands on!
• Dúvidas
• Referências
O que vamos fazer hoje, Cérebro?
• Graduado em Sistemas de Informação
• Consultor – Powerlogic S.A.
• Entuasiasta de software livre!
Quem sou eu?
• Aplicações que se comunicam sobre HTTP
• Universo de possibilidades
– Integração entre diferentes plataformas e aplicações
– Interoperabilidade e extensibilidade
O que são web-services?
• “Big” web-services
– JAX-WS (SOAP, WSDL)
• RESTFul web-services
– JAX-RS
Tipos de web-services
@WebService
public class CadastraFuncionarioWS {
@WebMethod
public FuncionarioEntity cadastrar(@WebParam( name="pessoa")Pessoa pessoa) {
FuncionarioEntity funcionario = new FuncionarioEntity();
try {
funcionario.setNome(pessoa.getNome());
funcionario.setCpf(pessoa.getDocumento());
IAppDAO dao = AppPersistenciaLocator.getInstance().getDaoPadrao();
funcionario.setId(dao.inclui(funcionario));
dao.commit();
} catch (Exception e) {
...
}
return funcionario;
}
}
JAX-WS
Cliente Servidor
JAX-WS runtime JAX-WS runtimeMensagem SOAP
Troca de mensagens JAX-WS
• Representational State Transfer
– Estilo de arquitetura onde os dados e as funcionalidades são considerados recursos quepor sua vez são acessados via URIs (links)
O que é REST?
• Representational State Transfer
O que é REST?
Operação Método HTTP
Create POST
Read GET
Update PUT
Delete DELETE
@Path("/plc")
public class PlcBaseRest {
private IPlcFacade iFacadePlc;
@GET
@Path("/listaac/{useCase}/{propriedade}")
@Produces("text/plain; charset=ISO-8859-1")
public String recuperaLista(@PathParam("useCase") String useCase,
@PathParam("propriedade") String propriedade,
@QueryParam("q") String q,
@QueryParam("limit") @DefaultValue("10") int limit)
throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
List<PlcBaseVO> lista = null;
try {
IPlcFacade facade = getServiceFacade();
(...)
lista = recuperaLista(propriedade, q, limit, facade, context, classe);
} catch (PlcException e) {
(...)
}
return PlcRendererHelper.getInstance().montaSaidaXMLPipe(lista, propriedade);
}
}
JAX-RS
Cliente Servidor
Cliente HTTP Servidor HTTPMensagem
“Plana”
Troca de mensagens JAX-RS
• Arquitetura simples, leve, escalável, com altaperformance e pronta!
• Sem a complexidade dos web-services tradicionais (WS-*)
• Mais integrados do que web-services quefazem uso de SOAP
Vantagens da arquitetura REST
Web-Oriented Architecture
• Quando não precisar manter o estado(stateless)
• Estrutura de caching para performance
• Produtor e consumidor no mesmo contexto
Quando usar REST?
• Pouca largura de banda ou dispositivos com capacidade de processamento menor
• Fácil configuração para sites já existentes
Quando usar REST?
• JSR 311 – Java API for RESTful Web Services
• http://jsr311.dev.java.net/
• Implementação de referência: Jersey (SUN)
• Outras implementações:– JBOSS RESTEasy– Apache CXF– Restlet– Spring 3.0
Outras informações…
• A partir de uma classe qualquer…
public class MeuPrimeiroRest {
public String recuperaNomeEvento() {
return “Java Day”;
}
}
Hands on!
• Adicione uma anotação @Path:
@Path(“/servicos”)
public class MeuPrimeiroRest {
public String recuperaNomeEvento() {
return “Java Day”;
}
}
Hands on!
• Adicione o método HTTP a ser utilizado:
@Path(“/servicos”)
public class MeuPrimeiroRest {
@GET
@Path(“/recuperaNome”)
public String recuperaNomeEvento() {
return “Java Day”;
}
}
Hands on!
• Outros exemplos
– recuperando informações do banco de dados
– utilizando outros métodos HTTP (via RESTClient)
Hands on!
@HEAD
@QueryParam
@Consumes
@Produces
@Provider
…
Para exercitar depois…
Dúvidas…
Referências
R. Fielding. Architectural Styles and the Design of Network-based Software Architectures. Ph.d dissertation, University of California, Irvine, 2000. http://roy.gbiv.com/pubs/dissertation/top.htm
REST Wiki. Web site.http://rest.blueoxen.net/cgi-bin/wiki.pl
Representational State Transfer. Web site, Wikipedia.http://en.wikipedia.org/wiki/Representational_State_Transfer
Arthur Cesar Oreana
[email protected]/arthur_oreana