Buscar

Webservices RESTful

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 15 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 15 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 15 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

DESENVOLVIMENTO 
PARA DISPOSITIVOS 
MÓVEIS
Fabricio Machado da Silva
Webservices RESTful
Objetivos de aprendizagem
Ao final deste texto, você deve apresentar os seguintes aprendizados:
 � Analisar o uso de REST e as suas aplicações.
 � Identificar REST em aplicações como endpoint para aplicativos backend.
 � Praticar o uso de RESTful em uma aplicação de exemplo.
Introdução
Neste capítulo, você conhecerá os webservices REpresentational State 
Transfer (RESTful), serviços construídos com o estilo de arquitetura RESTful. 
A construção de webservices com a abordagem RESTful tem surgido como 
uma alternativa popular ao uso de tecnologias baseadas em SOAP (simple 
object access protocol) para implantação de serviços na internet, por ser 
mais leve e conseguir transmitir dados diretamente via HTTP (hypertext 
transfer protocol).
REST: o que é e onde se pode utilizá-la
Transferência representacional de estado (REST, do inglês representational 
state transfer) refere-se a um conceito de arquitetura para troca de dados 
entre sistemas distribuídos, como a world wide web (WWW). O conceito 
de recursos identificados por ID de recursos universais (URI) é central para 
a arquitetura RESTful. Esses recursos podem ser manipulados usando uma 
interface-padrão, como hypertext transfer protocol (HTTP), e as informações 
trocadas entre os sistemas empregando as representações desses recursos.
A REST tem como principal objetivo definir características fundamentais 
para a construção de aplicações na Web em conformidade com boas práticas. 
A Web como conhecemos atualmente funciona seguindo práticas REST, 
conforme podemos acompanhar pelo raciocínio a seguir.
1. Você digita um endereço no seu navegador.
2. Então, seu navegador estabelecerá uma conexão TCP/IP com o servi-
dor requisitado e enviará uma requisição GET HTTP com o endereço 
solicitado.
3. O servidor de destino interpretará a requisição e, de acordo com o que 
contiver, retornará uma resposta HTTP para seu navegador.
4. A resposta poderá ser de sucesso, contendo alguma representação em 
formato HTML, ou, então, uma mensagem de erro, como é comum 
encontrarmos com o famoso 404 Not Found, que, nesse caso, indica 
que o endereço ou recurso solicitado pelo seu navegador não pode ser 
encontrado.
5. Em caso de sucesso, seu navegador interpreta o HTML retornado e 
você navegará pela página renderizada.
A Figura 1 ilustra como funciona essa requisição a partir do navegador 
na Web.
Figura 1. Exemplo de requisição GET de um navegador.
Fonte: Victorio (2016, documento on-line).
Webservices RESTful2
Atualmente, a REST é o padrão mais utilizado como alternativa ao já 
considerado ultrapassado SOAP (simple object access protocol), cuja prin-
cipal reclamação associada refere-se à sua burocracia, algo que, na REST, 
é consideravelmente reduzido. Como já vimos, a REST baseia-se no design 
do protocolo HTTP, que já apresenta diversos mecanismos embutidos para 
representar recursos com código de status, tipos de conteúdo, cabeçalhos, 
etc. Nessa arquitetura, o fundamental são as URL (uniform resource locator) 
do sistema e os recursos (recurso é um recurso, entidade), fazendo uso dos 
métodos HTTP para promover a comunicação:
 � GET: solicita a representação de determinado recurso. Define-se como 
um método seguro e não deve ser usado para disparar uma ação (p. ex., 
remover um usuário).
 � POST: as informações enviadas no corpo (body) da requisição são 
utilizadas para criar um novo recurso. Também é responsável por fazer 
processamentos não diretamente relacionados a um recurso.
 � DELETE: remove um recurso. Deve retornar o status 204 caso não 
exista nenhum recurso para a URI especificada.
 � PUT: atualiza um recurso na URI especificada. Caso o recurso não 
