Функция для выполнения HTTP‑запроса и обработки ответа

Асинхронный HTTP-метод должен проверить ответ, обработать данные и вернуть типизированный результат либо ошибку. Формат обработки нужно задавать контрактом.

Короткий ответ

Что ответить на собеседовании

Асинхронный HTTP-метод должен проверить ответ, обработать данные и вернуть типизированный результат либо ошибку. Формат обработки нужно задавать контрактом.

Подробный разбор

Ответ с пояснениями

Условие

Создай функцию, которая делает HTTP‑запрос к заданному URL, получает полученные данные, проводит их обработку и возвращает итоговый результат.

class Service {
    func sendRequest(…)
}

Ответ

Асинхронный HTTP-метод должен проверить ответ, обработать данные и вернуть типизированный результат либо ошибку. Формат обработки нужно задавать контрактом.

Пример для JSON и Swift Decodable:

import Foundation

final class Service {
    func sendRequest<T: Decodable>(to url: URL,
                                  as type: T.Type) async throws -> T {
        var request = URLRequest(url: url)
        request.timeoutInterval = 30
        let (data, response) = try await URLSession.shared.data(for: request)
        guard let http = response as? HTTPURLResponse,
              (200..<300).contains(http.statusCode) else {
            throw URLError(.badServerResponse)
        }
        return try JSONDecoder().decode(type, from: data)
    }
}

Отмена и транспортные/декодирующие ошибки передаются вызывающему коду. Пустой ответ 204 нельзя декодировать как обычную JSON-модель без отдельного правила. Для недоверенного URL дополнительно задают допустимые схемы/хосты, размер ответа и правила перенаправлений.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее