Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Android SDK

Android desde Cero: Usando REST APIs

Difficulty:BeginnerLength:MediumLanguages:
This post is part of a series called Android From Scratch.
Android From Scratch: Hardware Sensors

Spanish (Español) translation by Rodney Martinez (you can also view the original English article)

La mayoría de nosotros ha desarrollado una apetito voraz por por nueva información, lo que está haciendo que el Internet sea tan importante para nuestras vidas. Nuestra atención dura demasiado poco, más que nunca, por lo tanto, construimos aplicaciones Android cuyo contenido es estático y puede ser una mala idea. En lugar de eso, debería de considerar la construcción de aplicaciones que puedan mostrar contenido fresco cada vez que el usuario las abra.

Eso podría sonar duro, sin embargo, con más y más sitios web exponiendo sus recursos a través de REST APIs, es bastante fácil. (Vea primero nuestro Guía para Principiantes en HTTP y REST).

En éste tutorial, voy a mostrarle cómo usar las clases y los métodos disponibles en Android SDK para conectarse con servidores web remotos e interactuar con ellos usando sus REST APIs.

1. Activando el Acceso a Internet

Haciendo uso de una REST API, obviamente implica usar Internet. Sin embargo, las aplicaciones Android pueden acceder a Interne solamente si tienen el permiso android.permission.INTERNET. Por lo tanto, antes de que empiece a escribir cualquier código de red, debe asegurarse que la siguiente etiqueta; uses-permission está presente en su archivo de manifiesto de su proyecto.

Debido a que android.permission.INTERNET no es considerado un permiso peligroso, usted no tiene que solicitarlo durante el tiempo de ejecución en los dispositivos ejecutando API Level 23 o superior.

2. Creando Hilos de Fondo

La plataforma Android no permite ejecutar operaciones de red en el hilo principal de la aplicación. Por lo tanto, todo el código de su red debe pertenecer a un hilo de fondo. La forma más fácil de crear tal hilo es usar el método execute() de la clase AsyncTask. Como su único argumento, execute() espera un objeto Runnable.

Si quiere aprender más sobre la ejecución de operaciones en hilos de fondo, entonces le sugiero leer éste tutorial sobre operaciones de fondo de la serie de Android Desde Cero.

3. Creando una conexión HTTP

Usando el método openConnection() de la clase URL, usted puede fácilmente configurar una conexión a cualquier punto final de REST. El valor de retorno de openConnection() debe ser emitido por una instancia o ya sea HttpURLConnection o HttpsURLConnection, dependiendo de si el punto final puede tener acceso sobre HTTP y HTTPS. Tanto HttpURLConnection como HttpsURLConnection le permiten realizar operaciones tales como añadir peticiones de encabezados y respuestas de lecturas.

El siguiente fragmento de código muestra como configurar una conexión con el parámetro root de GitHub API.

Observe que HttpsURLConnection es una subclase de la clase HttpURLConnection.

4. Añadiendo Request Headers

La mayoría de los sitios web que ofrecen REST APIs, quieren ser capaces de identificar solamente su aplicación. La forma más fácil de ayudarles a hacer eso es incluir un encabezado único User-Agent en todas sus peticiones.

Para añadir un encabezado User-Agent a su solicitud, usted debe usar el método setRequestProperty() del objeto HttpURLConnection. Por ejemplo, así es cómo usted configura el encabezado User-Agent para my-rest-app-v0.1:

Puede añadir múltiples encabezados a sus solicitudes mediante la llamada al método setRequestProperty() varias veces. Por ejemplo, el siguiente fragmento de código añade un encabezado Accept y un encabezado personalizado Contact-Me.

5. Leyendo Respuestas

Una vez que haya pasado todos los encabezados de solicitudes, entonces puede revisar si tiene una respuesta valida usando el método getResponseCode() del objeto HttpURLConnection.

Si la clase HttpURLConnection consigue una respuesta de código redireccionada tal como 301, controla automáticamente y sigue redireccionando. Por lo tanto, normalmente, no tendrá que escribir ningún código extra pare revisar las redirecciones.

En caso de que no exista errores, puede llamar al método getInputStream() para obtener una referencia de la secuencia de entradas de la conexión.

