¿Qué es URLSession?
URLSession es una clase fundamental en Swift que nos permite interactuar con recursos en internet. Con ella, podemos realizar peticiones HTTP (GET, POST, PUT, DELETE, etc.) para descargar datos, subir archivos o simplemente obtener información de un servidor. Es la herramienta principal para cualquier aplicación que necesite comunicarse con servicios web.
¿Por qué usar URLSession?
- Flexible: Permite realizar peticiones HTTP de diferentes tipos.
- Personalizable: Puedes configurar la sesión con diversos parámetros como timeouts, caché, políticas de seguridad, etc.
- Asíncrona: Las tareas de red se ejecutan en segundo plano, evitando bloquear la interfaz de usuario.
- Integrada: Viene incluida en el framework Foundation de Swift, por lo que no necesitas instalar bibliotecas adicionales.
Ejemplo básico: Realizar una petición GET
import Foundation
let url = URL(string: "https://api.example.com/data")!
let task = URLSession.shared.dataTask(with: url) { data, response, error in
guard let data = data, error == nil else {
print("error:", error?.localizedDescription ?? "No data")
return
}
// Procesar los datos aquí
let responseString = String(data: data, encoding: .utf8)
print(responseString)
}
task.resume()
Explicación del código:
- Crear una URL: Creamos una instancia de URL con la dirección del recurso al que queremos acceder.
- Crear una tarea: Usamos
dataTask(with:)
para crear una tarea que descargará los datos de la URL. - Completar la tarea: Dentro del closure, procesamos los datos recibidos. Si hay un error, lo manejamos.
- Iniciar la tarea: Llamamos a
resume()
para comenzar a ejecutar la tarea.
Personalizando la sesión
Podemos crear una sesión personalizada para configurar opciones como el timeout, el caché, los certificados, etc.:
let configuration = URLSessionConfiguration.default
configuration.timeoutIntervalForRequest = 10.0 // Timeout de 10 segundos
let session = URLSession(configuration: configuration)
Manejo de errores
Es fundamental manejar los errores que puedan ocurrir durante una petición HTTP. Puedes utilizar un do-catch
o simplemente verificar si error
es nil.
Decodificando JSON
Si la respuesta del servidor es en formato JSON, puedes utilizar JSONDecoder
para convertir los datos en objetos Swift:
struct User: Decodable {
let id: Int
let name: String
}
// ...
let decoder = JSONDecoder()
if let data = data, let user = try? decoder.decode(User.self, from: data) {
print(user.name)
}
Otras características de URLSession
- Descarga de archivos: Utiliza
downloadTask(with:)
para descargar archivos grandes. - Subida de archivos: Utiliza
uploadTask(with:from:)
para subir archivos al servidor. - Peticiones POST: Utiliza
dataTask(with:completionHandler:)
y construye unURLRequest
con el método HTTP POST. - Cookies: Puedes manejar cookies para mantener sesiones de usuario.
- Authentication: Puedes añadir autenticación básica o OAuth.
Consejos adicionales
- Async/await: Swift 5.5 introdujo
async/await
, lo que simplifica aún más el manejo de tareas asíncronas como las peticiones HTTP. - Combine: Puedes utilizar el framework Combine para manejar flujos de datos de forma reactiva.
- Bibliotecas de terceros: Existen bibliotecas como Alamofire que ofrecen una interfaz más sencilla y funcionalidades adicionales.
Conclusión
URLSession es una herramienta poderosa y flexible para realizar peticiones HTTP en Swift. Al dominar sus fundamentos, podrás construir aplicaciones que se comuniquen con servicios web de manera eficiente y segura.