URLSession — apa itu, API jaringan dan cara kerjanya di iOS

Penulis: IT Sectr Diterbitkan: 2026-03-07 Waktu membaca: 8 mnt

URLSession — adalah API untuk permintaan jaringan di iOS dan macOS, bagian dari Foundation framework yang menyediakan antarmuka terpadu untuk bekerja dengan HTTP, HTTPS, unduhan latar belakang, dan WebSocket. Ia menggantikan NSURLConnection yang sudah usang dan menjadi alat jaringan utama bagi pengembang Apple. Menurut Apple Developer Documentation (2025), URLSession memproses lebih dari 90% lalu lintas jaringan di aplikasi untuk iPhone dan iPad.

Poin Utama

  • URLSession — API asli Apple untuk permintaan jaringan, HTTP, unduhan file, dan WebSocket
  • Jenis tugas: dataTask (permintaan), downloadTask (unduh), uploadTask (unggah), webSocketTask
  • Konfigurasi sesi menentukan perilaku: caching, batas waktu, proksi, kredensial
  • Asinkronisitas diimplementasikan melalui closure, delegate, atau async/await modern
  • Sesi latar belakang memungkinkan pengunduhan data bahkan saat aplikasi diminimalkan

Apa itu URLSession?

URLSession — adalah API untuk operasi jaringan yang diperkenalkan oleh Apple di iOS 7 dan macOS 10.9. Ia menggantikan NSURLConnection dan menyediakan model yang lebih fleksibel dan kuat untuk bekerja dengan jaringan. Pustaka ini mendukung HTTP/1.1, HTTP/2, HTTP/3, dan WebSocket, serta sesi latar belakang untuk mengunduh data.

Keunggulan utama URLSession dibandingkan NSURLConnection lama — dukungan untuk beberapa koneksi simultan melalui satu sesi, konfigurasi yang dapat disesuaikan, dan kemampuan untuk menjeda dan melanjutkan unduhan. Sesi mengelompokkan sekumpulan tugas jaringan dengan pengaturan bersama: caching, kebijakan cookie, batas waktu, sertifikat TLS.

Di iOS, URLSession bekerja dengan cache DNS sistem, manajemen daya, dan proses latar belakang. Saat aplikasi diminimalkan, sistem dapat melanjutkan pengunduhan data melalui sesi latar belakang, dan setelah selesai, memberi tahu aplikasi melalui handler penyelesaian. Sesi latar belakang sangat berguna untuk mengunduh file besar, memperbarui konten, dan menyinkronkan data di aplikasi untuk bekerja dengan dokumen dan file media. Untuk bekerja dengan sesi latar belakang, perlu mengimplementasikan delegate URLSessionDelegate dan memberikan identifier konfigurasi saat membuat sesi — sistem menggunakan identifier ini untuk memulihkan sesi setelah aplikasi di-restart.

Keuntungan penting URLSession adalah dukungan untuk HTTP/2 dan HTTP/3. Multipleksing HTTP/2 memungkinkan pengiriman beberapa permintaan melalui satu koneksi TCP, yang mengurangi latensi dan beban server. HTTP/3, berdasarkan protokol QUIC di atas UDP, menyediakan pembentukan koneksi yang lebih cepat dengan menghilangkan jabat tangan TCP.

Arsitektur URLSession

Arsitektur URLSession terdiri dari tiga komponen kunci: konfigurasi sesi, sesi itu sendiri, dan tugas (tasks). Setiap komponen bertanggung jawab atas aspek tertentu dari interaksi jaringan, dan kombinasinya menentukan perilaku aplikasi saat bekerja dengan jaringan.

URLSessionConfiguration

Konfigurasi menetapkan parameter sesi — dari batas waktu hingga kebijakan caching. Ada tiga jenis: .default (standar dengan cache disk), .ephemeral (tanpa menyimpan cache dan cookie), dan .background (untuk unduhan latar belakang). Dalam konfigurasi dapat diatur jumlah maksimum koneksi per host, batas waktu permintaan dan sumber daya, kebijakan TLS, dan proksi.

