URLSession — bu nima, tarmoq API si va iOS-da qanday ishlaydi

Muallif: IT Sectr Nashr etilgan: 2026-03-07 O'qish vaqti: 8 daq

URLSession — iOS va macOS-da tarmoq so'rovlari uchun API bo'lib, Foundation framework tarkibiga kiradi va HTTP, HTTPS, fon yuklash hamda WebSocket bilan ishlash uchun yagona interfeysni taqdim etadi. U eskirgan NSURLConnection o'rnini egalladi va Apple dasturchilari uchun asosiy tarmoq vositasiga aylandi. Apple Developer Documentation (2025) ma'lumotlariga ko'ra, URLSession iPhone va iPad ilovalarida tarmoq trafigining 90% dan ortig'ini qayta ishlaydi.

Asosiy ma'lumotlar

  • URLSession — Apple-ning tarmoq so'rovlari, HTTP, fayl yuklash va WebSocket uchun mahalliy API si
  • Vazifa turlari: dataTask (so'rovlar), downloadTask (yuklab olish), uploadTask (yuborish), webSocketTask
  • Konfiguratsiya sessiyaning harakatini belgilaydi: keshlash, vaqt chegaralari, proksi, hisob ma'lumotlari
  • Asinxronlik closure, delegate yoki zamonaviy async/await orqali amalga oshiriladi
  • Fon sessiyalari ilova kichiklashtirilganda ham ma'lumot yuklash imkonini beradi

URLSession nima?

URLSession — Apple tomonidan iOS 7 va macOS 10.9 da taqdim etilgan tarmoq operatsiyalari uchun API. U NSURLConnection o'rnini egalladi va tarmoq bilan ishlash uchun yanada moslashuvchan va kuchli modelni taqdim etdi. Kutubxona HTTP/1.1, HTTP/2, HTTP/3 va WebSocket-ni, shuningdek ma'lumot yuklash uchun fon sessiyalarini qo'llab-quvvatlaydi.

URLSession-ning eski NSURLConnection-dan asosiy ustunligi — yagona sessiya orqali bir nechta parallel ulanishlarni qo'llab-quvvatlashi, sozlanishi konfiguratsiyalar va yuklashlarni to'xtatib davom ettirish imkoniyatidir. Sessiya umumiy sozlamalarga ega tarmoq vazifalari guruhini birlashtiradi: keshlash, cookie siyosati, vaqt chegaralari, TLS sertifikatlari.

iOS da URLSession tizim DNS keshi, energiya boshqaruvi va fon jarayonlari bilan ishlaydi. Ilova kichiklashtirilganda tizim fon sessiyasi orqali ma'lumot yuklashni davom ettirishi mumkin va tugagandan so'ng ilovani yakunlash handler orqali xabardor qiladi. Fon sessiyalari katta fayllarni yuklash, kontentni yangilash va hujjatlar hamda media fayllar bilan ishlovchi ilovalarda ma'lumotlarni sinxronlashtirish uchun ayniqsa foydalidir. Fon sessiyalari bilan ishlash uchun URLSessionDelegate-ni amalga oshirish va sessiya yaratishda konfiguratsiya identifikatorini uzatish kerak — tizim ushbu identifikatordan ilova qayta ishga tushirilgandan keyin sessiyani tiklash uchun foydalanadi.

URLSession-ning muhim ustunligi HTTP/2 va HTTP/3 ni qo'llab-quvvatlashidir. HTTP/2 multipleksatsiyasi bir TCP ulanishi orqali bir nechta so'rovlarni yuborish imkonini beradi, bu kechikishlarni va server yukini kamaytiradi. UDP ustidagi QUIC protokoliga asoslangan HTTP/3, TCP qo'l siqishni bartaraf etish orqali yanada tezroq ulanish o'rnatishni ta'minlaydi.

URLSession arxitekturasi

URLSession arxitekturasi uchta asosiy komponentdan iborat: sessiya konfiguratsiyasi, sessiyaning o'zi va vazifalar (tasks). Har bir komponent tarmoq o'zaro ta'sirining o'z jihati uchun javobgardir va ularning kombinatsiyasi ilovaning tarmoq bilan ishlashdagi xatti-harakatini belgilaydi.

URLSessionConfiguration

Konfiguratsiya sessiya parametrlarini belgilaydi — vaqt chegaralaridan keshlash siyosatlarigacha. Uch tur mavjud: .default (disk keshi bilan standart), .ephemeral (kesh va cookiesiz) va .background (fon yuklash uchun). Konfiguratsiyada xost bo'yicha maksimal ulanishlar soni, so'rov va resurs vaqt chegarasi, TLS siyosati va proksi o'rnatilishi mumkin.

URLSessionTask vazifa turlari

URLSessionTask — barcha tarmoq operatsiyalari uchun asosiy sinf. Asosiy kichik sinflar: GET va POST so'rovlari uchun xotirada ma'lumot qaytaradigan URLSessionDataTask, fayllarni diskka yuklab olish uchun URLSessionDownloadTask, fayllarni serverga yuborish uchun URLSessionUploadTask va iOS 13 dan WebSocket bilan ishlash uchun URLSessionWebSocketTask.

URLSession Delegate lari

Sessiya delegati vazifalarning borishi haqida hodisalarni oladi: ma'lumotlarni qabul qilish, yuklashning tugashi, autentifikatsiya xatolari, qayta yo'naltirishlar. URLSessionDelegate va uning subprotokollari autentifikatsiya paytida TLS sertifikatlarini tutib olish, URLCache orqali javob keshlashni boshqarish va katta fayllarni yuklash jarayonini kuzatish imkonini beradi. Muqobil ravishda, oraliq hodisalarni qayta ishlash talab qilinmaydigan oddiy holatlarda closure-lardan (completion handlers) foydalanish mumkin.

URLSession bilan so'rovlarni bajarish

URLSession bilan ishlashning asosiy stsenariysi quyidagicha: konfiguratsiya yaratiladi, uning asosida sessiya, so'ngra sessiya orqali URL so'rovi bilan vazifa yaratiladi va vazifa ishga tushiriladi. Keling, closure bilan GET so'rovi misolini ko'rib chiqaylik. Bu namuna ko'pchilik iOS ilovalarida REST API dan ma'lumot olish, rasmlarni yuklash va bulut xizmatlari bilan o'zaro aloqa qilish uchun ishlatiladi.

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("Xato: \(error!.localizedDescription)")
        return
    }
    if let json = try? JSONSerialization.jsonObject(with: data) {
        print("JSON: \(json)")
    }
}
task.resume()

