Connecting RESTful Web Services on Android

Connecting  RESTful Web Services on Android

 

Antecedentes:

Existen dos filosofías a la hora de escribir servicios web:

  1. REST: utiliza XML, JSON y HTTP. Cada URL representa un objeto sobre el que puedes realizar POST,GET,PUT y DELETE (las operaciones típicas del HTTP).
  2. SOAP: es toda una infraestructura basada en XML. Donde cada objeto puede tener métodos definidos por el programador con los parámetros que sean necesarios.

 

Ventajas de REST

  1. Ligero: tranferencia de objetos JSON o XML.
  2. Resultados legibles.
  3. Fácil de implementar: no hacen falta herramientas específicas.

 

Ventajas de SOAP

  1. Fácil de consumir
  2. Rigido: tipado fuerte, sigue un contrato
  3. Herramientas de desarrollo

 

Android provee clientes HTTP para realizar conexiones y peticiones HTTP, pero no tiene la característica de soportar REST como cliente.

 

Introduccion:

REST (Representational State Transfer), en esencia, consiste en utilizar la especificación HTTP correctamente, este fue ganando amplia adopción en toda la web como una alternativa más simple a SOAP y a los servicios web basados en el Lenguage de Descripción de Servicios Web (Web Services Descripcion Language - WSDL). Las grandes empresas del Web 2.0 (Yahoo, Google y Facebook, etc), estan usando rest quienes marcaron como obsoletos a sus servicios SOAP y WSDL y pasaron a usar un modelo más facil de usar, orientado a los recursos.

 

 

Especificación REST:

 

REST nace como un alternativa a SOAP/WSDL/WS basado en una arquitectura distribuida, protocolo cliente/servidor sin estado.

 

REST utiliza los métodos HTTP de manera explícita, hace que los desarrolladores usen los métodos HTTP explícitamente de manera que resulte consistente con la definición del protocolo. Este principio de diseño básico establece una asociación uno-a-uno entre las operaciones de crear, leer, actualizar y borrar de los métodos HTTP. De acuerdo a esta asociación:

  1. se usa POST para crear un recurso en el servidor
  2. se usa GET para obtener un recurso
  3. se usa PUT para cambiar el estado de un recurso o actualizarlo
  4. se usa DELETE para eleminar un recurso

REST no mantiene estado, los servicios sin estado son mucho más simples de diseñar, escribir y distribuir a través de múltiples servidores. Un servicio sin estado no sólo funciona mejor, sino que además mueve la responsabilidad de mantener el estado al cliente de la aplicación. En un servicio web REST, el servidor es responsable de generar las respuestas y proveer una interfaz que le permita al cliente mantener el estado de la aplicación por su cuenta.

REST expone URIs con forma de directorios, ejemplo:  http://www.miservicio.org/discusion/temas/{tema}

REST transfiere XML, JSON, o ambos , usa  xml ó JSON para representar datos de objetos o atributos.

MIME-Type

Content-Type

JSON

application/json

XML

application/xml

XHTML

application/xhtml+xml

 

 

 

Frameworks:

En la actualidad comienzan a aparecer varios frameworks REST y se convertido en una parte integral de Java 6 a través de JSR-311.

 

Frameworks REST en JAVA y Android:

  1. Restlet (Android, Java).
  2. Spring Android (Android, Java).
  3. Axis 2.0 (Java).
  4. JBOSS RESTEasy (Java)
  5. Apache CFX (Java)
  6. Especificacion JSR-311 (Java).
  7. etc.

 

Spring Android

Spring Android Rest Template es un robusto y popular cliente REST basado en Java, y  Spring Android provee una versión RestTemplate que trabaja en entornos Android.

 

La clase RestTemplate es el corazón del Framework. y tiene 6 principales métodos HTTP

  1. DELETE - delete(...)
  2. GET - getForObject(...)
  3. HEAD - headForHeaders(...)
  4. OPTIONS - optionsForAllow(...)
  5. POST - postForLocation(...)
  6. PUT - put(...)
  7. Cualquier operacion HTTP - exchange(...) y execute(...)

 

Ejemplo

Uso basico  de Spring Android RestTemplate, obtener un objeto String JSON desde un dispositivo Android

 

RestTemplate restTemplate = new RestTemplate();
String url = 
"https://ajax.googleapis.com/ajax/services/search/web?v=1.0&q={query}";
String result = restTemplate.getForObject(url, String.
class"SpringSource");
        

Enviar con el metodo POST un objeto Java a un servicio RESTful que acepte datos JSON.        

 

Message message = new Message();
message.setId(555);
message.setSubject(
"Prueba");
message.setText(
"Enviando  prueba de objeto JSON");
                        
String url = 
"http://mypretendservice.com/sendmessage";
RestTemplate restTemplate = 
new RestTemplate();
String response = restTemplate.postForObject(url, message, String.
class);

 

Ejemplo en el lado Cliente Android

 

 

 

 

 

Ejemplo en el lado Servidor Tomcat usando Spring MVC - REST

 

 

 

Conclusion

Conectar un SmartPhone Android a un servicio web usando RestFul no es muy complicado, mas si  usas  algun framework que facilita el desarrollo.  Por otro lado, el desarrollo de aplicaciones para mobiles en el  mundo  empresarial esta entrando  en pleno auge ya que la navegacion en internet es mayor desde un mobile que desde una PC y visto que este 2011 el Perú se llenara con una gran cantidad de SmartPhone tanto  Android, iPhone y blackberry.

 

 

Codigo Fuente en Google Code:

https://code.google.com/p/android-peru-com/source/browse
 
Taxonomy upgrade extras: 

Agregá un nuevo comentario