Alamofire je HTTP klient pro iOS, macOS, tvOS a watchOS napsaný v jazyce Swift. Knihovna automatizuje úkoly kódování parametrů, validace odpovědí a serializace dat. Podle údajů GitHub repozitáře Alamofire projekt používá více než 40 000 aplikací po celém světě. Alamofire je považován za de facto standard pro síťovou komunikaci v ekosystému Apple.
Hlavní body
Alamofire je knihovna pro práci s HTTP požadavky na platformách Apple, napsaná kompletně ve Swiftu. Vývoj začal v roce 2014 jako alternativa k Objective-C knihovně AFNetworking a rychle se stal standardem pro síťovou komunikaci v iOS komunitě.
Knihovna je postavena na systémovém frameworku URLSession, abstrahující jeho nízkoúrovňové API do stručných řetězců volání. Alamofire podporuje všechny funkce URLSession: relace na pozadí, zachycovače požadavků, SSL certifikáty a několik způsobů serializace odpovědí.
Podle Swift Package Index je Alamofire v top 10 nejoblíbenějších Swift balíčků s více než 45 000 hvězdami na GitHubu. Knihovna je kompatibilní s iOS 10+, macOS 10.12+, tvOS 10+ a watchOS 3+.
Hlavní výhoda Alamofire oproti přímému použití URLSession je snižení šablonového kódu. Jedno volání AF.request nahrazuje 15–20 řádků ruční konfigurace URLRequest, zpracování odpovědi a dekódování dat. Knihovna přitom zachovává plnou flexibilitu pro nestandardní scénáře prostřednictvím vlastních relací a rozšíření.
Alamofire poskytuje širokou sadu funkcí pro práci se sítí, které pokrývají většinu scénářů vývoje mobilních aplikací. Díky modulární architektuře programátor připojuje pouze potřebné komponenty.
HTTP metody GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS a TRACE jsou implementovány prostřednictvím jednotného API. Každá metoda přijímá parametry požadavku, hlavičky a vrací odpověď ve formě typu Result. Programátor nemusí ručně konfigurovat URLRequest — knihovna to dělá automaticky na základě předaných argumentů.
Validace odpovědí v Alamofire umožňuje kontrolovat stavové kódy a obsah odpovědi před předáním dat do aplikace. Knihovna podporuje vlastní podmínky validace prostřednictvím closures, což poskytuje plnou kontrolu nad zpracováním chyb. Ve výchozím nastavení se kontrolují pouze stavové kódy 200–299.
Parametry požadavku jsou automaticky kódovány v závislosti na zvoleném typu: URL-encoding pro GET požadavky a JSON-encoding pro POST. Alamofire také podporuje kódování Property List a vlastní kodéry prostřednictvím protokolu ParameterEncoder, což umožňuje přizpůsobit formát libovolnému serveru.
Relace Alamofire umožňuje konfigurovat časové limity, SSL certifikáty, výchozí HTTP hlavičky a proxy. Zachycovače EventMonitor umožňují sledovat události životního cyklu požadavku: vytvoření, odeslání, přijetí odpovědi a dokončení. To je užitečné pro logování, analytiku a ladění síťových problémů v produkci.
Alamofire používá architekturu založenou na Session, která zapouzdřuje instanci URLSession a konfiguraci sítě. Každý požadavek prochází řetězcem handlerů: adaptéry, politiky opakování, validátory a serializátory, což zajišťuje flexibilitu a rozšiřitelnost.
Objekt Session spravuje všechny síťové požadavky v aplikaci. Vytváří se s konfigurací obsahující časové limity, výchozí hlavičky a certifikáty. Každé volání AF.request vrací DataRequest, který lze před odesláním upravit. Alamofire automaticky zpracovává Retain Cycle prostřednictvím slabých referencí na relaci, čímž předchází únikům paměti.
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("Získáno \(users.count) uživatelů")
case .failure(let error):
print("Chyba: \(error.localizedDescription)")
}
}
Instalace Alamofire se provádí přes Swift Package Manager, CocoaPods nebo Carthage. Doporučený způsob pro nové projekty je SPM integrovaný v Xcode, protože nevyžaduje další nástroje a integrace probíhá na několik kliknutí.
Přidání balíčku v Xcode se provádí přes menu File → Add Packages. URL repozitáře: https://github.com/Alamofire/Alamofire. Doporučuje se nastavit verzi na poslední stabilní vydání. Alamofire podporuje sémantické verzování a všechny breaking changes jsou dokumentovány v CHANGELOG.
CocoaPods zůstává oblíbeným způsobem pro projekty s existující infrastrukturou. Přidejte řádek pod 'Alamofire' do Podfile a spusťte pod install. Alamofire nemá žádné externí závislosti, což zjednodušuje integraci a eliminuje konflikty verzí ve stávajících projektech.
Příklady níže demonstrují typické scénáře práce s Alamofire v iOS aplikacích: od jednoduchých GET požadavků po nahrávání souborů s kontrolou průběhu.
Jednoduchý GET požadavek s parametry a dekódováním odpovědi do modelu Codable — nejčastější scénář použití Alamofire v mobilních aplikacích. Parametry jsou automaticky kódovány a odpověď je dekódována přes JSONDecoder. Kód je kompaktní a čitelný.
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("Uživatelé: \(users.count)")
case .failure(let error):
print("Chyba: \(error)")
}
}
POST požadavek s JSON tělem se používá k vytváření zdrojů na serveru. Alamofire automaticky kóduje předaný objekt přes JSONParameterEncoder, čímž programátorovi odpadá ruční serializace. Odpověď je dekódována do datového modelu přes stejný JSONDecoder.
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("Uživatel vytvořen: \(created)")
}
}
Metoda upload v Alamofire podporuje nahrávání souborů, dat a multipart formulářů. Knihovna automaticky spravuje průběh a umožňuje sledovat stav nahrávání přes closures uploadProgress, což je vhodné pro zobrazení indikátoru průběhu.
let imageData = UIImage(named: "photo")?.jpegData(compressionQuality: 0.8)
AF.upload(imageData,
to: "https://api.example.com/upload")
.uploadProgress { progress in
print("Průběh: \(progress.fractionCompleted * 100)%")
}
.responseDecodable(of: UploadResponse.self) { response in
print("Nahrávání dokončeno")
}
Zpracování chyb v Alamofire je založeno na kombinaci validace odpovědí a typů Result. Model chyb zahrnuje AFError, který pokrývá všechny typické scénáře síťových selhání: časové limity, nedostatek připojení, chyby serveru a neúspěšnou serializaci. Každý případ je zpracováván samostatně.
Pro opakované pokusy po chybě Alamofire poskytuje mechanismus RequestRetrier. Tento protokol umožňuje definovat politiku opakování: počet pokusů, zpoždění mezi nimi a podmínku, za které se opakování provádí. Například při chybě serveru 503 lze požadavek opakovat po 2 sekundách, a při 401 — vyžádat nový autentizační token.
Přístup AFError s výčtem zaručuje, že programátor nevynechá žádný typ chyby — kompilátor kontroluje úplnost zpracování. To činí kód spolehlivějším a předvídatelnějším ve srovnání se zpracováním chyb přes NSError v čistém URLSession.
Protokol RequestRetrier definuje metodu retry, která přijímá požadavek, relaci, chybu a closure dokončení. V této metodě programátor rozhoduje, zda požadavek opakovat a po jaké době. Alamofire poskytuje vestavěnou implementaci RetryPolicy pro typické scénáře, ale pro produkční kód se doporučuje vytvářet vlastní politiky s ohledem na obchodní logiku.
AFError je výčet s vnořenými případy pro různé kategorie chyb. Programátor může každý typ zpracovávat samostatně: pro časové limity předvídat opakování požadavku, pro chyby serveru — zobrazit srozumitelnou zprávu uživateli. Alamofire podporuje vlastní politiky opakování přes protokol RequestRetrier.
Vestavěná validace kontroluje stavové kódy v rozsahu 200–299 a typ obsahu odpovědi. Pro rozšířenou validaci lze přidat vlastní podmínky přes closure validate, což umožňuje kontrolovat obchodní logiku odpovědi před předáním dat do UI vrstvy.
Často kladené otázky
Alamofire poskytuje API na vyšší úrovni ve srovnání s URLSession. Knihovna automatizuje kódování parametrů, validaci odpovědí a serializaci dat, zatímco URLSession vyžaduje ruční konfiguraci každé komponenty síťového požadavku.
Ano, Alamofire je plně kompatibilní se SwiftUI. Požadavky se obvykle provádějí uvnitř ObservableObject nebo přes async/await s použitím Task. Alamofire není závislý na UIKit, takže skvěle funguje v moderních SwiftUI aplikacích.
Hlavní alternativy Alamofire: vestavěný URLSession, Moya (nadstavba nad Alamofire s abstrakcí API), Networking od FreshOS a Apollo GraphQL pro práci s GraphQL servery. Volba závisí na architektuře projektu.
Alamofire má vestavěnou integraci s Combine přes rozšíření s Publishers a podporuje Swift Concurrency přes async/await. To umožňuje vybrat libovolný moderní způsob asynchronního zpracování požadavků.
Časový limit se nastavuje přes Session configuration. Nastavte vlastnosti timeoutIntervalForRequest a timeoutIntervalForResource při vytváření URLSessionConfiguration a poté je předejte inicializátoru Session. Výchozí hodnota je 60 sekund.
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také