Какой стек технологий для сетевых запросов обычно используется в iOS-разработке?

«Какой стек технологий для сетевых запросов обычно используется в iOS-разработке?» — вопрос из категории Сети, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Стандартный стек для сетевых запросов в 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 для отслеживания состояния соединения.