Az Alamofire egy HTTP-kliens iOS, macOS, tvOS és watchOS rendszerekhez, Swift nyelven írva. A könyvtár automatizálja a paraméterek kódolását, a válaszok érvényesítését és az adatok szerializálását. Az Alamofire GitHub-tárolójának adatai szerint a projektet több mint 40 000 alkalmazás használja világszerte. Az Alamofire az Apple ökoszisztémában a hálózati kommunikáció de facto szabványának számít.
Főbb pontok
Alamofire egy könyvtár HTTP-kérésekkel való munkához Apple platformokon, teljes egészében Swift-ben írva. A fejlesztés 2014-ben kezdődött az Objective-C AFNetworking könyvtár alternatívájaként, és gyorsan a hálózati kommunikáció szabványává vált az iOS közösségben.
A könyvtár a rendszer URLSession keretrendszerére épül, elvonatkoztatva annak alacsony szintű API-ját tömör hívási láncokká. Az Alamofire támogatja az URLSession összes funkcióját: háttér-munkameneteket, kéréselfogókat, SSL-tanúsítványokat és a válasz szerializálásának több módját.
A Swift Package Index szerint az Alamofire a top 10 legnépszerűbb Swift-csomag között van, több mint 45 000 csillaggal a GitHub-on. A könyvtár kompatibilis iOS 10+, macOS 10.12+, tvOS 10+ és watchOS 3+ rendszerekkel.
Az Alamofire fő előnye az URLSession közvetlen használatához képest a sablonkód csökkentése. Egyetlen AF.request hívás 15–20 sor kézi URLRequest konfigurációt, válaszfeldolgozást és adatdekódolást helyettesít. Ugyanakkor a könyvtár teljes rugalmasságot biztosít a nem szabványos forgatókönyvekhez egyedi munkameneteken és kiterjesztéseken keresztül.
Alamofire széles funkciókészletet biztosít a hálózati munkához, amely lefedi a mobilalkalmazás-fejlesztés legtöbb forgatókönyvét. A moduláris felépítésnek köszönhetően a fejlesztő csak a szükséges összetevőket kapcsolja be.
A HTTP-metódusok GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS és TRACE egységes API-n keresztül vannak megvalósítva. Minden metódus fogadja a kérés paramétereit, fejléceit, és a választ Result típus formájában adja vissza. A fejlesztőnek nem kell kézzel konfigurálnia az URLRequest-et — a könyvtár ezt automatikusan elvégzi a megadott argumentumok alapján.
A válaszok érvényesítése az Alamofire-ben lehetővé teszi a státuszkódok és a válasz tartalmának ellenőrzését az adatok alkalmazásba továbbítása előtt. A könyvtár támogatja az egyedi érvényesítési feltételeket closure-ökön keresztül, ami teljes kontrollt biztosít a hibakezelés felett. Alapértelmezés szerint csak a 200–299-es státuszkódok kerülnek ellenőrzésre.
A kérés paraméterei automatikusan kódolásra kerülnek a kiválasztott típustól függően: URL-kódolás GET-kérésekhez és JSON-kódolás POST-hoz. Az Alamofire támogatja a Property List kódolást és az egyedi kódolókat a ParameterEncoder protokollon keresztül, lehetővé téve a formátum bármely szerverhez való igazítását.
Az Alamofire munkamenete lehetővé teszi az időtúllépések, SSL-tanúsítványok, alapértelmezett HTTP-fejlécek és proxy beállítását. Az EventMonitor elfogók lehetővé teszik a kérés életciklus-eseményeinek nyomon követését: létrehozás, elküldés, válasz fogadása és befejezés. Ez hasznos naplózáshoz, analitikához és hálózati problémák hibakereséséhez éles környezetben.
Alamofire Session-alapú architektúrát használ, amely egy URLSession példányt és hálózati konfigurációt foglal magába. Minden kérés áthalad a kezelők láncán: adapterek, újrapróbálkozási szabályzatok, érvényesítők és szerializálók, ami rugalmasságot és bővíthetőséget biztosít.
A Session objektum kezeli az alkalmazás összes hálózati kérését. Időtúllépéseket, alapértelmezett fejléceket és tanúsítványokat tartalmazó konfigurációval jön létre. Minden AF.request hívás egy DataRequest-et ad vissza, amely elküldés előtt módosítható. Az Alamofire automatikusan kezeli a Retain Cycle-t a munkamenetre mutató gyenge referenciákon keresztül, megelőzve a memóriaszivárgást.
import Alamofire
let session = Session(configuration: config)
session.request("https://api.example.com/users")
.validate()
.responseDecodable(of: [User].self) { response in
switch response.result {
case .success(let users):
print("\(users.count) felhasználó érkezett")
case .failure(let error):
print("Hiba: \(error.localizedDescription)")
}
}
Telepítés Alamofire Swift Package Manager, CocoaPods vagy Carthage segítségével történik. Az új projektekhez ajánlott módszer az Xcode-ba épített SPM, mivel nem igényel további eszközöket, és az integráció néhány kattintással elvégezhető.
A csomag hozzáadása az Xcode-ban a File → Add Packages menün keresztül történik. A tároló URL-je: https://github.com/Alamofire/Alamofire. Javasolt a verziót a legújabb stabil kiadáshoz rögzíteni. Az Alamofire támogatja a szemantikus verziókezelést, és minden megtörő változás dokumentálva van a CHANGELOG-ban.
CocoaPods továbbra is népszerű módszer a meglévő infrastruktúrával rendelkező projektek számára. Adja hozzá a pod 'Alamofire' sort a Podfile-hoz, és futtassa a pod install parancsot. Az Alamofire-nek nincsenek külső függőségei, ami egyszerűsíti az integrációt és kiküszöböli a verzióütközéseket a meglévő projektekben.
Az alábbi példák tipikus forgatókönyveket mutatnak be az Alamofire használatára iOS-alkalmazásokban: az egyszerű GET-kérésektől a fájlfeltöltésig haladásjelzővel.
Egyszerű GET-kérés paraméterekkel és a válasz dekódolása Codable modellé — a leggyakoribb forgatókönyv az Alamofire mobilalkalmazásokban való használatára. A paraméterek automatikusan kódolódnak, a válasz pedig JSONDecoder segítségével dekódolódik. A kód tömör és olvasható lesz.
struct User: Codable {
let id: Int
let name: String
let email: String
}
AF.request("https://jsonplaceholder.typicode.com/users",
method: .get)
.validate()
.responseDecodable(of: [User].self) { response in
switch response.result {
case .success(let users):
print("Felhasználók: \(users.count)")
case .failure(let error):
print("Hiba: \(error)")
}
}
A POST-kérés JSON-törzzsel erőforrások létrehozására szolgál a szerveren. Az Alamofire automatikusan kódolja az átadott objektumot a JSONParameterEncoder segítségével, megkímélve a fejlesztőt a kézi szerializálástól. A válasz ugyanazzal a JSONDecoder-rel dekódolódik adatmodellé.
let newUser = User(id: 1,
name: "Ivan Petrov",
email: "ivan@example.com")
AF.request("https://jsonplaceholder.typicode.com/users",
method: .post,
parameters: newUser,
encoder: JSONParameterEncoder.default)
.validate()
.responseDecodable(of: User.self) { response in
if let created = response.value {
print("Felhasználó létrehozva: \(created)")
}
}
Az Alamofire upload metódusa támogatja fájlok, adatok és multipart űrlapok feltöltését. A könyvtár automatikusan kezeli a haladást, és lehetővé teszi a feltöltés állapotának nyomon követését uploadProgress closure-ökön keresztül, ami kényelmes a haladásjelző megjelenítéséhez.
let imageData = UIImage(named: "photo")?.jpegData(compressionQuality: 0.8)
AF.upload(imageData,
to: "https://api.example.com/upload")
.uploadProgress { progress in
print("Haladás: \(progress.fractionCompleted * 100)%")
}
.responseDecodable(of: UploadResponse.self) { response in
print("Feltöltés befejezve")
}
Hibakezelés az Alamofire-ben a válaszok érvényesítésének és a Result típusoknak a kombinációján alapul. A hibamodell tartalmazza az AFError-t, amely lefedi a hálózati meghibásodások összes tipikus forgatókönyvét: időtúllépések, kapcsolat hiánya, szerverhibák és sikertelen szerializálás. Minden eset külön kerül feldolgozásra.
A hiba utáni újrapróbálkozáshoz az Alamofire RequestRetrier mechanizmust biztosít. Ez a protokoll lehetővé teszi az újrapróbálkozási szabályzat meghatározását: a próbálkozások számát, a köztük lévő késleltetést és az újrapróbálkozás feltételét. Például 503-as szerverhiba esetén a kérés 2 másodperc múlva megismételhető, 401-esnél pedig — új hitelesítési token kérhető.
Az AFError felsorolásos megközelítése garantálja, hogy a fejlesztő ne hagyjon ki egyetlen hibatípust sem — a fordító ellenőrzi a feldolgozás teljességét. Ez megbízhatóbbá és kiszámíthatóbbá teszi a kódot a tiszta URLSession-ben NSError segítségével történő hibakezeléshez képest.
A RequestRetrier protokoll meghatározza a retry metódust, amely megkapja a kérést, a munkamenetet, a hibát és egy befejező closure-t. Ebben a metódusban dönti el a fejlesztő, hogy meg kell-e ismételni a kérést és mennyi idő után. Az Alamofire beépített RetryPolicy implementációt biztosít tipikus forgatókönyvekhez, de éles kódhoz ajánlott saját szabályzatokat készíteni az üzleti logika figyelembevételével.
AFError egy felsorolás beágyazott esetekkel a különböző hibakategóriákhoz. A fejlesztő minden típust külön kezelhet: időtúllépéseknél a kérés megismétlését, szerverhibáknál — érthető üzenet megjelenítését a felhasználónak. Az Alamofire támogatja az egyedi újrapróbálkozási szabályzatokat a RequestRetrier protokollon keresztül.
A beépített érvényesítés ellenőrzi a státuszkódokat a 200–299 tartományban és a válasz tartalomtípusát. Kiterjesztett érvényesítéshez egyedi feltételek adhatók hozzá a validate closure segítségével, lehetővé téve a válasz üzleti logikájának ellenőrzését az adatok UI-rétegbe továbbítása előtt.
Gyakran ismételt kérdések
Alamofire magasabb szintű API-t biztosít az URLSession-hez képest. A könyvtár automatizálja a paraméterek kódolását, a válaszok érvényesítését és az adatok szerializálását, míg az URLSession a hálózati kérés minden összetevőjének kézi konfigurálását igényli.
Igen, az Alamofire teljes mértékben kompatibilis a SwiftUI-val. A kérések általában ObservableObject-en belül vagy async/await segítségével, Task használatával hajtódnak végre. Az Alamofire nem függ az UIKit-től, így kiválóan működik modern SwiftUI-alkalmazásokban.
Az Alamofire fő alternatívái: beépített URLSession, Moya (API absztrakcióval ellátott réteg az Alamofire felett), Networking a FreshOS-tól és Apollo GraphQL a GraphQL szerverekkel való munkához. A választás a projekt architektúrájától függ.
Alamofire beépített integrációval rendelkezik a Combine-hoz Publishers kiterjesztéseken keresztül, és támogatja a Swift Concurrency-t async/await segítségével. Ez lehetővé teszi a kérések aszinkron feldolgozásának bármely modern módjának kiválasztását.
Időtúllépés a Session configuration segítségével állítható be. Állítsa be a timeoutIntervalForRequest és timeoutIntervalForResource tulajdonságokat az URLSessionConfiguration létrehozásakor, majd adja át őket a Session inicializálójának. Az alapértelmezett érték 60 másodperc.
Összefoglaló
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is