Consumo de Servicios Web en iOS con URL Session

Clase 15 de 52Curso de Desarrollo de Apps para iOS

Resumen

¿Por qué es crucial aprender a consumir servicios web en desarrollo móvil?

El consumo de servicios web es un pilar fundamental en el desarrollo móvil. Constituye la base para realizar acciones como iniciar sesión, registrarse, manipular datos de redes sociales como Facebook, y en definitiva, interactuar con la nube o red. En este ámbito, Apple proporciona la clase URLSession como herramienta nativa para facilitar esta tarea. Al dominar su uso, los desarrolladores pueden construir aplicaciones más potentes y conectadas.

¿Cómo comenzar con URL Session en un proyecto de Xcode?

Para ilustrar el uso de URLSession, vamos a crear un proyecto en Xcode llamado "Aprendiendo Servicios", incluyendo algunos elementos en la interfaz de usuario:

  1. Agregar elementos de interfaz:
    • Un UILabel para mostrar información.
    • Un UIActivityIndicatorView para indicar la carga de datos al usuario.
    • Otro UILabel configurado para mostrar el estado, cada uno con sus respectivas restricciones (Constraint) para asegurar la correcta visualización.

Estos elementos nos permitirán representar visualmente los resultados de consumir un servicio web.

¿Cómo conectar outlets de manera eficiente en Xcode?

Al conectar elementos de UI con el código, se recomienda crear outlets de forma manual en el ViewController. Una manera efectiva es utilizar el Connections Inspector para conectar directamente desde el controlador a la interfaz gráfica sin necesidad de dividir la pantalla, simplificando el proceso de vínculo.

Código de ejemplo para crear outlets:

@IBOutlet weak var nameLabel: UILabel!
@IBOutlet weak var statusLabel: UILabel!
@IBOutlet weak var activityIndicator: UIActivityIndicatorView!

¿Cómo gestionar excepciones de seguridad y endpoints?

Al trabajar con servicios web en iOS, es esencial establecer excepciones de seguridad, ya que las aplicaciones suelen restringir conexiones a dominios que no son HTTPS por defecto.

  1. Configurar excepciones de seguridad:
    • Editar el archivo info.plist del proyecto para configurar dominios permitidos.
    • Añadir un bloque XML para definir excepciones específicas, asegurando que las solicitudes web no seguras sean manejadas adecuadamente.

Ejemplo de configuración en info.plist:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>mymockapi.com</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
    </dict>
</dict>
  1. Crear la URL del endpoint:
    • Definir un guard let para la URL asegurando que sea válida antes de proseguir con la llamada al servicio.

Ejemplo de código para crear la URL:

guard let endpoint = URL(string: "https://mymockapi.com/data.json") else { return }

¿Cómo consumir un servicio web con URLSession?

El consumo de servicios web implica configurar URLSession para realizar solicitudes:

  1. Utilizar URLSession:
    • Invocar URLSession.shared para acceder a una instancia compartida.
    • Utilizar dataTask para realizar la solicitud y recibir datos asíncronamente.

Código para consumir un servicio:

URLSession.shared.dataTask(with: endpoint) { data, response, error in
    if let error = error {
        print("Hubo un error: \(error)")
        return
    }

    guard let data = data else { return }
    
    do {
        if let json = try? JSONSerialization.jsonObject(with: data, options: []) as? [String: Any] {
            DispatchQueue.main.async {
                self.nameLabel.text = json["name"] as? String
            }
        }
    } catch {
        print("Error al deserializar JSON: \(error)")
    }
}.resume()

¿Qué hacer cuando los datos no se actualizan en la UI?

Si tras consumir el servicio los elementos de UI no reflejan cambios, podrías estar enfrentando un problema de actualización de interfaz en el hilo principal. Cualquier cambio en la interfaz de usuario debe realizarse dentro del hilo principal usando DispatchQueue.main.async.

¡Continúa explorando y experimentando con diferentes configuraciones y servicios! La práctica constante te convertirá en un experto en consumir servicios web para aplicaciones móviles.