URLSession — ay ang API para sa mga network request sa iOS at macOS, bahagi ng Foundation framework na nagbibigay ng pinag-isang interface para sa pagtatrabaho sa HTTP, HTTPS, background download, at WebSocket. Pinalitan nito ang lumang NSURLConnection at naging pangunahing network tool para sa mga Apple developer. Ayon sa Apple Developer Documentation (2025), ang URLSession ay nagpoproseso ng higit sa 90% ng network traffic sa mga application para sa iPhone at iPad.
Mga Pangunahing Punto
URLSession — ay ang API para sa network operations na ipinakilala ng Apple sa iOS 7 at macOS 10.9. Pinalitan nito ang NSURLConnection at nagbigay ng mas flexible at malakas na modelo para sa pagtatrabaho sa network. Ang library ay sumusuporta sa HTTP/1.1, HTTP/2, HTTP/3 at WebSocket, pati na rin ang background session para sa pag-download ng data.
Ang pangunahing bentahe ng URLSession kumpara sa lumang NSURLConnection — suporta para sa maraming sabay-sabay na koneksyon sa pamamagitan ng iisang session, nako-customize na configuration, at kakayahang i-pause at ipagpatuloy ang mga download. Session ay nagpapangkat ng isang set ng network tasks na may karaniwang setting: caching, cookie policy, time-out, TLS certificate.
Sa iOS, ang URLSession ay gumagana sa system DNS cache, power management, at background process. Kapag na-minimize ang app, maaaring ipagpatuloy ng system ang pag-download ng data sa pamamagitan ng background session, at pagkatapos makumpleto, abisuhan ang app sa pamamagitan ng completion handler. Ang background session ay lalong kapaki-pakinabang para sa pag-download ng malalaking file, pag-update ng content, at pag-sync ng data sa mga application para sa pagtatrabaho sa mga dokumento at media file. Para sa pagtatrabaho sa background session, kailangan i-implement ang URLSessionDelegate at ipasa ang configuration identifier kapag gumagawa ng session — ginagamit ng system ang identifier na ito para ma-restore ang session pagkatapos i-restart ang app.
Isang mahalagang bentahe ng URLSession ay ang suporta para sa HTTP/2 at HTTP/3. Ang multiplexing ng HTTP/2 ay nagbibigay-daan sa pagpapadala ng maraming request sa pamamagitan ng isang TCP connection, na nagpapababa ng latency at server load. Ang HTTP/3, na batay sa QUIC protocol sa ibabaw ng UDP, ay nagbibigay ng mas mabilis na pagtatatag ng koneksyon sa pamamagitan ng pag-aalis ng TCP handshake.
Ang arkitektura ng URLSession ay binubuo ng tatlong pangunahing bahagi: configuration ng session, ang session mismo, at ang mga gawain (tasks). Bawat bahagi ay responsable para sa aspeto ng network interaction, at ang kanilang kombinasyon ay tumutukoy sa pag-uugali ng app kapag nagtatrabaho sa network.
Ang configuration ay nagtatakda ng session parameters — mula sa time-out hanggang sa caching policies. May tatlong uri: .default (standard na may disk cache), .ephemeral(walang cache at cookie), at .background (para sa background download). Sa configuration ay maaaring itakda ang maximum na bilang ng koneksyon sa bawat host, time-out ng request at resource, TLS policy, at proxy.
URLSessionTask — ay ang base class para sa lahat ng network operations. Ang pangunahing subclasses: URLSessionDataTask para sa GET at POST request na may data return sa memory, URLSessionDownloadTask para sa pag-download ng file sa disk, URLSessionUploadTask para sa pag-upload ng file sa server, at URLSessionWebSocketTask para sa pagtatrabaho sa WebSocket mula noong iOS 13.
Ang session delegate ay tumatanggap ng mga event tungkol sa progress ng tasks: pagtanggap ng data, pagkumpleto ng download, authentication errors, redirect. URLSessionDelegate at ang mga subprotocol nito ay nagbibigay-daan sa pag-intercept ng TLS certificate sa authentication, pamamahala ng response caching sa pamamagitan ng URLCache, at pag-monitor ng progress ng pag-download ng malalaking file. Bilang alternatibo, maaaring gumamit ng closures (completion handlers) sa mga simpleng kaso kung saan hindi kailangan ang processing ng intermediate events.
Ang basic scenario ng pagtatrabaho sa URLSession ay ganito: gumawa ng configuration, batay dito — session, pagkatapos sa pamamagitan ng session ay gumawa ng task na may URL request, at i-start ang task. Tingnan natin ang halimbawa ng GET request na may closure. Ang pattern na ito ay ginagamit sa karamihan ng iOS application para kumuha ng data mula sa REST API, mag-load ng mga larawan, at makipag-ugnayan sa cloud services.
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("Error: \(error!.localizedDescription)")
return
}
if let json = try? JSONSerialization.jsonObject(with: data) {
print("JSON: \(json)")
}
}
task.resume()
Sa halimbawa ay ginagamit ang URLSession.shared — singleton na may .default configuration para sa simpleng request. Ang dataTask ay gumagawa ng asynchronous operation, ngunit hindi ito sinisimulan — kailangang tawagin ang resume(). Ang closure ay naisasagawa pagkatapos makumpleto ang request at nagbabalik ng data, response o error. Para sa custom session na may sariling configuration, gamitin ang initializer na URLSession(configuration:), na nagbibigay-daan sa pagtatakda ng caching policies, time-out, maximum na bilang ng koneksyon, default na HTTP headers, at proxy settings para sa lahat ng session task. Ang approach na ito ay nagbibigay ng buong kontrol sa network behavior sa app.
Ang URLSession ay sumusuporta sa pag-download ng file na may kakayahang i-pause at ipagpatuloy, pati na rin ang background download. DownloadTask ay nagse-save ng file sa temporary directory, at sa completion closure ay kailangan itong ilipat sa permanenteng lokasyon.
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()
Ang parameter na location sa closure ay tumutukoy sa temporary file na kailangang ilipat, kung hindi ay tatanggalin ito ng system pagkatapos lumabas ng closure. Para sa pagsubaybay ng progress, ginagamit ang delegate na URLSessionDownloadDelegate na may method na didWriteData, na nagpapadala ng bilang ng mga byte na naisulat at kabuuang laki ng file — ang data na ito ay maaaring gamitin para magpakita ng progress bar sa user interface. Ang background session na may downloadTask ay nagbibigay-daan sa pagpapatuloy ng pag-download kahit na na-minimize ang app, at pagkatapos makumpleto ay tinatawagan ng system ang handler sa AppDelegate.
Ang Alamofire — ay isang Swift library na binuo sa ibabaw ng URLSession na nagbibigay ng mas declarative interface. Ang pagpili sa pagitan ng native API at Alamofire ay depende sa pagiging kumplikado ng proyekto at preferences ng team.
| Kriteria | URLSession | Alamofire |
|---|---|---|
| Dependencies | Wala, naka-built sa Foundation | Nangangailangan ng SPM o CocoaPods |
| Syntax | Imperative na may closures | Declarative na may chains |
| JSON processing | JSONSerialization manual | responseDecodable na may Codable |
| Interceptors | Sa pamamagitan ng delegates | RequestInterceptor, EventMonitor |
| Progress | Sa pamamagitan ng delegate | downloadProgress, uploadProgress |
Para sa simpleng proyekto URLSession ay sapat at hindi nagdadagdag ng dependencies. Ang Alamofire ay nabibigyang katwiran sa mga proyektong may maraming network request, kumplikadong error handling, at pangangailangan para sa concise syntax. Ang parehong teknolohiya ay gumagamit ng common na pundasyon ng URLSessionConfiguration at compatible sa isa't isa. Sa pagpili, dapat isaalang-alang na ang URLSession ay ganap na kontrolado ng Apple at ina-update kasama ng iOS, habang ang Alamofire ay nangangailangan ng compatibility support sa mga bagong OS version mula sa mga developer ng library.
Ang modernong Swift ay sumusuporta sa async/await, na ginagawang mas nababasa ang network request kumpara sa closures. Tingnan natin ang parehong GET request gamit ang asynchronous syntax.
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
}
Ang method na data(from:) ay available mula noong iOS 15 at macOS 12. Ito ay nagbabalik ng tuple (Data, URLResponse) at nagta-throw ng error kung may problema sa network. Ang JSONDecoder na may Codable model ay awtomatikong nagde-deserialize ng response — nito ay pinapalitan ang mahirap na JSONSerialization mula sa nakaraang halimbawa.
Para sa POST request na may JSON body, ginagamit ang URLRequest kung saan naka-configure ang method, Content-Type headers, at body ng request sa anyo ng Data. Ang async/await ay ginagawang concise at malinaw ang prosesong ito, at ang error handling ay simple sa pamamagitan ng do-catch block.
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)
}
Mga Madalas Itanong
Ang URLSession ay ang modernong kapalit ng NSURLConnection, na ipinakilala sa iOS 7. Mga pangunahing pagkakaiba: suporta para sa maraming koneksyon sa pamamagitan ng sessions, pag-pause at pag-resume ng tasks, background download, at WebSocket. NSURLConnection ay luma na at hindi inirerekomenda para sa mga bagong proyekto.
Para sa pagsubaybay ng progress, gamitin ang delegate na URLSessionDownloadDelegate na may method na urlSession(_:downloadTask:didWriteData:totalBytesWritten:totalBytesExpectedToWrite). Bilang alternatibo, para sa dataTask ay maaaring mag-subscribe sa URLSessionTaskDelegate at makatanggap ng updates sa pamamagitan ng didSendBodyData.
Ang background download ay naka-configure sa pamamagitan ng .background(withIdentifier:). Ang app ay nagre-register ng completion handler sa AppDelegate at tumatanggap ng mga resulta kahit na na-minimize o na-close. Ang system ay namamahala sa download at nag-aabiso sa app sa pamamagitan ng delegate na sessionDidFinishEvents.
Oo, mula noong iOS 13 ang URLSession ay sumusuporta sa WebSocket sa pamamagitan ng class na URLSessionWebSocketTask. Ito ay ginagawa gamit ang method na webSocketTask(with:) at nagbibigay ng mga method na send, receive na may suporta para sa text at binary na mensahe, pati na rin ang ping/pong para mapanatili ang koneksyon.
Ang time-out ay naka-configure sa pamamagitan ng URLSessionConfiguration: properties na timeoutIntervalForRequest (paghihintay ng tugon sa request) at timeoutIntervalForResource (maximum na oras ng buong download). Default: 60 segundo para sa request at 7 araw para sa resource.
Buod
Gagawa kami ng mobile application na turnkey
Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.
Basahin din