Cliente HTTP en Swift: haciendo solicitudes correctamente

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Introducción: por qué las solicitudes HTTP correctas son la base de cualquier aplicación



En el desarrollo moderno de aplicaciones móviles y de escritorio con Swift, rara vez nos encontramos con una aplicación que funcione completamente de forma autónoma. Prácticamente cualquier aplicación de iOS o macOS interactúa con servidores remotos: carga datos, envía formularios, sincroniza contenido. El cliente HTTP es un componente clave, del cual dependen no solo la velocidad de trabajo, sino también la seguridad y la estabilidad de toda la aplicación.



En este artículo, analizaremos cómo crear un cliente HTTP robusto en Swift utilizando el framework integrado Foundation. Aprenderá cómo configurar correctamente URLSession, manejar errores, trabajar con JSON y usar enfoques modernos como async/await. El material será útil tanto para principiantes que recién están aprendiendo Swift, como para desarrolladores experimentados que deseen sistematizar sus conocimientos.



1. Fundamentos de URLSession: la base de la interacción en red



En Swift, la herramienta principal para trabajar con HTTP es la clase URLSession. Forma parte del framework Foundation y proporciona una API flexible para enviar solicitudes y recibir respuestas. URLSession soporta varias configuraciones, lo que permite adaptar el comportamiento a tareas específicas.



Creación y configuración de la sesión



El primer paso es crear una instancia de URLSession con una configuración determinada. Existen tres tipos de configuraciones:



  • .default — configuración estándar con almacenamiento en caché y conservación de cookies;
  • .ephemeral — sin guardar datos en disco (las cookies y la caché se almacenan solo en memoria);
  • .background — para tareas en segundo plano que pueden ejecutarse incluso después de cerrar la aplicación.


Ejemplo de creación de una sesión con configuración personalizada:



let configuration = URLSessionConfiguration.defaultconfiguration.timeoutIntervalForRequest = 30configuration.waitsForConnectivity = true

let session = URLSession(configuration: configuration)


Preste atención al parámetro waitsForConnectivity: si se establece en true, la solicitud no fallará con un error cuando no haya red, sino que esperará a que se restablezca la conexión. Esto es especialmente importante para aplicaciones móviles.



Solicitud GET básica



La forma más sencilla de ejecutar una solicitud es usar el método dataTask(with:). Aquí hay un ejemplo mínimo:



guard let url = URL(string: "https://api.example.com/users") else { return }

let task = session.dataTask(with: url) { data, response, error in if let error = error { print("Error de solicitud: \\(error.localizedDescription)") return } guard let httpResponse = response as? HTTPURLResponse, (200...299).contains(httpResponse.statusCode) else { print("Respuesta del servidor incorrecta") return } guard let data = data else { print("No hay datos en la respuesta") return } // Procesamiento de datos print("Recibidos \\(data.count) bytes")}task.resume()


Un punto importante: no olvide llamar a resume(), de lo contrario la solicitud no comenzará. Este es uno de los errores más comunes entre los principiantes.



2. Trabajo con JSON: de los datos a los objetos



La mayoría de las API modernas devuelven datos en formato JSON. En Swift, para trabajar con JSON se utiliza el protocolo Codable, que combina Encodable y Decodable. Esto permite convertir fácilmente datos en modelos y viceversa.



Creación del modelo y decodificación



Supongamos que el servidor devuelve una lista de usuarios en este formato:



[    {        "id": 1,        "name": "Iván Petrov",        "email": "ivan@example.com"    }]


Creemos la estructura correspondiente:



struct User: Coda

Blogs

Book Recommendations