From some previous help, I was able to build out this to submit an API POST request from within the swift platform.
import Foundation
struct requestbody: Codable {
let data: DataClass
}
// MARK: - DataClass
struct DataClass: Codable {
let slices: [Slice]
let passengers: [Passenger]
let cabinClass: String
enum CodingKeys: String, CodingKey {
case slices, passengers
case cabinClass = "cabin_class"
}
}
// MARK: - Passenger
struct Passenger: Codable {
let type: String
}
// MARK: - Slice
struct Slice: Codable {
let origin, destination, departureDate: String
enum CodingKeys: String, CodingKey {
case origin, destination
case departureDate = "departure_date"
}
}
class APIPost {
func getposts(response: requestbody) -> URLRequest? {
guard let url = URL(string: "https://api.duffel.com/air/offer_requests") else { return nil }
var request = URLRequest(url: url)
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.setValue("application/json", forHTTPHeaderField: "Accept")
request.setValue("beta", forHTTPHeaderField: "Duffel-Version")
request.setValue("Bearer [redacted]", forHTTPHeaderField: "Authorization")
request.httpMethod = "POST"
request.httpBody = try! JSONEncoder().encode(response)
return request
}
I will, however, say I am somewhat stumped when it comes to how to integrate this method to then decode the JSON response, to then use in a UI. I cannot add a completion parameter in the function (to add @escaping) either, and believe maybe it would be best to take this action and build off it in another function. Any high level (or detailed) responses would be greatly greatly appreciated.
Thank you!
2
Answers
Use This generic function for calling Post Method,Call this method and pass request body and response body in completion , also add URL in same
Creating a
URLRequest
instance is not enough, you have to send this request to your server as well. You can send it viaURLSession
API.