Jenis Tugas URLSessionTask

URLSessionTask — kelas dasar untuk semua operasi jaringan. Subkelas utama: URLSessionDataTask untuk permintaan GET dan POST dengan pengembalian data di memori, URLSessionDownloadTask untuk mengunduh file ke disk, URLSessionUploadTask untuk mengirim file ke server, dan URLSessionWebSocketTask untuk bekerja dengan WebSocket sejak iOS 13.

Delegate URLSession

Delegate sesi menerima peristiwa tentang kemajuan tugas: penerimaan data, penyelesaian unduhan, kesalahan autentikasi, pengalihan. URLSessionDelegate dan subprotokolnya memungkinkan untuk mencegat sertifikat TLS saat autentikasi, mengelola caching respons melalui URLCache, dan memantau kemajuan unduhan file besar. Alternatifnya, closure (completion handlers) dapat digunakan dalam kasus sederhana di mana pemrosesan peristiwa antara tidak diperlukan.

Cara melakukan permintaan dengan URLSession

Skenario dasar bekerja dengan URLSession adalah sebagai berikut: dibuat konfigurasi, berdasarkan itu — sesi, kemudian melalui sesi dibuat tugas dengan permintaan URL, dan tugas dijalankan. Mari kita lihat contoh permintaan GET dengan closure. Pola ini digunakan di sebagian besar aplikasi iOS untuk mengambil data dari REST API, memuat gambar, dan berinteraksi dengan layanan cloud.

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

Dalam contoh digunakan URLSession.shared — singleton dengan konfigurasi .default untuk permintaan sederhana. dataTask membuat operasi asinkron, tetapi tidak menjalankannya — harus memanggil resume(). Closure dijalankan setelah permintaan selesai dan mengembalikan data, response, atau error. Untuk sesi kustom dengan konfigurasi sendiri, gunakan inisialisasi URLSession(configuration:), yang memungkinkan pengaturan kebijakan caching, batas waktu, jumlah maksimum koneksi, header HTTP default, dan pengaturan proksi untuk semua tugas sesi. Pendekatan ini memberikan kontrol penuh atas perilaku jaringan di aplikasi.

Mengunduh file melalui URLSession

URLSession mendukung pengunduhan file dengan kemampuan menjeda dan melanjutkan, serta unduhan latar belakang. DownloadTask menyimpan file ke direktori sementara, dan di closure penyelesaian harus dipindahkan ke lokasi permanen.

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

Parameter location di closure menunjuk ke file sementara yang harus dipindahkan, jika tidak sistem akan menghapusnya setelah keluar dari closure. Untuk melacak kemajuan, digunakan delegate URLSessionDownloadDelegate dengan metode didWriteData, yang mengirimkan jumlah byte yang ditulis dan ukuran total file — data ini dapat digunakan untuk menampilkan bilah kemajuan di antarmuka pengguna. Sesi latar belakang dengan downloadTask memungkinkan melanjutkan unduhan bahkan setelah aplikasi diminimalkan, dan setelah selesai sistem memanggil handler di AppDelegate.

URLSession vs Alamofire

Alamofire — adalah pustaka Swift yang dibangun di atas URLSession yang menyediakan antarmuka yang lebih deklaratif. Pilihan antara API asli dan Alamofire tergantung pada kompleksitas proyek dan preferensi tim.

KriteriaURLSessionAlamofire
KetergantunganTidak ada, bawaan FoundationMemerlukan SPM atau CocoaPods
SintaksImperatif dengan closureDeklaratif dengan rantai
Pemrosesan JSONJSONSerialization manualresponseDecodable dengan Codable
InterceptorMelalui delegateRequestInterceptor, EventMonitor
KemajuanMelalui delegatedownloadProgress, uploadProgress

