Mühendislik Tasarım ve Analiz
Ios'ta Alamofire ile Geri İzlemek İçin API İletişimi
Table of Contents
Alamofire ile Başlayın
Alamofire'i iOS projesine entegre etmeye başlamak için, Swift Paket Yöneticisi, CocoaPods veya Carthage. Swift Paket Yöneticisi, Xcode'a inşa edilmiş olarak önerilen önerilen yaklaşımdır.If you use CocoaPods, addFLT:2TORT:0|Blog ve çalıştırın.[Dönetici:0)YouTube'a tıkladığınızda sürüm 50.0 veya daha sonra.If you use CocoaPods, add af.
import Alamofire
Alamofire'in 444D:4) alias, ağ geçidindeki tüm yaygın HTTP operasyonları için uygun bir giriş noktası sağlar, Apple'ın [[ENFLT:5) ancak kuyruk yönetimi gibi soyutlar ve yanıt doğrulama.Bu, ağ geçidine daha fazla ayrıntıya odaklanmanızı sağlar.
GET İsteklerini Gerçekleştirmek
RESTful endpoint'ten gelen verilerin kaldırılması en yaygın işlemdir. Alamofire GET isteklerini ikna eder ve okunabilir. Aşağıdaki örnek, varsayımlı bir API'den bir listesini alır:
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)")
}
}
Swift'in 03.03.2012'den yararlanan KAYNAK'nın kullanımını otomatik olarak modellemek için protokole işaret edin.Üye uygun olan KAYNAKLAR KAYNAKLAR KAYNAKLAR KAYNAKLAR KAYNAKLAR KAYNAKLAR KAYNAKLAR KAYNAKLAR KAYNAKLAR KAYNAKLAR KAYNAKLAR KAYNAKLAR KAYNAKLAR KAYNAKLAR KAYNAKLAR KAYNAKLAR KAYNAKLAR KAYNAKLAR KAYNAKLAR KAYNAKLAR KAYNAKLAR UNUZLARI KAYNAKLAR KAYNAKLAR KAYNAKLAR KAYNAKLAR KAYNAKLAR KAYNAKLAR KAYNAKLAR UNUŞLARI KAYNAKLAR TIRIM KAYNAKLAR KAYNAKLAR KAYNAKLAR KAYNAKLAR KAYNAKLAR KAYNAKLAR KAYNAKLAR KAYNAKLAR KAYNAKLAR KAYNAKLAR KAYNAKLAR KAYNAKLAR KAYNAKLAR
Sorgu Parametreleri ve Headers ek
Birçok REST API'si sorgu parametreleri veya özel HTTP başlıkları gerektirir. Alamofire, bir sözlük olarak parametreleri kabul eder ve GET istekleri için otomatik olarak genişletilir (parametreler URL'ye gönderilir). Headers parametresi ile eklenir:YouTubefire:
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 otomatik olarak URL kodlarını ayarlar ve bunları istek URL'ye bağlanır. Özel kodlama için, açık bir şekilde belirtebilirsiniz: örneğin,FLT:15 gibi.
Cevap Geçerlilik
ESRAT:16 yöntemi 200-299 aralığında HTTP statüsü kodları için otomatik olarak kontrol eder ve cevaplarını kabul edilemez bir içerik türü ile reddedebilirsiniz. Örneğin, sadece 200 ve 201 durum kodları kabul edebilirsiniz:
.validate(statusCode: [200, 201])
Geçerlilik hataları yanıt eller'deki hatalar olarak bildirilir, uygulamanız boyunca tutarlı hata işlemenizi sağlar.
POST Data
Kaynakları oluşturmak veya güncellemek genellikle bir istek gövdesi ile POST isteği gerektirir. Alamofire, birden çok kodlama stratejisini destekler, REST API'ler için en yaygın olan “Ücretsiz” olarak adlandırılır. Aşağıdaki örnek sunucuya yeni bir kullanıcı nesne gönderir:
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)")
}
}
API URL'nin kodlanmış form verilerini bekler (örneğin, OAuth token exchange için), dosya yüklemeleri veya karışık veriler için, Alamofire, çok fazla bölüm talep eden bir örnek sunar.
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
}
Diğer HTTP Yöntemleri ile Çalışma
RESTful API'ler genellikle PUT (tam güncelleme), PATCH (partial güncelleştirme), ve DELETE (removal) işlemleri gerektirir. Alamofire bunları aynı şekilde aynı şekilde ele alır; sadece parametreyi değiştirir.
PUT ve PATCH
Mevcut bir kaynağı güncelleştirmek için, [[DinT:25) veya [[Dönetici: İstek vücudu güncel alanları içerir:
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
}
DELETE
Bir kaynağın genellikle talep etmen gerekir. yanıt boş olabilir veya bir onay mesajı geri dönebilir:
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")
}
}
Her zaman beklenen durum kodları için API dokümanını kontrol edin (örneğin, 204 No Content).
Gelişmiş Hata İşleme ve Ağ İzleme
Robust hatası, sorunsuz bir kullanıcı deneyimi için kritiktir. Alamofire, alg.com aracılığıyla hataları rapor eder ve ağ hataları arasında ayrım yapar (zaman, bağlantı yoktur), sunucu hataları (kötü durum kodu), ve serileştirme hataları (devap JSON). Belirli bir geri bildirimde bulunma hatayı inceleyebilirsiniz:
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)")
}
}
}
Ağ erişilebilirliği
İstek yapmadan önce, ağ kullanılabilirliğini kontrol etmek isteyebilirsiniz. Alamofire'sİLFLT:31) Bağlantı değişiklikleri uygulama yaşam döngüsünde erken takip başlayın:
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")
}
}
Kullanıcıyı bilgilendirmek veya istekleri ertelemek için bunu kullanın. Daha gelişmiş desenler için bağlantının restore edildiğinde başarısız talepler gibi bir yeniden deneme mekanizmasıyla bağlantı kurmayı düşünün.
Üretim için en iyi uygulamalar -Ready Networking
Oluşturulan desenler, ağ katmanınızı kullanılabilir, güvenli ve performansa devam edecektir.
1. Codable Modellerini Kabul Etmek
Her zaman Swift tiplerini tanımlayın: (veya [[DörtÜŞÜŞÜNÜŞÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜ
2. Safer Authentication and Token Management
Asla zor kod API anahtarları veya jetonlar.Rokette hassas değerler ve onları adsız olarak değiştirilebilir.OAuth akışları için, bir token yeni bir token tekrarlama isteklerini yerine getirmenizi sağlar.
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. Birsen / Beklengen ile Konjektif
Alamofire 5 Swift'in koncurrency modelini tamamen destekliyor.Ücretsiz, lineer kod yazmak için istek yöntemlerin sürümlerini kullanın:
do {
let users = try await AF.request("https://api.example.com/users")
.serializingDecodable([User].self)
.value
print("Users: \(users)")
} catch {
print("Error: \(error)")
}
Bunu yapısal koncurrency (task grupları, aktörler) ile bir araya getirmek için, birden fazla istek yönetmek ve geri çağırmaktan kaçınmak.
4. Implement Caching
Ağ aramalarını ve çevrimdışı desteği azaltmak için, şarj edici kalibrasyon politikaları. Alamofire, (örneğin, [[Dönetici: · 3:43). Ayrıca uygun bir disk kapasitesi ile özel bir şekilde kullanabilirsiniz:
let cache = URLCache(memoryCapacity: 10 * 1024 * 1024,
diskCapacity: 50 * 1024 * 1024,
diskPath: "networking_cache")
let session = Session(configuration: URLSessionConfiguration.default)
session.sessionConfiguration.urlCache = cache
5. Ağ Katmanı Test
API müşterileri için oyun testleri alay verileri kullanarak. Alamofire'sETHFLT:46) önceden tanımlanmış cevaplar veren bir protokolle enjekte edilebilir.Temizsiz verileri kullanarak kütüphaneleri kullanmayı düşünün.Testing the error handle and parsing logic are correct without hit true endpoints.
6. Merkezileştirilmiş Ağ Yöneticisi kullanın
Örneğin, temel URL, başlık, listeler, postatörler ve paylaşılan bir önbellek ile yapılandıran tek bir sınıf oluşturun.Bu, fikre aykırıdır ve tüm katmanı takas etmek kolaylaşır. Örnek:
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
}
}
Ağ kalıplarının kapsamlı bir anlayışı için, aşağıdaki gibi bakınız:0)Alamofire Advanced Use documents). ek olarak, [[ENFLT:2).REST API öğreticisi geri kalanına.net) sağlam API'leri tasarlayabilmede değerli bilgiler sunar.
Bu yönergeleri takip ederek ve Alamofire'in ekspresive API'sini kullanarak, hem güçlü hem de korumak için bir ağ katmanı inşa edebilirsiniz. Kütüphane özetleri, ihtiyacınız olduğunda size tam kontrol verirken URL yüklemesinin birçok yönünden uzak tutabilirsiniz.