Misolda URLSession.shared ishlatilgan — oddiy so'rovlar uchun .default konfiguratsiyasiga ega singleton. dataTask asinxron operatsiya yaratadi, lekin uni ishga tushirmaydi — albatta resume() chaqirilishi kerak. Closure so'rov tugagandan so'ng ishga tushadi va data, response yoki error qaytaradi. O'z konfiguratsiyasiga ega moslashtirilgan sessiya uchun URLSession(configuration:) inizializatoridan foydalaning, bu keshlash siyosatlari, vaqt chegaralari, maksimal ulanishlar soni, standart HTTP sarlavhalari va sessiyaning barcha vazifalari uchun proksi sozlamalarini o'rnatish imkonini beradi. Bu yondashuv ilovada tarmoq xatti-harakati ustidan to'liq nazoratni beradi.

URLSession orqali fayllarni yuklab olish

URLSession to'xtatish va davom ettirish imkoniyati bilan fayl yuklashni, shuningdek fon yuklashni qo'llab-quvvatlaydi. DownloadTask faylni vaqtinchalik katalogga saqlaydi va yakunlash closure-da uni doimiy joyga ko'chirish kerak.

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()

Closure-dagi location parametri ko'chirilishi kerak bo'lgan vaqtinchalik faylni ko'rsatadi, aks holda tizim closure-dan chiqqandan keyin uni o'chirib tashlaydi. Jarayonni kuzatish uchun yozilgan baytlar soni va faylning umumiy hajmini uzatuvchi didWriteData metodi bilan URLSessionDownloadDelegate delegatidan foydalaniladi — bu ma'lumotlar foydalanuvchi interfeysida jarayon chizig'ini ko'rsatish uchun ishlatilishi mumkin. Fon sessiyalari downloadTask bilan ilova kichiklashtirilgandan keyin ham yuklashni davom ettirish imkonini beradi va tugagandan so'ng tizim AppDelegate da handlerni chaqiradi.

URLSession vs Alamofire

Alamofire — URLSession asosida qurilgan va deklarativ interfeysni taqdim etadigan Swift kutubxonasi. Mahalliy API va Alamofire o'rtasidagi tanlov loyihaning murakkabligi va jamoaning afzalliklariga bog'liq.

MezonURLSessionAlamofire
Bog'liqliklarYo'q, Foundation tarkibiga kiritilganSPM yoki CocoaPods talab qiladi
SintaksisClosure lar bilan imperativZanjirlar bilan deklarativ
JSON ni qayta ishlashJSONSerialization qo'ldaCodable bilan responseDecodable
InterceptorlarDelegate lar orqaliRequestInterceptor, EventMonitor
JarayonDelegate orqalidownloadProgress, uploadProgress

