Você está na página 1de 21

CNEC Gravata

Android
REST
Prof. Giovane Barcelos
giovane@professor.facensa.edu.br

Plano de Ensino

Listas Sequenciais e Encadeadas

Contedo Programtico:
1. RESTFul
2. Jersey
3. Android

Pg. 2

Android e RESTFul

De 21

REST

O que REST?
REST (Representational State Transfer) um estilo
de arquitetura baseado em padres web e no
protocolo HTTP
Descrito por Roy Fielding em 2000
Qualquer coisa um recurso, onde os recursos so
acessados via mtodos padres do HTTP
Servidores REST fornecem acesso aos recursos e os
Clientes acessam e modificam estes recursos
Recursos deveriam ser identificados por
identificadores (IDs) globais e nicos
Os recursos podem ter diferentes representaes:
texto, XML, JSON, etc.

Pg. 3

Android e RESTFul

De 21

REST
Quais so os mtodos HTTP?
Idempotente: caracterstica de se repetir sem levar a
resultados diferentes
GET: define um acesso de leitura ao recurso sem
efeitos colaterais. O recurso nunca alterado atravs
de uma solicitao GET. O pedido no tem efeitos
colaterais (idempotentes)
PUT: cria um novo recurso. Ele tambm deve ser
idempotente
DELETE: remove os recursos. As operaes so
idempotentes
POST: atualiza um recurso existente ou cria um novo
recurso

Pg. 4

Android e RESTFul

De 21

REST

Certo, ento o que um Web Services RESTFul?


Um RESTFul Web Services baseado em mtodos
HTTP e no conceito de REST;
Um servio Web RESTFul normalmente define o URI
de base para os servios
Define tambm os tipos de MIME suportados (XML,
texto, JSON, definida pelo usurio, etc) e o conjunto
de operaes (POST, GET, PUT, DELETE) que so
suportados

Pg. 5

Android e RESTFul

De 21

REST

E as especificaes?
JAX-RS:
Java define suporte via REST na especificao Java
Specification Request (JSR) 311
Esta especificao chamada de JAX-RS (Java Api para
RESTFul Web Services)
JAX-RS usa anotaes para definir REST
Jersey:
Jersey implementao de referncia da JSR 311
Fornece biblioteca com implementao das anotaes
da JAX-RS
No servidor instalado um servlet que predefine
classes identificadas pelos recursos RESTFull
No web.xml so realizadas as configuraes
Tambm possui um cliente para acesso aos recursos
http://dominio:port/nomeServico/urlPadrao/classeRest
Pg. 6

Android e RESTFul

De 21

REST

Como o RESTFul acionado?


O servlet analisa a solicitao HTTP de entrada e
seleciona a classe e mtodo que respondem o pedido
A seleo baseada nas anotaes inseridas na
classe e no mtodo
Uma aplicao RESTFull consiste basicamente de
classe de dados (recursos) e servios
A classe dados (recursos) geralmente encontram-se
nos pacotes de classes
A definio dos servios, do Jersey por exemplo,
ficam no web.xml
JAX-RS permite a criao de XML e JSON atravs de
JAXB (Java Architecture for XML Binding)

Pg. 7

Android e RESTFul

De 21

REST

E quais so as anotaes JAX-RS?


Anotao

Descrio

@PATH(your_path)

Define o caminho: URL + /seuCaminho .


A base URL baseado no nome da
aplicao e esta definida em web.xml

@POST

Mtodo responde ao POST

@GET

Mtodo responde ao GET

@PUT

Mtodo responde ao PUT

@DELETE

Mtodo responde ao DELETE

@Produces(MediaType.T
EXT_PLAIN[, moretypes])

Define o tipo MIME que endereado por


um mtodo anotado por @GET. No
exemplo (text/plain) produzido

@Consumes(type[,
more-types])

Define o tipo MIME que consumido pelo


mtodo

@PathParam

Utilizado para injetar valores dos


parmetros da URL no mtodo. Desta
forma pode-se injetar, por exemplo, o ID
do recurso dentro do mtodo

Pg. 8

Android e RESTFul

De 21

Jersey

Como criar um projeto Eclipse para usar o Jersey?


Deve ser criado um
projeto do tipo
Dynamic Web
Project,
pressionando

Target Runtime:
Web Server a ser
utilizado
Criar um Target,
quando <None>
Pg. 9

Android e RESTFul

De 21

Jersey

Como criar um Target Runtime no Eclipse?

