Skip to content

joemasilotti/HTTP-Client

main
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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:

.package(url: "https://github.com/joemasilotti/HTTP-Client", branch: "main")

Usage

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.

import HTTP

let client = Client<Empty, Empty>()
let request = URLRequest(
    url: url,
    cachePolicy: .reloadIgnoringLocalCacheData,
    timeoutInterval: 42.0
)
_ = await client.request(request)

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.

import HTTP

HTTP.Global.keyDecodingStrategy = .useDefaultKeys
HTTP.Global.keyEncodingStrategy = .useDefaultKeys

About

A barebones Swift HTTP client with automatic JSON response parsing.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Sponsor this project

 

Packages

No packages published

Languages