Untuk proyek sederhana URLSession sudah cukup dan tidak menambah ketergantungan. Alamofire dibenarkan dalam proyek dengan banyak permintaan jaringan, penanganan kesalahan yang kompleks, dan kebutuhan sintaks yang ringkas. Kedua teknologi menggunakan fondasi bersama URLSessionConfiguration dan kompatibel satu sama lain. Saat memilih, perlu dipertimbangkan bahwa URLSession sepenuhnya dikendalikan oleh Apple dan diperbarui bersama iOS, sementara Alamofire memerlukan dukungan kompatibilitas dengan versi OS baru dari pengembang pustaka.

Contoh kode URLSession

Swift modern mendukung async/await, yang membuat permintaan jaringan lebih mudah dibaca dibandingkan dengan closure. Mari kita lihat permintaan GET yang sama menggunakan sintaks asinkron.

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
}

Metode data(from:) tersedia sejak iOS 15 dan macOS 12. Ia mengembalikan tuple (Data, URLResponse) dan melempar kesalahan jika ada masalah jaringan. JSONDecoder dengan model Codable secara otomatis mendeserialisasi respons — ini menggantikan JSONSerialization yang rumit dari contoh sebelumnya.

Permintaan POST dengan body JSON

Untuk permintaan POST dengan body JSON, digunakan URLRequest di mana metode, header Content-Type, dan body permintaan dalam bentuk Data dikonfigurasi. Async/await membuat proses ini ringkas dan jelas, dan penanganan kesalahan sederhana melalui blok do-catch.

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

Pertanyaan yang Sering Diajukan

Apa perbedaan URLSession dengan NSURLConnection?

URLSession adalah pengganti modern NSURLConnection, diperkenalkan di iOS 7. Perbedaan utama: dukungan untuk banyak koneksi melalui sesi, menjeda dan melanjutkan tugas, unduhan latar belakang, dan WebSocket. NSURLConnection sudah usang dan tidak disarankan untuk digunakan di proyek baru.

Bagaimana cara melacak kemajuan unduhan di URLSession?

Untuk melacak kemajuan, gunakan delegate URLSessionDownloadDelegate dengan metode urlSession(_:downloadTask:didWriteData:totalBytesWritten:totalBytesExpectedToWrite). Alternatifnya, untuk dataTask dapat berlangganan ke URLSessionTaskDelegate dan menerima pembaruan melalui didSendBodyData.

Bagaimana cara melakukan unduhan latar belakang dengan URLSession?

Unduhan latar belakang dikonfigurasi melalui .background(withIdentifier:). Aplikasi mendaftarkan handler penyelesaian di AppDelegate dan menerima hasil bahkan setelah diminimalkan atau ditutup. Sistem mengelola unduhan dan memberi tahu aplikasi melalui delegate sessionDidFinishEvents.

Bisakah URLSession digunakan dengan WebSocket?

Ya, sejak iOS 13 URLSession mendukung WebSocket melalui kelas URLSessionWebSocketTask. Ini dibuat dengan metode webSocketTask(with:) dan menyediakan metode send, receive dengan dukungan untuk pesan teks dan biner, serta ping/pong untuk mempertahankan koneksi.

Bagaimana cara mengatur batas waktu di URLSession?

Batas waktu diatur melalui URLSessionConfiguration: properti timeoutIntervalForRequest (menunggu respons permintaan) dan timeoutIntervalForResource (waktu maksimum seluruh unduhan). Default: 60 detik untuk permintaan dan 7 hari untuk sumber daya.

Kesimpulan

  • URLSession — API asli Apple untuk permintaan jaringan, mendukung HTTP, unduhan latar belakang, dan WebSocket
  • Tiga jenis konfigurasi (.default, .ephemeral, .background) menentukan perilaku sesi
  • Empat jenis tugas mencakup semua skenario: dataTask, downloadTask, uploadTask, webSocketTask
  • Delegate memungkinkan pengelolaan autentikasi, kemajuan, dan pengalihan
  • Async/await sejak iOS 15 membuat kode URLSession lebih mudah dibaca dan ringkas
  • Pilihan URLSession atau Alamofire tergantung pada skala proyek — URLSession cukup untuk tugas sederhana

Kami akan mengembangkan aplikasi seluler turnkey

IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.

Diskusikan proyek

Baca juga