Асинхронный 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 дополнительно задают допустимые схемы/хосты, размер ответа и правила перенаправлений.