Communicate via HTTP easily in Swift.
You can add this package to Package.swift
, include it in your target dependencies.
let package = Package(
dependencies: [
.package(url: "https://github.com/uhooi/swift-http-client", .upToNextMajor(from: "0.6.0")),
],
targets: [
.target(
name: "<your-target-name>",
dependencies: ["HTTPClient"]),
]
)
You can add this package on Xcode. See documentation.
This library is available through CocoaPods. To install it, simply add the following line to your Podfile
:
pod 'UHIHTTPClient', '~> 0.6.0'
This library is available through Carthage. To install it, simply add the following line to your Cartfile
:
github "uhooi/swift-http-client" ~> 0.6.0
You can just import HTTPClient
to use it.
Implement a request body structure that conforms to the Encodable
protocol. (Optional)
struct RegisterUserRequestBody: Encodable {
let name: String
let description: String
}
Implement a response body structure that conforms to the Decodable
protocol.
struct RegisterUserResponseBody: Decodable {
let id: String
}
extension RegisterUserResponseBody {
func convertToUserID() -> UserID { .init(id: self.id) }
}
Implement a request structure that conforms to the Request
protocol.
import HTTPClient
struct RegisterUserRequest: Request {
typealias ResponseBody = RegisterUserResponseBody
var path: String { "user/create_user" }
var httpMethod: HTTPMethod { .post }
var httpHeaders: [HTTPHeaderField: String]? { [.contentType: ContentType.applicationJson.rawValue] }
}
Create an instance of the HTTPClient
class and call the request
method.
struct UserID: Identifiable, Equatable {
let id: String
}
protocol VersatileRepository {
func registerUser(name: String, description: String) async throws -> UserID
}
import HTTPClient
final class VersatileAPIClient {
static let shared = VersatileAPIClient()
private let httpClient = HTTPClient(baseURLString: "https://example.com/api/")
}
extension VersatileAPIClient: VersatileRepository {
func registerUser(name: String, description: String) async throws -> UserID {
let requestBody = RegisterUserRequestBody(name: name, description: description)
let responseBody = try await httpClient.request(RegisterUserRequest(), requestBody: requestBody)
return responseBody.convertToUserID()
}
}
do {
let userID = try await VersatileAPIClient.shared.registerUser(name: "Uhooi", description: "Green monster.")
// Do something.
} catch {
// Do error handling.
print(error)
}
I would be happy if you contribute :)
link |
Stars: 15 |
Last commit: 1 year ago |
Breaking
Enhancements
Swiftpack is being maintained by Petr Pavlik | @ptrpavlik | @swiftpackco | API | Analytics