En los últimos años hemos visto crecer las integraciones para aplicaciones nativas a servicios centralizados en donde la administración del producto y la comunicación entre Cliente-Servidor debe ser muy eficiente y eficaz. En este tutorial vamos a conocer una biblioteca enfocada a las peticiones HTTP con Swift.

 

alamofire

Actualmente existen muchas opciones para realizar conexiones a servidores web, pero pocas tienen la capacidad de ser expresivas y potentes como Alamofire.

Alamofire es una biblioteca especifica para Swift, que nos permite realizar peticiones a un servidor web cumpliendo y explotando todas las capacidades de HTTP. Fue creada por Matt Thompson (conocido por ser el fundador de NSHipster) y aunque ya existe una librería muy famosa para peticiones HTTP también creada por él (AFNetworking), Alamofire es un muy buen acercamiento a peticiones web con una gran expresividad y acompañada de todas las características e ideologías de Swift.

Crear y configurar el proyecto con CocoaPods

Lo primero que hay que realizar es la instalación de Alamofire en nuestro proyecto. Esto puede ser a través de CocoaPods (recomendado), Carthage o realizando una instalación manual a través de Git submodules. Para este tutorial vamos a realizarlo con CocoaPods.

Iniciamos con un proyecto nuevo en Xcode de una aplicación con una sola vista.

1 nuevo proyecto en xcode

Si abrimos nuestra carpeta con el proyecto debemos ver algo similar a esto:

2 proyecto en finder

En caso de que no tengas instalado CocoaPods, abre tu terminal y ejecuta:

gem install CocoaPods

4 instalacion de CocoaPods

Ahora hay que configurar CocoaPods al proyecto GreenLatte:

  1. Nos colocamos en el directorio de nuestro proyecto.
  2. Ejecutamos ‘pod init’, esto va a crear el archivo Podfile (similar al Gemfile).
  3. Revisamos el directorio para verificar que Podfile existe.
  4. Revisamos el contenido del archivo Podfile.

5 Pod init

En un editor de texto abrimos el Podfile y agregamos Alamofire.

6 Add pod alamofire

Por ultimo ejecutamos ‘pod install’. Importante: Recuerda tener cerrado Xcode porque se va a actualizar el proyecto.

7 pod install

Si revisamos nuestro Finder tenemos nuevos archivos.

Importante: De ahora en adelante solo abriremos el archivo xcworkspace porque este ya contiene nuestro proyecto y nuestras dependencias.

8 nuevos archivos

Al abrir el archivo GreenLatte.xcworkspace tenemos esto en el Project Navigator:

9 Xcode project navigator

Peticiones HTTP con Alamofire

En este ejemplo voy a utilizar json-generator.com para tener un ejemplo de como puede ser del lado del servidor la respuesta en un formato Json.

Lo siguiente que vamos a hacer es importar el framework y realizar la primer petición completa por Alamofire.

10 request code

  1. Lo primero que hicimos fue importar Alamofire
  2. En el metodo viewDidLoad agregamos el código Alamofire.request(.GET, “http://dominio.com/recurso.json”). Hasta ahi, realiza la petición solamente, no captura la respuesta. Es super practico para peticiones POST que no regresen una respuesta.
  3. Encadenamos el metodo responseJSON(options:NSJSONReadOptions.AllowFragments) {//code}. Esto captura la respuesta y nos permite dentro del bloque realizar las tareas pertinentes. En este caso vamos a mostrar todos los argumentos del bloque (request, response, data, error). Nota: data ya viene serializado, por lo tanto vendrá como objeto y no como cadena.

Si ejecutamos este código, en nuestra consola se muestra lo siguiente:

10 response in console

¿Que podemos notar aquí?… muchas cosas:

  1. La petición es de tipo NSMutableURLRequest. Esto significa que estamos manejando solo objetos de Foundation.
  2. Al igual NSHTTPURLResponse, no hay capas escondidas detrás de Alamofire, es solo Foundation.
  3. Después tenemos nuestro objeto Optional, que es el argumento data. Este tiene exactamente el mismo contenido que nuestro Json pero en objetos NSString o NSDictionary por ejemplo.
  4. Por ultimo el “nil” (el valor del argumento “error”) nos indica que no hubo errores.

Características de la biblioteca

  • Podemos utilizar cualquier tipo de método HTTP (GET, POST, DELETE, PUT, PATCH, etc.).
  • Podemos agregar parametros al metodo Alamofire.request(metodo, url, parametros).
  • Soporta cache de peticiones con NSURLCache por defecto.
  • Puede enviar archivos en peticiones POST. Ejemplo: “Alamofire.upload(.POST, “http://domino.com/post”, file: fileURL)“.
  • Podemos descargar recursos. Ejemplo: “Alamofire.download(.GET, “http://dominio.com/file”, destination: destination)“.
  • Soporta autenticación con NSURLCredential y NSURLAuthenticationChallenge.
  • Valida respuestas de servidor con códigos de status o mime types de respuesta.
  • Los métodos son encadenables para ser más descriptivo el código. Usalo con cuidado.

Conclusión

Alamofire es una excelente opción para mantener una capa de servicios a una API REST totalmente sencilla de mantener y sobre todo es genial porque en la mayoría de los casos utiliza solo elementos de Foundation, uno de los core frameworks de Apple.

Si quieres aprender más del desarrollo de aplicaciones móviles para iOS con SWIFT no te puedes perder nuestro siguiente curso: “Desarrollo iOS con SWIFT” que comienza el 6 de Junio. Si deseas más información por favor escríbenos a info@activ.com.mx.