Ответ
Стандартный стек для сетевых запросов в iOS строится вокруг нативных API Apple и популярных сторонних библиотек.
1. Нативный подход: URLSession + Codable
Базовый и рекомендуемый Apple способ для большинства REST API.
// Модель данных
struct Post: Codable {
let id: Int
let title: String
}
// Выполнение GET-запроса
func fetchPosts() {
guard let url = URL(string: "https://jsonplaceholder.typicode.com/posts") else { return }
let task = URLSession.shared.dataTask(with: url) { data, response, error in
// 1. Обработка ошибок сети
if let error = error { /* ... */ return }
// 2. Проверка HTTP-статуса
guard let httpResponse = response as? HTTPURLResponse,
(200...299).contains(httpResponse.statusCode) else { /* ... */ return }
// 3. Декодирование JSON в модель
guard let data = data else { return }
do {
let posts = try JSONDecoder().decode([Post].self, from: data)
DispatchQueue.main.async {
// Обновление UI
}
} catch {
print("Decoding error: ", error)
}
}
task.resume() // Запуск задачи
}
2. Сторонние библиотеки (для сложных задач)
- Alamofire: Упрощает сложные запросы, загрузку файлов, валидацию ответов.
- Moya: Добавляет уровень абстракции над Alamofire/URLSession для лучшей тестируемости и организации кода.
3. Дополнительные компоненты стека
- Очереди и многопоточность:
DispatchQueueдля возврата в main thread. - Кэширование:
URLCacheдля HTTP-кэширования илиNSCacheдля кастомных решений. - Мониторинг сети:
NWPathMonitorдля отслеживания состояния соединения.