URLSession — mi ez, hálózati API és hogyan működik iOS-ben

Szerző: IT Sectr Megjelenés: 2026-03-07 Olvasási idő: 8 perc

URLSession — az API a hálózati kérésekhez iOS-ben és macOS-ben, a Foundation framework része, és egységes felületet biztosít a HTTP, HTTPS, háttérben történő letöltés és WebSocket használatához. Lecserélte az elavult NSURLConnection-t, és az Apple-fejlesztők fő hálózati eszközévé vált. A Apple Developer Documentation (2025) szerint a URLSession az iPhone és iPad alkalmazások hálózati forgalmának több mint 90%-át dolgozza fel.

Legfontosabb tudnivalók

  • URLSession — natív Apple API hálózati kérésekhez, HTTP-hez, fájlletöltéshez és WebSocket-hez
  • Feladattípusok: dataTask (kérések), downloadTask (letöltés), uploadTask (feltöltés), webSocketTask
  • Konfiguráció határozza meg a munkamenet viselkedését: gyorsítótárazás, időtúllépések, proxy, hitelesítő adatok
  • Aszinkronitás closure-ökön, delegáltakon vagy modern async/await-en keresztül valósul meg
  • Háttér-munkamenetek lehetővé teszik az adatok letöltését még az alkalmazás minimalizálásakor is

Mi az URLSession?

URLSession — az API hálózati műveletekhez, amelyet az Apple az iOS 7-ben és macOS 10.9-ben vezetett be. Lecserélte az NSURLConnection-t, és rugalmasabb és erősebb modellt biztosított a hálózati munkához. A könyvtár támogatja a HTTP/1.1, HTTP/2, HTTP/3 és WebSocket protokollokat, valamint a háttér-munkameneteket az adatok letöltéséhez.

A URLSession fő előnye a régi NSURLConnection-nal szemben — a több egyidejű kapcsolat támogatása egyetlen munkameneten keresztül, testreszabható konfigurációk és a letöltések szüneteltetésének és folytatásának lehetősége. Munkamenet egy csoport hálózati feladatot egyesít közös beállításokkal: gyorsítótárazás, cookie-szabályzat, időtúllépések, TLS-tanúsítványok.

Az iOS-ben a URLSession együttműködik a rendszer DNS-gyorsítótárával, az energiafelügyelettel és a háttérfolyamatokkal. Amikor az alkalmazás minimalizálva van, a rendszer folytathatja az adatok letöltését egy háttér-munkameneten keresztül, és a befejezés után értesíti az alkalmazást egy befejezési kezelőn keresztül. A háttér-munkamenetek különösen hasznosak nagy fájlok letöltéséhez, tartalom frissítéséhez és adatok szinkronizálásához dokumentumokkal és médiafájlokkal dolgozó alkalmazásokban. A háttér-munkamenetekkel való munkához implementálni kell az URLSessionDelegate-et és át kell adni a konfiguráció azonosítóját a munkamenet létrehozásakor — a rendszer ezt az azonosítót használja a munkamenet helyreállításához az alkalmazás újraindítása után.

A URLSession fontos előnye a HTTP/2 és HTTP/3 támogatása. A HTTP/2 multiplexelése lehetővé teszi több kérés egyidejű küldését egyetlen TCP-kapcsolaton keresztül, ami csökkenti a késleltetést és a szerverterhelést. A HTTP/3, amely a QUIC protokollon alapul az UDP felett, még gyorsabb kapcsolatépítést biztosít a TCP-kézfogás kiküszöbölésével.

Az URLSession felépítése

Az URLSession felépítése három kulcsfontosságú összetevőből áll: munkamenet-konfiguráció, maga a munkamenet és a feladatok (tasks). Minden összetevő a hálózati interakció egy-egy aspektusáért felelős, és ezek kombinációja határozza meg az alkalmazás viselkedését a hálózati munka során.

URLSessionConfiguration

A konfiguráció beállítja a munkamenet paramétereit — az időtúllépésektől a gyorsítótárazási szabályzatokig. Három típus létezik: .default (normál lemezgyorsítótárral), .ephemeral (gyorsítótár és cookie-k mentése nélkül) és .background (háttérben történő letöltéshez). A konfigurációban beállítható a maximális kapcsolatok száma gazdagépenként, a kérés és erőforrás időtúllépése, a TLS-szabályzat és a proxy.

URLSessionTask feladattípusok

Az URLSessionTask — az alaposztály az összes hálózati művelethez. A fő alosztályok: URLSessionDataTask GET és POST kérésekhez adatok memóriában történő visszaadásával, URLSessionDownloadTask fájlok letöltéséhez a lemezre, URLSessionUploadTask fájlok szerverre küldéséhez és URLSessionWebSocketTask a WebSocket használatához iOS 13-tól.

URLSession delegáltak

A munkamenet delegáltja eseményeket kap a feladatok előrehaladásáról: adatok fogadása, letöltés befejezése, hitelesítési hibák, átirányítások. URLSessionDelegate és alprotokolljai lehetővé teszik a TLS-tanúsítványok elfogását hitelesítéskor, a válaszok gyorsítótárazásának kezelését URLCache-en keresztül és a nagy fájlok letöltésének nyomon követését. Alternatív megoldásként closure-ök (completion handlers) használhatók egyszerű esetekben, ahol nincs szükség köztes események feldolgozására.

Kérések végrehajtása URLSession-nel

Az URLSession-nel való munka alapforgatókönyve a következő: létrejön egy konfiguráció, ennek alapján egy munkamenet, majd a munkameneten keresztül létrejön egy feladat egy URL-kéréssel, és a feladat elindul. Nézzünk egy példát GET kérésre closure-rel. Ezt a mintát a legtöbb iOS-alkalmazás használja adatok lekérésére REST API-tól, képek betöltésére és felhőszolgáltatásokkal való interakcióra.

swift
let url = URL(string: "https://api.example.com/users")!
let session = URLSession.shared
let task = session.dataTask(with: url) { data, response, error in
    guard let data = data, error == nil else {
        print("Hiba: \(error!.localizedDescription)")
        return
    }
    if let json = try? JSONSerialization.jsonObject(with: data) {
        print("JSON: \(json)")
    }
}
task.resume()

A példában URLSession.shared van használva — egy szingleton .default konfigurációval egyszerű kérésekhez. A dataTask létrehoz egy aszinkron műveletet, de nem indítja el — kötelező meghívni a resume()-t. A closure a kérés befejezése után fut le, és visszaadja a data, response vagy error értékeket. Egyéni konfigurációval rendelkező munkamenethez használja az URLSession(configuration:) inicializálót, amely lehetővé teszi a gyorsítótárazási szabályzatok, időtúllépések, maximális kapcsolatszám, alapértelmezett HTTP-fejlécek és proxy-beállítások beállítását a munkamenet összes feladatához. Ez a megközelítés teljes ellenőrzést biztosít a hálózati viselkedés felett az alkalmazásban.

Fájlok letöltése URLSession segítségével

A URLSession támogatja a fájlok letöltését szüneteltetési és folytatási lehetőséggel, valamint a háttérben történő letöltést. DownloadTask elmenti a fájlt egy ideiglenes könyvtárba, és a befejezési closure-ben át kell helyezni egy állandó helyre.

swift
let url = URL(string: "https://example.com/file.zip")!
let session = URLSession(configuration: .default)
let task = session.downloadTask(with: url) { location, _, _ in
    guard let location = location else { return }
    let destination = FileManager.default.temporaryDirectory
        .appendingPathComponent("file.zip")
    try? FileManager.default.moveItem(at: location, to: destination)
}
task.resume()

A location paraméter a closure-ben az ideiglenes fájlra mutat, amelyet át kell helyezni, különben a rendszer törli a closure elhagyása után. Az előrehaladás nyomon követéséhez a URLSessionDownloadDelegate delegáltat használjuk a didWriteData metódussal, amely átadja a beírt bájtok számát és a fájl teljes méretét — ezek az adatok felhasználhatók egy folyamatjelző sáv megjelenítéséhez a felhasználói felületen. A háttér-munkamenetek a downloadTask segítségével lehetővé teszik a letöltés folytatását még az alkalmazás minimalizálása után is, és a befejezést követően a rendszer meghívja a handlert az AppDelegate-ben.

URLSession vs Alamofire

Az Alamofire — egy Swift könyvtár, amely az URLSession tetejére épül, és deklaratívabb felületet biztosít. A natív API és az Alamofire közötti választás a projekt összetettségétől és a csapat preferenciáitól függ.

SzempontURLSessionAlamofire
FüggőségekNincs, beépítve a Foundation-beSPM vagy CocoaPods szükséges
SzintaxisImperatív closure-ökkelDeklaratív láncokkal
JSON feldolgozásJSONSerialization kézzelresponseDecodable a Codable-lel
ElfogókDelegáltakon keresztülRequestInterceptor, EventMonitor
ElőrehaladásDelegáltakon keresztüldownloadProgress, uploadProgress

Egyszerű projektekhez a URLSession elegendő, és nem ad hozzá függőségeket. Az Alamofire olyan projektekben indokolt, ahol sok hálózati kérés, összetett hibakezelés és tömör szintaxis szükséges. Mindkét technológia a közös URLSessionConfiguration alapot használja, és kompatibilis egymással. A választásnál figyelembe kell venni, hogy az URLSession-t teljes mértékben az Apple ellenőrzi, és az iOS-sel együtt frissül, míg az Alamofire esetében a könyvtár fejlesztőinek kell biztosítaniuk a kompatibilitást az új OS-verziókkal.