La mayoría de las REST APIs de estos días devuelven datos formateados como documentos válidos JSON. Por lo tanto, en lugar de leer directamente desde el objeto InputStream, le sugiero crear un InputStreamReader para ello.

6. Parsing JSON Responses

Android SDK tiene una clase llamada JsonReader, la cual hace muy fácil para usted analizar los documentos JSON. Puede crear una instancia nueva de la clase JsonReader, pasando el objeto InputStreamReader a su constructor.

Como obtiene una pieza específica de información de un documento JSON depende de su estructura. Por ejemplo, el documento JSON devuelto por la ruta del punto final del GitHub RESP APIs, luce así:

Como puede ver, la respuesta es solamente un objeto JSON que contiene varias claves. Para extraer los valores de la clave llamada organization_url desde ella, tendrá que escribir el siguiente código:

El proceso del código anterior responde el JSON como una secuencia de fichas. Por lo tanto, consume muy poca memoria. Sin embargo, debido a que tiene un proceso para cada ficha una después de otra, esto puede ser lento mientras controla las respuestas grandes.

Después de que ha extraído todos los requerimientos de información, siempre debe de llamar al método close() del objeto JsonReader para que éste lance todos los recursos que tiene.

Además debe cerrar la conexión llamado al método disconnect() del objeto HttpURLConnection.

7. Usando Diferentes método HTTP

HTTP-basado en interfaces REST, usa métodos HTTP para determinar el tipo de operación que tiene que ser realizada en un recurso. En el paso anterior, hicimos uso del método GET de HTTP para realizar una operación de lectura. Debido a que la clase HttpURLConnection usa el método GET por defecto, no tuvimos que especificarlo explicitamente.

Para cambiar el método HTTP de su objeto HttpURLConnection, debe usar su método setRequestMethod(). Por ejemplo, el siguiente fragmento de código abre una conexión para un extremo que pertenece a httpbin.org y ajusta su método HTTP a POST:

Como ya debe de saber, las solicitudes POST son utilizadas para enviar datos al servidor. Al escribir la secuencia de salida de la conexión, usted puede añadir cualquier dato del cuerpo de la solicitud POST muy fácilmente. Sin embargo, antes de hacer eso, debe asegurarse de que llama al método setDoOutput() del objeto HttpURLConnection y le pasa el valor true a éste.

El siguiente fragmento de código muestra como enviar un simple par de valores-claves al servidor:

8. Cachiando Respuestas

Siempre es una buena idea catchar respuestas HTTP. Haciendo eso, usted puede, no solamente reducir el consumo del ancho de banda de su aplicación, sino también hacerlo más responsable. Desde API nivel 13 en adelante, el Android SDK ofrece una clase llamada HttpResponseCache, la cual le permite implementar con facilidad el cache sin hacer ningún cambio a su red.

Para instalar un cache para su aplicación debe llamar al método install() de la clase HttpResponseCache. El método espera una ruta absoluta especificando donde el cache debe ser instalado y un número de tamaño específico del cache. Puede usar el método getCacheDir() si no quiere especificar la ruta absoluta de forma manual.

El siguiente fragmento de código instala un cache cuyo tamaño es 100,000 bytes:

Una vez que el cache está instalado, la clase HttpURLConnection empieza usándola automáticamente. Para revisar si su cache está funcionando, puede usar su método getHitCount() que devuelve el número de respuesta HTTP que fue servida desde el cache.

En conclusión

Hay miles de REST APIs disponibles para usted y que puede usar gratuitamente en sus aplicaciones Android. Al usarlas, puede hacer sus aplicaciones más informativas, interesantes y funcionales. En este tutorial aprendió a cómo usar la clase HttpURLConnection para tomar tales REST APIs. Además aprendió a cómo crear una respuesta HTTP cache que mantiene el ancho de banda de su aplicación con un uso bajo.

Si cree que usar HttpURLConnection es difícil, debería de ver las bibliotecas proporcionadas por otros proveedores como Volley y probar. Bibliotecas como esta usan la clase HttpURLConnection de forma interna, pero proporcionan muchos métodos convenientes que le permiten hacer su código más conciso y legible.

Para aprender más sobre red en la plataforma Android, puede dirigirse a la guía Operaciones de Red de Android.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.