Then make sure you have executed a swift package update and regenerate your Xcode project file.
Usage
You must have a struct that conforms to the Codable protocol matching the response you are expecting. In the examples used in the tests, the result is transformed into the HTTPbin struct type as shown below. An optional error type can be specified to contain a customized error format.
The to and error parameters are the types into which to attempt the encode/decode process.
params is the name/value dictionary that is transformed into the form param or json object submitted along with a POST or PATCH request.
encoding will determine if the request is formatted as JSON or Form.
bearerToken, if populated, will submit an Authorization header with this bearer token.
To execute a GET request, and transform into an object
let response : HTTPbin = try CodableRequest.request(
.get,
"https://httpbin.org/get",
to: HTTPbin.self,
error: ErrorResponse.self
)
The result of this request will be an object of type HTTPbin.
To submit a POST request as a Form
let response : HTTPbin = try CodableRequest.request(
.post,
"https://httpbin.org/post",
to: HTTPbin.self,
error: ErrorResponse.self,
params: ["donkey":"kong"],
encoding: "form"
)
To submit a POST request as JSON
let response : HTTPbin = try CodableRequest.request(
.post,
"https://httpbin.org/post",
to: HTTPbin.self,
error: ErrorResponse.self,
params: ["donkey":"kong"],
encoding: "json"
)
Handling errors
do {
let _ : HTTPbin = try CodableRequest.request(
.post,
"https://httpbin.org/get",
to: HTTPbin.self,
error: ErrorResponse.self
)
} catch let error as ErrorResponse {
print(error.error?.code) // 405
} catch {
print(error)
}
This request will return a 405, an unsupported request type.
The following error object has been populated as a response:
ErrorResponse(
error: Optional(codableRequest.ErrorMsg(
message: Optional("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 3.2 Final//EN\">\n<title>405 Method Not Allowed</title>\n<h1>Method Not Allowed</h1>\n<p>The method is not allowed for the requested URL.</p>\n"),
type: Optional(""),
param: Optional(""),
code: Optional("405"))
)
)
Codable structs used in these examples
The following structs are used by the tests, and the above examples.
struct HTTPbin: Codable {
var args: [String: String]?
var data: String?
var files: [String: String]?
var form: [String: String]?
var headers: HTTPbinHeaders?
var json: [String: String]?
var origin: String?
var url: String?
}
struct HTTPbinHeaders: Codable {
var accept: String?
var acceptEncoding: String?
var acceptLanguage: String?
var connection: String?
var contentType: String?
var dnt: String?
var host: String?
var origin: String?
var referer: String?
var userAgent: String?
enum CodingKeys : String, CodingKey {
case accept = "Accept"
case acceptEncoding = "Accept-Encoding"
case acceptLanguage = "Accept-Language"
case connection = "Connection"
case contentType = "Content-Type"
case dnt = "Dnt"
case host = "Host"
case origin = "Origin"
case referer = "Referer"
case userAgent = "User-Agent"
}
}
Contributing
This library is a work in progress. It is initially being developed in response to a need for the Stripe API under development.
Pull requests are welcome, and if you wish to chat about how to use or how to improve, please hit me up on the Perfect Slack channel - my handle is “iamjono”.
Thank you to Fatih Nayebi for inspiration and assistance.
Codable Request
Server Side Swift library that executes an HTTP Request and returns the data formatted in the supplied Codable object type.
This library leverages the Perfect HTTP and CURL libraries.
Installation
Add the following to your Package.swift file’s dependencies array:
Then make sure you have executed a
swift package update
and regenerate your Xcode project file.Usage
You must have a struct that conforms to the
Codable
protocol matching the response you are expecting. In the examples used in the tests, the result is transformed into theHTTPbin
struct type as shown below. An optional error type can be specified to contain a customized error format.The full form of this request is:
method
andurl
are unnamed parameters.to
anderror
parameters are the types into which to attempt the encode/decode process.params
is the name/value dictionary that is transformed into the form param or json object submitted along with a POST or PATCH request.encoding
will determine if the request is formatted as JSON or Form.bearerToken
, if populated, will submit an Authorization header with this bearer token.To execute a GET request, and transform into an object
The result of this request will be an object of type
HTTPbin
.To submit a POST request as a Form
To submit a POST request as JSON
Handling errors
This request will return a 405, an unsupported request type.
The following error object has been populated as a response:
Codable structs used in these examples
The following structs are used by the tests, and the above examples.
Contributing
This library is a work in progress. It is initially being developed in response to a need for the Stripe API under development.
Pull requests are welcome, and if you wish to chat about how to use or how to improve, please hit me up on the Perfect Slack channel - my handle is “iamjono”.
Thank you to Fatih Nayebi for inspiration and assistance.