URLSession kódpéldák

A modern Swift támogatja az async/await-et, ami olvashatóbbá teszi a hálózati kéréseket a closure-ökhöz képest. Vizsgáljuk meg ugyanazt a GET kérést aszinkron szintaxis segítségével.

swift
func fetchUsers() async throws -> [User] {
    let url = URL(string: "https://api.example.com/users")!
    let (data, _) = try await URLSession.shared.data(from: url)
    let users = try JSONDecoder().decode([User].self, from: data)
    return users
}

A data(from:) metódus iOS 15 és macOS 12 óta elérhető. Visszaad egy (Data, URLResponse) tuple-t, és hibát dob hálózati problémák esetén. A JSONDecoder egy Codable modellel automatikusan deszerializálja a választ — ez helyettesíti a körülményes JSONSerialization-t az előző példából.

POST kérés JSON törzzsel

POST kérésekhez JSON törzzsel az URLRequest használható, amelyben beállítható a metódus, a Content-Type fejlécek és a kérés törzse Data formátumban. Az async/await tömörré és érthetővé teszi ezt a folyamatot, a hibakezelés pedig egyszerű a do-catch blokkon keresztül.

swift
func createUser(name: String) async throws -> User {
    var request = URLRequest(url: URL(string: "https://api.example.com/users")!)
    request.httpMethod = "POST"
    request.setValue("application/json", forHTTPHeaderField: "Content-Type")
    let body = try JSONEncoder().encode(["name": name])
    request.httpBody = body
    let (data, _) = try await URLSession.shared.data(for: request)
    return try JSONDecoder().decode(User.self, from: data)
}

Gyakran Ismételt Kérdések

Miben különbözik az URLSession az NSURLConnection-től?

Az URLSession az NSURLConnection modern utódja, amelyet iOS 7-ben vezettek be. Fő különbségek: több kapcsolat támogatása munkameneteken keresztül, feladatok szüneteltetése és folytatása, háttérletöltés és WebSocket. NSURLConnection elavult, és nem ajánlott új projektekben használni.

Hogyan követhetem nyomon a letöltés előrehaladását URLSession-ben?

Az előrehaladás nyomon követéséhez a URLSessionDownloadDelegate delegáltat használjuk a urlSession(_:downloadTask:didWriteData:totalBytesWritten:totalBytesExpectedToWrite) metódussal. Alternatívaként a dataTask esetében feliratkozhat az URLSessionTaskDelegate-re, és frissítéseket kaphat a didSendBodyData-n keresztül.

Hogyan hajthatok végre háttérletöltést az URLSession-nel?

A háttérletöltés a .background(withIdentifier:) konfiguráción keresztül állítható be. Az alkalmazás regisztrál egy befejezési kezelőt az AppDelegate-ben, és az eredményeket még minimalizálás vagy bezárás után is megkapja. A rendszer kezeli a letöltést, és értesíti az alkalmazást a sessionDidFinishEvents delegált segítségével.

Használható az URLSession WebSocket-tel?

Igen, iOS 13-tól az URLSession támogatja a WebSocketet a URLSessionWebSocketTask osztályon keresztül. A webSocketTask(with:) metódussal jön létre, és send, receive metódusokat biztosít szöveges és bináris üzenetek támogatásával, valamint ping/pong-ot a kapcsolat fenntartásához.

Hogyan állíthatok be időtúllépést az URLSession-ben?

Az időtúllépések az URLSessionConfiguration-en keresztül állíthatók be: a timeoutIntervalForRequest (válaszra várás a kérésre) és a timeoutIntervalForResource (a teljes letöltés maximális ideje) tulajdonságokkal. Alapértelmezés: 60 másodperc a kérésre és 7 nap az erőforrásra.

Összefoglaló

  • URLSession — natív Apple API hálózati kérésekhez, támogatja a HTTP-t, háttérletöltést és WebSocketet
  • Három konfigurációs típus (.default, .ephemeral, .background) határozza meg a munkamenet viselkedését
  • Négy feladattípus fedi le az összes forgatókönyvet: dataTask, downloadTask, uploadTask, webSocketTask
  • Delegáltak lehetővé teszik a hitelesítés, előrehaladás és átirányítások kezelését
  • Async/await iOS 15-től olvashatóbbá és tömörebbé teszi az URLSession kódot
  • URLSession vagy Alamofire választása a projekt méretétől függ — az URLSession elegendő az egyszerű feladatokhoz

Kulcsrakész mobilalkalmazást fejlesztünk

Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.

Projekt megbeszélése

Olvassa el is