exista, ele pode criar um. A principal diferença entre POST e PUT 
é que o primeiro pode lidar não somente com recursos, mas também 
pode processar informações.
Contudo, não existe um padrão obrigatório, podendo-se implementar 
somente o que é necessário em seu contexto.
REST API como back-end e front-end
A API (application programming interface) de um serviço Web (Web service) 
pode ser entendida como uma estrada que liga duas cidades distantes, até 
então impossível de ser conectadas sem esse caminho. No caso de aplicações, 
uma API pode ser utilizada por diferentes aplicações de negócio, sem que 
necessariamente cada aplicação conheça os detalhes da sua implementação.
Nesse sentido, as API são interfaces de integração entre aplicações que 
possibilitam a troca de informações entre elas, inclusive recursos que permitem 
que uma mesma aplicação apresente comportamentos específicos para uma 
versão móvel, outra desktop e outra Web.
3Webservices RESTful
Uma API pode ser acessada por meio de um endereço. Supomos que estamos 
acessando a API disponível por um Web service de uma escola para encontrar 
alguns registros disponíveis para os alunos. Perceba que isso é uma vantagem das 
API também, já que, nesse exemplo, os únicos dados retornados para a nossa apli-
cação são o nome e a idade do aluno. Mas o registro de alunos tem mais registros?
Sim, porém, como a nossa aplicação está consumindo essa API e não precisa 
se preocupar com a implementação da busca em si, apenas solicita a API e o 
Web service da escola implementa a busca, a partir da qual, por questões de 
negócio, são disponibilizadas apenas as informações de nome e idade.
Endereço da API (escola.com.br/api/v1/alunos)
Arquivo JSON de retorno para a nossa aplicação:
{
 "alunos":
 [
 {
 "nome": "Aluno1",
 "idade": 12
 },
 {
 "nome": "Aluno2",
 "idade": 13
 },
 {
 "nome": "Aluno3",
 "idade": 14
 },
 {
 "nome": "Aluno4",
 "idade": 15
 }
 ]
}
Webservices RESTful4
Com esse exemplo, podemos ter um caso de uma API em que várias aplicações 
clientes poderiam solicitar os dados dos alunos da escola e usariam essa informação. 
A REST nos permite criar uma API utilizando o protocolo HTTP para requisições.
Uma questão muito interessante quando se fala de Web services SOAP ou REST, às 
vezes não comentada, é o fato de que ambas tecnologias podem ser misturadas e 
combinadas. REST tem a característica de ser fácil de entender e extremamente acessível, 
embora possamos sentir falta de alguns padrões, sendo a tecnologia considerada 
uma abordagem arquitetural. Em contrapartida, o SOAP é o padrão da indústria, com 
protocolos bem definidos e um conjunto de regras estabelecidas. 
Algumas caraterísticas da REST
A REST possibilita uma série de benefícios, mas é importante lembrar que 
não se trata de um padrão, não sendo necessariamente obrigado a segui-la 
para criar Web services ou aplicações Web. Podemos classificá-la como uma 
espécie de “guia” com recomendações.
Cliente — Servidor
Característica básica para uma aplicação REST, o objetivo dessa segmentação 
consiste em separar a arquitetura e as responsabilidades em ambientes distintos. 
Dessa forma, a aplicação cliente, ou o consumidor do serviço, abstrai tarefas 
como comunicação com o banco de dados, gerenciamento de cache, logs, etc.
E o contrário também é verdadeiro: o servidor ou o provedor do serviço 
não precisa se preocupar com tarefas como interface, user experience, etc., 
possibilitando, assim, a evolução independente das duas arquiteturas.
Nesse modelo, o servidor espera pelas requisições do cliente, executa-as 
e devolve uma resposta (Figura 2).
5Webservices RESTful
Figura 2. Exemplo de arquitetura client server.
Fonte: Maziero (2008, documento on-line).
Stateless
Na arquitetura REST, uma aplicação cliente pode enviar requisições para a 
aplicação servidor, embora cada uma delas devam ser independentes, ou seja, 
toda requisição precisa conter algumas informações necessárias para que o 
servidor consiga interpretar e processar adequadamente.
Nesse modelo, o servidor também não deverá guardar nenhuma informação 
do estado do cliente, comosessões. 
Cacheable
Como muitas aplicações cliente farão consultas requisitando os mesmos 
serviços, é importante que essas informações possas ser cacheadas no ser-
vidor, evitando processamentos desnecessários e provendo uma melhoria no 
desempenho.
Na prática, quando uma aplicação cliente solicita pela primeira vez um 
serviço ao servidor, ele processa a requisição e armazena temporariamente na 
cache. Quando as demais aplicações solicitarem o mesmo serviço, o servidor 
devolve o que está em cache sem ter que reprocessar novamente.
Webservices RESTful6
Uniform Interface
Como um contrato entre aplicações cliente servidor para comunicação, trata-
-se de pequenas regras que permitem deixar um componente o mais genérico 
possível, facilitando a manutenção e a evolução.
Nessas regras, existe uma espécie de guideline para possibilitar a unifor-
midade dessa comunicação:
1. Identificação do recurso: cada recurso teve ter uma URI específica e 
coesa para permitir o seu acesso.
2. Representação do recurso: forma como as informações do recurso 
retornarão para a aplicação cliente, como em JSON, XML, HTML, 
TXT, etc.
3. Resposta autoexplicativa: é necessária a passagem de metainformações 
(metadata) na requisição, algumas das quais, na resposta, são, por 
exemplo, código HTTP da resposta, Host, Content-Type, etc.
4. Hypermedia: parte muitas vezes esquecida quando estamos falando 
de REST. Consiste em retornar todas as informações necessárias na 
resposta que permitam que a aplicação cliente navegue e tenha acesso 
a todos os recursos da aplicação.
Layered System
A aplicação deve ser composta por camadas, que possibilitarão a sua alteração, 
tanto para adicionar mais camadas quanto para permitir a sua remoção. Assim, 
um dos princípios dessa característica refere-se ao fato de que a aplicação 
cliente nunca deverá chamar diretamente o servidor sem antes passar por um 
intermediador, que pode ser um Load Balancer ou qualquer outra máquina 
que faça a interface com os servidores.
Isso possibilita que a aplicação cliente se preocupe apenas em se comunicar 
com o intermediador e este se responsabilize por distribuir as requisições 
para os servidores, que podem ser um ou muitos. Com esse conceito, a sua 
arquitetura ficará muito mais flexível.
7Webservices RESTful
Trabalhar com camadas possibilita melhorar a escalabilidade do processo, o que significa 
que é possível uma arquitetura composta por camadas hierárquicas condicionar o 
comportamento de componentes de modo que cada componente não pode “ver” 
além da camada imediata com as quais estão interagindo. A grande vantagem da 
imposição dessa restrição reside no fato de que a complexidade é restrita e podemos 
pensar que estas camadas encapsulam serviços (p. ex., serviços legados), etc. Como 
em todos os aspectos, isso deve ser levado em consideração na implementação para 
evitar sobrecargas entre as camadas — a implementação de cache por domínio é uma 
estratégia para quem quiser aproveitar dessa característica da REST.
Code-on-demand
Condição que possibilita a execução de código sob demanda pela aplicação 
cliente, ou seja, estender parte da lógica do servidor Web services para a 
aplicação cliente. Assim, diferentes aplicações clientes podem apresentar com-
portamentos específicos mesmo consumindo exatamente os mesmos serviços.
Como isso não faz parte da arquitetura em si, é considerado como opcional, 
podendo-se utilizá-lo para executar alguma parte do serviço pelo lado da 
aplicação cliente mais eficaz ou rápida.
Para uma API ser considerada RESTful, ela deve seguir estritamente as 
regras definidas na arquitetura REST (com exceção da code-on-demand, por 
ser opcional), além de dispor de certo nível de coesão e maturidade, definidos 
na escala Richardson maturity model (RICHARDSON..., 2019, documento 
on-line). 
Exemplo de uma aplicação Android 
consumindo Web services
A seguir, você verá um exemplo de código para consumo dos Web services 
do correio para busca de dados de um endereço a partir de um CEP (código 
de endereçamento postal). 
Webservices RESTful8
public class ViaCEP {
 private String CEP;
 private String Logradouro;
 private String Complemento;
 private String Bairro;
 private String Localidade;
 private String Uf;
 private String Ibge;
 private String Gia;
 /**
 * Constrói uma nova classe
 */
 public ViaCEP() {
 this.CEP = null;
 this.Logradouro = null;
 this.Complemento = null;
 this.Bairro = null;
 this.Localidade = null;
 this.Uf = null;
 this.Ibge = null;
 this.Gia = null;
 }
 /**
 * Constrói uma nova classe e busca um CEP no ViaCEP
 *
 * @param cep
 * @throws viacep.ViaCEPException caso ocorra algum erro
 */
 public ViaCEP(String cep) throws ViaCEPException {
 this.buscar(cep);
 }
9Webservices RESTful
 /**
 * Busca um CEP no ViaCEP
 *
 * @param cep
 * @throws viacep.ViaCEPException caso ocorra algum erro
 */
 public final void buscar(String cep) throws ViaCEPE-
xception {
 this.CEP = cep;
 // define a url
 String url = “http://viacep.com.br/ws/” + cep + “/
json/”;
 // define os dados
 JSONObject obj = new JSONObject(this.get(url));
 if (!obj.has(“erro”)) {
 this.CEP = obj.getString(“cep”);
 this.Logradouro = obj.getString(“logradouro”);
 this.Complemento = obj.getString(“complemento”);
 this.Bairro = obj.getString(“bairro”);
 this.Localidade = obj.getString(“localidade”);
 this.Uf = obj.getString(“uf”);
 this.Ibge = obj.getString(“ibge”);
 this.Gia = obj.getString(“gia”);
 } else {
 throw new ViaCEPException(“Não foi possível 
encontrar o CEP”, cep);
 }
 }
 public String getGia() {
 return this.Gia;
 }
Webservices RESTful10
 public final String get(String urlToRead) throws Via-
CEPException {
 StringBuilder result = new StringBuilder();
 try {
 URL url = new URL(urlToRead);
 HttpURLConnection conn = (HttpURLConnection) 
url.openConnection();
 conn.setRequestMethod(“GET”);
 BufferedReader rd = new BufferedReader(new 
InputStreamReader(conn.getInputStream()));
 String line;
 while ((line = rd.readLine()) != null) {
 result.append(line);
 }
 
 } catch (MalformedURLException | ProtocolExcep-
tion ex) {
 throw new ViaCEPException(ex.getMessage());
 } catch (IOException ex) {
 throw new ViaCEPException(ex.getMessage());
 }
 
 return result.toString();
 }
} 
A API ViaCep, que possibilita aplicações consultarem o código de endereçamento 
postal CEP de qualquer localidade no Brasil, é observada no link a seguir.
https://qrgo.page.link/QhWzN
11Webservices RESTful
MAZIERO, C. A. Introdução aos Serviços de Rede. Laboratório de Redes, Sistemas Distribuí-
dos e Segurança, Departamento de Informática, Universidade Federal do Paraná, Curitiba, 21 
nov. 2008. Disponível em: http://wiki.inf.ufpr.br/maziero/doku.php?id=espec:introducao. 
Acesso em: 10 jul. 2019.
RICHARDSON Maturity Model. REST API Tutorial, [S. l.], 2019. Disponível em: https://
restfulapi.net/Richardson-maturity-model/. Acesso em: 10 jul. 2019.
VICTORIO, J. C. A. Requisições GET e POST – Principais diferenças. TI – Tecnologia e 
Inovação – o seu portal de tecnologia, Rio de Janeiro, 24 jul. 2016. Disponível em: http://
tecnologiaeinovacao.com.br/blog/2016/07/24/requisicoes-get-e-post-principais-
-diferencas/. Acesso em: 10 jul. 2019.
Leituras recomendadas
ANDROID Developers. [S. l.: S. n.], 2019. Disponível em: https://developer.android.com. 
Acesso em: 10 jul. 2019.
DEITEL, P.; DEITEL, H.; DEITEL, A. Android: como programar. 2. ed. Porto Alegre: Book-man, 2015. 690 p.
DEITEL, P.; DEITEL, H.; WALD, A. Android 6 para programadores: uma abordagem baseada 
em aplicativos. 3. ed. Porto Alegre: Bookman, 2016. 618 p.
Webservices RESTful12

Continue navegando