Соберите URLRequest, закодируйте тело, задайте POST и Content-Type, выполните запрос, проверьте HTTP-статус и только затем декодируйте успешный ответ.
Как завершить типизированный POST-запрос в Swift
Соберите URLRequest, закодируйте тело, задайте POST и Content-Type, выполните запрос, проверьте HTTP-статус и только затем декодируйте успешный ответ.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
В сервисе Swift используются URLSession, JSONEncoder и декодер с методом decode<T: Decodable>(_ type: T.Type, from data: Data) throws -> T. Нужно отправить Encodable body и вернуть Decodable Response. Какие шаги обязательны?
Ответ
Соберите URLRequest, закодируйте тело, задайте POST и Content-Type, выполните запрос, проверьте HTTP-статус и только затем декодируйте успешный ответ.
Ключевой фрагмент внутри async throws метода:
request.httpMethod = "POST"
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = try encoder.encode(body)
let (data, response) = try await session.data(for: request)
guard let http = response as? HTTPURLResponse else {
throw Errors.invalidResponse
}
guard (200..<300).contains(http.statusCode) else {
throw Errors.httpStatus(http.statusCode)
}
return try decoder.decode(Response.self, from: data)
Здесь body обязателен. Для пустого ответа и отсутствующего тела нужен отдельный явный контракт; query-параметры собирайте через URLComponents.
Источник: developer.apple.com.