Dimulai dengan Alamofire

Untuk memulai integrating Alamofire ke dalam proyek iOS anda, anda dapat menambahkan pustaka menggunakan Pengurus Paket Swift, CocoaPods, atau Kartago. Swift Package Manager adalah pendekatan yang disarankan saat dibangun ke dalam Xcode. Tambahkan paket Alamofire dengan navigasi ke File[]] → Add Packages[ dan masuk ke dalam repositori URL . Tentukan versi 5.0.0 atau setelahnya. Alternatif, jika anda menggunakan Cocoapods, tambahkan ke Podfile dan jalankan .[butuh rujukan] Setelah ketergantungan terintegrasi, anda perlu menggunakan file jaringan Swift:Alorama

import Alamofire

Nama samarannya adalah software untuk menyediakan titik masuk yang nyaman untuk semua operasi HTTP umum. Di bawah tudung, ia menggunakan tetapi abstrak jauh dari boilerplat seperti manajemen antrian, pengkodean parameter, dan validasi respon. Hal ini memungkinkan Anda untuk fokus pada logika bisnis daripada jaringan pipa. Untuk rincian lebih lanjut pada lapisan jaringan yang mendasari, mengacu pada Dokumentasi URLSSession Apple].

PERINTAH LAKUKAN PERINTAH

Mengambil data dari titik akhir yang ESTful adalah operasi yang paling umum. Alamofire membuat permintaan GET menjadi ringkas dan dapat dibaca. Contoh berikut mengambil daftar pengguna dari API hipotetis:

AF.request("https://api.example.com/users")
 .validate()
 .responseDecodable(of: [User].self) { response in
 switch response.result {
 case .success(let users):
 print("Fetched \(users.count) users")
 case .failure(let error):
 print("Request failed with error: \(error)")
 }
 }

Keanekaan acenose penggunaan , yang memanfaatkan protokol milik Swift untuk secara otomatis mengurai JSON ke dalam objek model. Definisikan sebuah struct yang sesuai dengan (atau ). Pendekatan ini menghilangkan serialisasi JSON manual dan memperbaiki keselamatan tipe.

Parameter Pertanyaan dan Pengepala Penambahan

Banyak API LOGAL REST memerlukan parameter pertanyaan atau header HTTP langganan. Alamofire menerima parameter sebagai kamus dan menangani pengkodean secara otomatis untuk permintaan GET (parameter ditambahkan ke URL). Pengepala ditambahkan melalui parameter :

let parameters: Parameters = ["page": 1, "limit": 20]
let headers: HTTPHeaders = [
 "Authorization": "Bearer YOUR_TOKEN",
 "Accept": "application/json"
]

AF.request("https://api.example.com/users",
 parameters: parameters,
 headers: headers)
 .validate()
 .responseDecodable(of: [User].self) { response in
 // handle response
 }

Alamofire secara otomatis mengkodekan URL parameter dan melampirkannya ke URL permintaan. Untuk pengkodean gubahan, anda dapat menyatakan sebuah kejadian yang eksplisit, seperti .

Validasi Responsiun

Metode AFAIL secara otomatis memeriksa kode status HTTP dalam kisaran 200 ⁇ 99 dan menolak respon dengan jenis konten yang tidak dapat diterima. Anda juga dapat menambahkan kriteria validasi kustom. Misalnya, untuk menerima hanya 200 dan ⁇ kode status:

.validate(statusCode: [200, 201])

Kegagalan pengesahan dilaporkan sebagai kesalahan dalam penanganan respon, memungkinkan Anda untuk menerapkan penanganan kesalahan yang konsisten di seluruh aplikasi Anda.

KEMBALI KEMBALI

Secara tipikal sumber daya yang dibuat atau memperbarui sumber daya membutuhkan permintaan POST dengan badan permintaan. Alamofire mendukung strategi pengkodean ganda, dengan yang paling umum untuk API RUANG. Contoh berikut mengirim objek pengguna baru ke server:

let newUser: [String: Any] = [
 "name": "Jane Doe",
 "email": "[email protected]"
]

AF.request("https://api.example.com/users",
 method: .post,
 parameters: newUser,
 encoding: JSONEncoding.default)
 .validate()
 .responseDecodable(of: User.self) { response in
 switch response.result {
 case .success(let createdUser):
 print("User created: \(createdUser)")
 case .failure(let error):
 print("Error creating user: \(error)")
 }
 }

Jika API mengharapkan data formulir URL ⁇ encoded (misalnya, untuk pertukaran token OAuth), gunakan sebagai gantinya. Untuk berkas upload atau data campuran, Alamofire menyediakan yang menyusun permintaan multipart. Contoh:

AF.upload(multipartFormData: { multipartFormData in
 multipartFormData.append(Data("Jane Doe".utf8), withName: "name")
 multipartFormData.append(imageData, withName: "avatar", fileName: "avatar.jpg", mimeType: "image/jpeg")
}, to: "https://api.example.com/users")
 .validate()
 .responseDecodable(of: User.self) { response in
 // handle response
 }

Bekerja sama dengan Metode HTTP Lain

API ESTful sering kali membutuhkan PUT (update penuh), PATCH (update parsial), dan operasi DELETE (removal). Alamofire menangani ini dengan metode yang sama; cukup ubah parameter .

PUT dan PPATK

Untuk memperbarui sumber daya yang ada, gunakan atau . Badan permintaan berisi bidang yang diperbarui:

let updatedFields: [String: Any] = ["name": "Jane Smith"]
AF.request("https://api.example.com/users/123",
 method: .patch,
 parameters: updatedFields,
 encoding: JSONEncoding.default)
 .validate()
 .responseDecodable(of: User.self) { response in
 // handle updated user
 }

lesst

Pemampasan sumber daya biasanya tidak memerlukan badan permintaan.

AF.request("https://api.example.com/users/123",
 method: .delete)
 .validate()
 .response { response in
 if let error = response.error {
 print("Delete failed: \(error)")
 } else {
 print("User deleted successfully")
 }
 }

Selalu periksa dokumentasi API untuk kode status yang diharapkan (misalnya, 204 No Content).

Penanganan dan Pemantauan Jaringan Galat Lanjutan

Penanganan kesalahan gnosis gnosis untuk pengalaman pengguna tanpa kulit. Alamofire melaporkan kesalahan melalui tipe , yang membedakan antara kesalahan jaringan (timeout, no connection), kesalahan server (bad status code), dan kegagalan serialisasi (invalid JSON). Anda dapat menginspeksi kesalahan untuk memberikan umpan balik spesifik:

switch response.result {
case .success(let value):
 // handle success
case .failure(let error):
 if let afError = error.asAFError {
 switch afError {
 case .sessionTaskFailed(let sessionError):
 print("Network issue: \(sessionError.localizedDescription)")
 case .responseValidationFailed(let reason):
 print("Validation failed: \(reason)")
 default:
 print("Other Alamofire error: \(afError.localizedDescription)")
 }
 }
}

Kebolehcapaian Jaringan Rela

Mengeluarkan sebelum membuat permintaan, anda mungkin ingin memeriksa ketersediaan jaringan. ] Alamofire memantau perubahan konektivitas. Mulai memantau awal dalam daur hidup aplikasi anda:

let reachabilityManager = NetworkReachabilityManager()
reachabilityManager?.startListening { status in
 switch status {
 case .notReachable:
 print("Network is not reachable")
 case .reachable(.cellular):
 print("Connected via cellular")
 case .reachable(.ethernetOrWiFi):
 print("Connected via WiFi")
 case .unknown:
 print("Unknown status")
 }
}

Gunakan ini untuk menginformasikan permintaan pengguna atau penundaan. Untuk pola yang lebih maju, pertimbangkan menggabungkan kemampuan jangkau dengan mekanisme coba ulang, seperti mencoba kembali permintaan yang gagal ketika konektivitas dikembalikan.

Praktek Terbaik untuk Jaringan Produksi-Ready

Pola yang telah ditetapkan akan menjaga agar lapisan jaringan Anda tetap dapat dijaga, aman, dan tetap berfungsi.

1. Model yang Mudah Disuap

