Alamofire — це HTTP-клієнт для iOS, macOS, tvOS та watchOS, написаний мовою Swift. Бібліотека автоматизує завдання кодування параметрів, валідації відповідей та серіалізації даних. За даними GitHub-репозиторію Alamofire, проект використовують понад 40 000 додатків по всьому світу. Alamofire вважається стандартом де-факто для мережевої взаємодії в екосистемі Apple.
Головне
Alamofire — це бібліотека для роботи з HTTP-запитами на платформах Apple, написана повністю на Swift. Розробка почалася в 2014 році як альтернатива Objective-C бібліотеці AFNetworking і швидко стала стандартом для мережевої взаємодії в iOS-спільноті.
Бібліотека побудована поверх системного фреймворку URLSession, абстрагуючи його низькорівневий API в лаконічні ланцюжки викликів. Alamofire підтримує всі функції URLSession: фонові сесії, перехоплювачі запитів, сертифікати SSL та кілька способів серіалізації відповідей.
За даними Swift Package Index, Alamofire входить до топ-10 найпопулярніших Swift-пакетів з більш ніж 45 000 зірок на GitHub. Бібліотека сумісна з iOS 10+, macOS 10.12+, tvOS 10+ та watchOS 3+.
Основна перевага Alamofire перед прямим використанням URLSession — скорочення шаблонного коду. Один виклик AF.request замінює 15–20 рядків ручного налаштування URLRequest, обробки відповіді та декодування даних. При цьому бібліотека зберігає повну гнучкість для нестандартних сценаріїв через кастомні сесії та розширення.
Alamofire надає широкий набір функцій для роботи з мережею, які покривають більшість сценаріїв мобільної розробки. Завдяки модульній архітектурі розробник підключає лише необхідні компоненти.
HTTP-методи GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS та TRACE реалізовані через єдиний API. Кожен метод приймає параметри запиту, заголовки та повертає відповідь у вигляді Result-типу. Розробнику не потрібно самостійно конфігурувати URLRequest — бібліотека робить це автоматично на основі переданих аргументів.
Валідація відповідей в Alamofire дозволяє перевіряти коди статусу та вміст відповіді до передачі даних у додаток. Бібліотека підтримує кастомні умови валідації через замикання, що дає повний контроль над обробкою помилок. За замовчуванням перевіряються лише коди статусу 200–299.
Параметри запиту автоматично кодуються залежно від вибраного типу: URL-кодування для GET-запитів та JSON-кодування для POST. Alamofire також підтримує Property List кодування та кастомні кодери через протокол ParameterEncoder, що дозволяє адаптувати формат під будь-який сервер.
Сесія Alamofire дозволяє налаштовувати таймаути, SSL-сертифікати, HTTP-заголовки за замовчуванням та проксі. Перехоплювачі EventMonitor дають можливість відстежувати події життєвого циклу запиту: створення, відправлення, отримання відповіді та завершення. Це корисно для логування, аналітики та налагодження мережевих проблем у продакшені.
Alamofire використовує архітектуру на основі Session, яка інкапсулює екземпляр URLSession та конфігурацію мережі. Кожен запит проходить через ланцюжок обробників: адаптери, ретрай-політики, валідатори та серіалізатори, що забезпечує гнучкість та розширюваність.
Об'єкт Session керує всіма мережевими запитами в додатку. Він створюється з конфігурацією, що містить таймаути, заголовки за замовчуванням та сертифікати. Кожен виклик AF.request повертає DataRequest, який можна модифікувати до відправки. Alamofire автоматично обробляє Retain Cycle через слабкі посилання на сесію, запобігаючи витокам пам'яті.
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) користувачів")
case .failure(let error):
print("Помилка: \(error.localizedDescription)")
}
}
Встановлення Alamofire виконується через Swift Package Manager, CocoaPods або Carthage. Рекомендований спосіб для нових проектів — SPM, вбудований в Xcode, оскільки він не потребує додаткових інструментів та інтеграція виконується в кілька кліків.
Додавання пакету в Xcode виконується через меню File → Add Packages. URL репозиторію: https://github.com/Alamofire/Alamofire. Версію рекомендується фіксувати на останній стабільний реліз. Alamofire підтримує семантичне версіонування, а всі breaking changes документуються в CHANGELOG.
CocoaPods залишається популярним способом для проектів з існуючою інфраструктурою. Додайте рядок pod 'Alamofire' в Podfile та виконайте pod install. Alamofire не має зовнішніх залежностей, що спрощує інтеграцію та виключає конфлікти версій в існуючих проектах.
Приклади нижче демонструють типові сценарії роботи з Alamofire в iOS-додатках: від простих GET-запитів до завантаження файлів з контролем прогресу.
Простий GET-запит з параметрами та декодуванням відповіді в модель Codable — найчастіший сценарій використання Alamofire в мобільних додатках. Параметри автоматично кодуються, а відповідь декодується через JSONDecoder. Код виходить компактним та читабельним.
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("Користувачі: \(users.count)")
case .failure(let error):
print("Помилка: \(error)")
}
}
POST-запит з JSON-тілом використовується для створення ресурсів на сервері. Alamofire автоматично кодує переданий об'єкт через JSONParameterEncoder, звільняючи розробника від ручної серіалізації. Відповідь декодується в модель даних через той же JSONDecoder.
let newUser = User(id: 1,
name: "Іван Петренко",
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("Створено користувача: \(created)")
}
}
Метод upload в Alamofire підтримує завантаження файлів, даних та multipart-форм. Бібліотека автоматично керує прогресом та дозволяє відстежувати стан завантаження через замикання uploadProgress, що зручно для відображення індикатора виконання.
let imageData = UIImage(named: "photo")?.jpegData(compressionQuality: 0.8)
AF.upload(imageData,
to: "https://api.example.com/upload")
.uploadProgress { progress in
print("Прогрес: \(progress.fractionCompleted * 100)%")
}
.responseDecodable(of: UploadResponse.self) { response in
print("Завантаження завершено")
}
Обробка помилок в Alamofire будується на комбінації валідації відповідей та Result-типів. Модель помилок включає AFError, яка покриває всі типові сценарії мережевих збоїв: таймаути, відсутність з'єднання, помилки сервера та невдалу серіалізацію. Кожен випадок обробляється окремо.
Для повторних спроб після помилки Alamofire надає механізм RequestRetrier. Цей протокол дозволяє визначити політику повторів: кількість спроб, затримку між ними та умову, за якої повтор виконується. Наприклад, при помилці 503 сервера можна повторити запит через 2 секунди, а при 401 — запитати новий токен аутентифікації.
Підхід AFError з переліком гарантує, що розробник не пропустить жодного типу помилки — компілятор перевіряє повноту обробки. Це робить код більш надійним та передбачуваним порівняно з обробкою помилок через NSError в чистому URLSession.
Протокол RequestRetrier визначає метод retry, який отримує запит, сесію, помилку та замикання завершення. У цьому методі розробник вирішує, чи потрібно повторити запит та через який час. Alamofire надає вбудовану реалізацію RetryPolicy для типових сценаріїв, але для продакшен-коду рекомендується створювати власні політики з врахуванням бізнес-логіки.
AFError — це перелік з вкладеними випадками для різних категорій помилок. Розробник може обробляти кожен тип окремо: для таймаутів передбачити повтор запиту, для помилок сервера — показати зрозуміле повідомлення користувачу. Alamofire підтримує кастомні ретрай-політики через протокол RequestRetrier.
Вбудована валідація перевіряє коди статусу в діапазоні 200–299 та тип вмісту відповіді. Для розширеної валідації можна додати кастомні умови через замикання validate, що дозволяє перевіряти бізнес-логіку відповіді до передачі даних в UI-шар.
Часті запитання
Alamofire надає більш високорівневий API порівняно з URLSession. Бібліотека автоматизує кодування параметрів, валідацію відповідей та серіалізацію даних, тоді як URLSession потребує ручного налаштування кожного компонента мережевого запиту.
Так, Alamofire повністю сумісний зі SwiftUI. Запити зазвичай виконуються всередині ObservableObject або через async/await з використанням Task. Alamofire не залежить від UIKit, тому чудово працює в сучасних SwiftUI-додатках.
Основні альтернативи Alamofire: вбудований URLSession, Moya (надбудова над Alamofire з абстракцією API), Networking від FreshOS та Apollo GraphQL для роботи з GraphQL-серверами. Вибір залежить від архітектури проекту.
Alamofire має вбудовану інтеграцію з Combine через розширення з Publishers та підтримує Swift Concurrency через async/await. Це дозволяє вибрати будь-який сучасний спосіб асинхронної обробки запитів.
Таймаут налаштовується через Session configuration. Встановіть властивості timeoutIntervalForRequest та timeoutIntervalForResource при створенні URLSessionConfiguration, потім передайте її в ініціалізатор Session. Значення за замовчуванням — 60 секунд.
Підсумки
Ми розробимо мобільний застосунок під ключ
IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.
Читайте також