Как завершить типизированный POST-запрос в Swift

Соберите URLRequest, закодируйте тело, задайте POST и Content-Type, выполните запрос, проверьте HTTP-статус и только затем декодируйте успешный ответ.

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

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

Соберите 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.

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

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

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

Подробнее