Oddiy loyihalar uchun URLSession yetarli va bog'liqlik qo'shmaydi. Alamofire ko'p tarmoq so'rovlari, murakkab xato boshqaruvi va ixcham sintaksis talab qiladigan loyihalarda oqlanadi. Ikkala texnologiya umumiy URLSessionConfiguration asosidan foydalanadi va bir-biri bilan mos keladi. Tanlashda URLSession to'liq Apple tomonidan nazorat qilinishi va iOS bilan birga yangilanishini hisobga olish kerak, Alamofire esa kutubxona ishlab chiqaruvchilari tomonidan yangi OT versiyalari bilan moslikni qo'llab-quvvatlashni talab qiladi.

URLSession kod misollari

Zamonaviy Swift async/await-ni qo'llab-quvvatlaydi, bu tarmoq so'rovlarini closure lar bilan solishtirganda o'qishni osonlashtiradi. Xuddi shu GET so'rovini asinxron sintaksis yordamida ko'rib chiqaylik.

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
}

data(from:) metodi iOS 15 va macOS 12 dan boshlab mavjud. U (Data, URLResponse) kortejini qaytaradi va tarmoq muammolari bo'lganda xato chiqaradi. Codable modeli bilan JSONDecoder avtomatik ravishda javobni deserializatsiya qiladi — bu oldingi misoldagi katta hajmli JSONSerialization o'rnini egallaydi.

JSON tanasi bilan POST so'rovi

JSON tanasi bilan POST so'rovlari uchun metod, Content-Type sarlavhalari va Data formatidagi so'rov tanasi sozlanadigan URLRequest ishlatiladi. Async/await bu jarayonni ixcham va tushunarli qiladi, xato boshqaruvi esa do-catch bloki orqali sodda.

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)
}

Tez-tez beriladigan savollar

URLSession NSURLConnection dan qanday farq qiladi?

URLSession — iOS 7 da taqdim etilgan NSURLConnection ning zamonaviy o'rnini bosuvchi. Asosiy farqlar: sessiyalar orqali bir nechta ulanishlarni qo'llab-quvvatlash, vazifalarni to'xtatish va davom ettirish, fon yuklash va WebSocket. NSURLConnection eskirgan va yangi loyihalarda foydalanish tavsiya etilmaydi.

URLSession da yuklash jarayonini qanday kuzatish mumkin?

Jarayonni kuzatish uchun urlSession(_:downloadTask:didWriteData:totalBytesWritten:totalBytesExpectedToWrite) metodi bilan URLSessionDownloadDelegate delegatidan foydalaniladi. Muqobil ravishda dataTask uchun URLSessionTaskDelegate-ga obuna bo'lish va didSendBodyData orqali yangilanishlarni olish mumkin.

URLSession bilan fon yuklashni qanday bajarish mumkin?

Fon yuklash .background(withIdentifier:) konfiguratsiyasi orqali sozlanadi. Ilova AppDelegate da yakunlash handlerni ro'yxatdan o'tkazadi va natijalarni kichiklashtirish yoki yopishdan keyin ham oladi. Tizim yuklashni boshqaradi va ilovani sessionDidFinishEvents delegati orqali xabardor qiladi.

URLSession WebSocket bilan ishlatilishi mumkinmi?

Ha, iOS 13 dan boshlab URLSession URLSessionWebSocketTask sinfi orqali WebSocket-ni qo'llab-quvvatlaydi. U webSocketTask(with:) metodi bilan yaratiladi va matnli va ikkilik xabarlarni qo'llab-quvvatlovchi send, receive metodlarini, shuningdek ulanishni saqlash uchun ping/pong ni taqdim etadi.

URLSession da vaqt chegarasini qanday sozlash mumkin?

Vaqt chegaralari URLSessionConfiguration orqali sozlanadi: timeoutIntervalForRequest (so'rovga javob kutish) va timeoutIntervalForResource (butun yuklashning maksimal vaqti). Standart: so'rov uchun 60 soniya va resurs uchun 7 kun.

Xulosa

  • URLSession — HTTP, fon yuklash va WebSocket-ni qo'llab-quvvatlovchi Apple-ning mahalliy tarmoq so'rovlari API si
  • Uch turdagi konfiguratsiya (.default, .ephemeral, .background) sessiyaning xatti-harakatini belgilaydi
  • To'rt turdagi vazifalar barcha stsenariylarni qamrab oladi: dataTask, downloadTask, uploadTask, webSocketTask
  • Delegate lar autentifikatsiya, jarayon va qayta yo'naltirishlarni boshqarish imkonini beradi
  • Async/await iOS 15 dan boshlab URLSession kodini yanada o'qiladigan va ixcham qiladi
  • URLSession yoki Alamofire tanlovi loyiha ko'lamiga bog'liq — URLSession oddiy vazifalar uchun yetarli

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing