5. Casos de Uso
• Simplificação de Serviços
• Web (somente Web)?
• Defina suasemantica de
respostas (padrões XML, JSON, SEU)?
6.
7.
8. Arquiteturas baseadas em
REST
• Orientada de recursos (URIs)
• Orientado a Representações
• Sem Estado (HTTP)(*)
• Hypermedia (Design)
• (*) Gambis
9. URI (Recursos)
• URL seus recursos de serviços
http://voos.com.br/saindo/GRU/SDU/amanha
Serviço de Consulta Voos: Saindo de Guarulhos, chegando
em Stos Dummont
– http://voos.com.br/chegando/agora
– http://voos.com.br/status/voo/JJ1224
• “Steping Stones”/Linkability/Hypermedia
• QueryStrings: Famosos ?
10. REST
• Pense em
simplicidade
• Não rodeie, por mais
que você tente você
não vai resolver tudo!
• Lembrese:
• Simples != Medíocre
11. 4 Métodos para tudo resolve?
• Http
– GET
– POST
– PUT
– DELETE
12. Não esqueça que você já fez
mágica também ...
• SQL
– Select, Insert, Delete, Update
• JMS
– Send, Receive
• Windows
– Reboot
13. Design Rest
• Get – Leitura, idempotente, seguro
• Put – Escrita (insere/atualiza), idempontente
• Delete – Remover, idempontente
• Post – Não idempotente
14. Orientado a Representação
• O Dado pode ter representações
– O cliente e servidor podem “negociar” um
formato aceitável entre os dois.
Cliente Server
“Eu gostaria” “Pra você eu tenho”
Accept (MIME type) Content-type
Accept-Language header (MIME type)
Accept-Encoding
15. REST e Java
• Padrão JCP: JSR 311 - JAX-RS
• Parte do JEE6
• Implementações Padrões de Mercado
– Jersey (Sun/Oracle)
– RestEasy (JBoss/RedHat)
16. REST em Java
@Path("/consulta")
public class Consulta {
@GET
@Path("/sessoes")
public String getSessoes() {
//logica
}
http://servidor:8080/minhaapp/consultas/sessoes
}
17. REST em Java
@GET
@Path("/sessoes/{sessao}")
public String getSessaoByID(@PathParam("sessao") String sessao) {
// procura pela sessao
}
@PUT
@Path("/sessoes/{sessao}/reservar")
public void addBook(@PathParam("sessao") String sessao,
@QueryParam("email") String email) {
//grava no banco uma reserva
}
http://servidor:8080/minhaapp/evento/sessoes/819
.. minhaapp/fisl/sessoes/819/reservar?email=edgar@redhat.com
}
18. Visibilidade de Parametros
• @QueryParam – Query string
• @HeaderParam – H T T P header
• @CookieParam – H T T P c o o k ie
• @FormParam – Objetos de Forms
• @PathParam – Caminho U R I
• @MatrixParam – Lista de URIs
•
20. Expressões regulares nas URIs
@Path("/servico)
public class MeuServico {
@GET
@Path("{var:.*}/algo")
public String get() {...}
GET /servico/algo
GET /servico/antes/algo
GET /servico/no/meio/de/algo
23. REST Assincrono / COMET
import org.jboss.resteasy.annotations.Suspend;
import org.jboss.resteasy.spi.AsynchronousResponse;
@Path("/")
public class SimpleResource
{
@GET
@Path("basic")
@Produces("text/plain")
public void getBasic(final @Suspend(10000) AsynchronousResponse response) throws Exception
{
Thread t = new Thread()
{
@Override
public void run()
{
try
{
Response jaxrs = Response.ok("basic").type(MediaType.TEXT_PLAIN).build();
response.setResponse(jaxrs);
}
catch (Exception e)
{
e.printStackTrace();
}
}
};
t.start();
}
}
24. Api JavaScript
@Path("orders")
public interface Orders { // JavaScript
@Path("{id}")
@GET var order =
public String Orders.getOrder({id: 23});
getOrder(@PathParam("id") String id){
return "Hello "+id;
}
}
// Uso do Objeto REST
// Change the base URL used by the API:
REST.apiURL = "http://api.service.com";
// log everything in a div element
REST.log = function(text){
jQuery("#log-div").append(text);
};
25. REST é um ótimo modelo de integração,
quanto empregado de forma simples e
sem burocracia, melhor ainda.
Você ainda pode precisar de
SOAP,WSDLs, ou seja: WS Tradicionais,
mas REST é uma ótima alternativa
34. CoreRest
• Um serviço de middleware que roda no
Google AppEngine que permite a
criação e execução de Serviços
baseados em REST usando linguagens
dinâmicas dentro da JVM e ambiente
do Google.
35. CoreRest
Yahoo Dados Públicos Twitter Facebook WebServices
CoreRest
Services
Web Android IPhone JavaFX