Pg. 10

Android e RESTFul

De 21

Jersey

Como instalar o Jersey no Eclipse?


Existem duas formas de instalar o Jersey:
Baixar a distribuio Jersey e instalar no eclipse:
https://jersey.java.net/download.html
Configurar o Maven o Gradle no Eclipse

Pg. 11

Android e RESTFul

De 21

Jersey

Instalando Jersey no Eclipse por Download


Baixar https://jersey.java.net/download.html
Descompactar o pacote da pasta api e adicionar as
bibliotecas JAR no Eclipse
No projeto do Eclipse pressionar boto direito
Properties Java Build Path Libraries Add
External Jars Adicionar as bibliotecas JAR
Exemplo:

Pg. 12

Android e RESTFul

De 21

Jersey

Instalando Jersey no Eclipse por Maven


Transformar o Projeto em Maven:
Boto direito no Projeto Eclipse Configure
Convert to Maven Project
Inserir dependncias no pom.xml do Maven
conforme prximo slide

Pg. 13

Android e RESTFul

De 21

Jersey

Instalando Jersey no Eclipse por Maven


<dependencies>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
<version>1.19.1</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-bundle</artifactId>
<version>1.19.1</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-core</artifactId>
<version>1.19.1</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-client</artifactId>
<version>1.19.1</version>
</dependency>
</dependencies>
Pg. 14

Android e RESTFul

De 21

Jersey

Deve criar ou alterar o web.xml e incluir servlet


<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance" xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<servlet>
<servlet-name>Jersey Web Application</servlet-name>
<servlet-class>
com.sun.jersey.spi.container.servlet.ServletContainer
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey Web Application</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
</web-app>

Servio

Pg. 15

Android e RESTFul

De 21

Jersey

E como escrito um servio?


@Path("/oi")
public class Jersey {
// Este mtodo chamado se TEXT_PLAIN requisitado
@GET
@Produces(MediaType.TEXT_PLAIN)
public String sayPlainTextJersey() {
return "Oi Jersey";
}
// Mtodo chamado pelo path /pessoal e parmetro nome
@Path("/pessoal")
@GET
@Produces(MediaType.TEXT_PLAIN)
public String pessoal(@QueryParam("nome") String
nome) {
return "Oi "+nome;
}
}
Pg. 16

Android e RESTFul

De 21

Jersey

E como escrito um cliente?


public class TestRest {
public static void main(String[] args) {
Client client = Client.create();
WebResource resource = client.
resource("http://localhost:8081/WSTest/rest/oi");
System.out.println( resource.get(String.class) );

resource = client.
resource("http://localhost:8081/WSTest/rest/oi").
path("pessoal").
queryParam("nome", "Beltrano");
System.out.println( resource.get(String.class) );

Pg. 17

Android e RESTFul

De 21

Android

Como configurar o Jersey no Android?


Acrescentar permisso no AndroidManifest.xml <usespermission
android:name="android.permission.INTERNET"/>
Acrescentar dependncias no build.gradle (Module):
dependencies {
...
compile group: 'org.glassfish.jersey.core', name: 'jersey-client',
version: '2.22'
compile group: 'org.glassfish.jersey.core', name: 'jerseycommon', version: '2.22'
}
configurations {
compile.exclude group: 'javax.inject', module: 'javax.inject'
}
repositories {
mavenLocal()
}
Pg. 18

Android e RESTFul

De 21

Android
E o cdigo cliente?
StrictMode.ThreadPolicy policy = new
StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
Client client = ClientBuilder.newClient();
Log.w("REST",
client.target("http://192.168.0.57:8081/WSMatematica/re
st/oi").request().get(String.class));
Log.w("REST",
client.target("http://192.168.0.57:8081/WSMatematica/re
st/oi").path("pessoal").queryParam("nome",
"Beltrano").request().get(String.class));

Pg. 19

Android e RESTFul

De 21

Jersey

E como escrito um cliente?


public class TestRest {
public static void main(String[] args) {
Client client = Client.create();
WebResource resource = client.
resource("http://localhost:8081/WSTest/rest/oi");
System.out.println( resource.get(String.class) );

resource = client.
resource("http://localhost:8081/WSTest/rest/oi").
path("pessoal").
queryParam("nome", "Beltrano");
System.out.println( resource.get(String.class) );

Pg. 20

Android e RESTFul

De 21

Vamos Praticar

Pg. 21

Android e RESTFul

De 21

Você também pode gostar