Keyword Always definasi tipe Swift yang sesuai dengan (atau ) untuk parsing respon. Ini menghilangkan manipulasi JSON manual dan mengurangi bug. Gunakan atau under level jika Anda membutuhkan konten dinamis. Panduan Apple Codable meliputi pemetaan lanjutan dengan tombol custom.

2. Manajemen Otentikasi dan Token yang Lebih Aman dan Aman 2.

Jangan pernah meng-hardcode kunci API atau token. Simpan nilai sensitif di Keychain dan lampirkan mereka untuk meminta melalui header . Untuk aliran OAuth, laksanakan interseptor res segar token. Protokol Alamofire memungkinkan Anda untuk secara otomatis mencoba kembali permintaan setelah memperoleh token baru. Rangka sampel:

class AuthInterceptor: RequestInterceptor {
 func adapt(_ urlRequest: URLRequest, for session: Session, completion: @escaping (Result<URLRequest, Error>) -> Void) {
 var request = urlRequest
 request.setValue("Bearer \(token)", forHTTPHeaderField: "Authorization")
 completion(.success(request))
 }

 func retry(_ request: Request, for session: Session, dueTo error: Error, completion: @escaping (RetryResult) -> Void) {
 // Check if error is 401, refresh token, then retry
 completion(.retryWithDelay(1.0))
 }
}

3. Konkurrensi dengan async/await

Alamoquirofire 5 mendukung sepenuhnya model konkurensi Swift. Gunakan versi dari metode permintaan untuk menulis lebih bersih, kode linear:

do {
 let users = try await AF.request("https://api.example.com/users")
 .serializingDecodable([User].self)
 .value
 print("Users: \(users)")
} catch {
 print("Error: \(error)")
}

¡Cycha akan menggabungkan ini dengan konkurensi terstruktur (kelompok task, aktor) untuk mengelola permintaan ganda dan menghindari panggilan kembali neraka.

4 ⁇ . Implementasi Caching

Untuk mengurangi panggilan jaringan dan meningkatkan dukungan offline, konfigurasi kebijakan caching. Alamofire menghormati (contoh, ). Anda juga dapat menggunakan gubahan dengan kapasitas disk yang sesuai:

let cache = URLCache(memoryCapacity: 10 * 1024 * 1024,
 diskCapacity: 50 * 1024 * 1024,
 diskPath: "networking_cache")
let session = Session(configuration: URLSessionConfiguration.default)
session.sessionConfiguration.urlCache = cache

2011: 2011/ 2011/ 2011/ 2011/ 2011/ 2011/ 2011/ 2011/ 2011/ 2011/ 2011/ 2011/ 2011/F.

Tes unit tulis untuk klien API Anda menggunakan data ejek. Alamofire dapat disuntik dengan protokol ejek yang mengembalikan respon pradefinisi. Pertimbangkan menggunakan pustaka seperti atau building ⁇ in abstraksi. Pengujian memastikan penanganan kesalahan dan penguraian logika Anda benar tanpa memukul titik akhir yang sebenarnya.

6. Gunakan Pengurus Jaringan Terpusat

Aquid a b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b class yang mengkonfigurasi satu instance dengan URL dasar, header, interseptor, dan cache bersama. Hal ini mencegah duplikasi dan memudahkan swap kebijakan atau mengejek seluruh lapisan. Contoh:

class APIClient {
 static let shared = APIClient()
 private let session: Session

 private init() {
 let config = URLSessionConfiguration.default
 config.timeoutIntervalForRequest = 30
 config.urlCache = URLCache.shared
 session = Session(configuration: config, interceptor: AuthInterceptor())
 }

 func fetchUsers() async throws -> [User] {
 return try await session.request("\(baseURL)/users")
 .serializingDecodable([User].self)
 .value
 }
}

Untuk pengertian komprehensif pola jaringan, mengacu pada Alamofire Advanced Use dokumentasi. Selain itu, REST tutorial API di restfulapi.net menawarkan wawasan berharga untuk merancang API yang kuat.

Dengan mengikuti pedoman ini dan memanfaatkan API ekspresif Alamofire, Anda dapat membangun lapisan jaringan yang kuat dan mudah dipertahankan.