GET request with no expected success or error response object types.
import HTTP
let client = Client<Empty, Empty>()
let request = Request(url: url)
switch await client.request(request) {
case .success: print("Success!")
case .failure(let error): print(error.localizedDescription)
}
POST request with HTTP body and expected success and failure response objects. Failure response objects are parsed with response codes outside the 200 range.
import HTTP
struct Registration: Codable {
let email: String
let password: String
}
struct User: Codable {
let id: Int
let isAdmin: Bool
}
struct RegistrationError: LocalizedError, Codable, Equatable {
let status: Int
let message: String
var errorDescription: String? { message }
}
let client = Client<User, RegistrationError>()
let registration = Registration(email: "joe@masilotti.com", password: "password")
let request = BodyRequest(url: url, method: .post, body: registration)
switch await client.request(request) {
case .success(let response):
print("HTTP headers", response.headers)
print("User", response.value)
case .failure(let error):
print("Error", error.localizedDescription)
}
HTTP headers can also be set on Request.
import HTTP
let client = Client<Empty, Empty>()
let headers = ["Cookie": "tasty_cookie=strawberry"]
let request = Request(url: url, headers: headers)
_ = await client.request(request)
URLRequest can be used directly if you require more fine grained control.
HTTP Client
A barebones async-await Swift HTTP client with automatic JSON response parsing.
Installation
Add HTTP Client as a dependency through Xcode or directly to Package.swift:
Usage
GET request with no expected success or error response object types.
POST request with HTTP body and expected success and failure response objects. Failure response objects are parsed with response codes outside the 200 range.
HTTP headers can also be set on
Request
.URLRequest
can be used directly if you require more fine grained control.Key encoding strategies
By default, all encoding and decoding of keys to JSON is done by converting to snake case.
This can be changed via the global configuration.