Communiquez facilement via HTTP dans Swift.
Vous pouvez ajouter ce package à
Package.swift, l'inclure dans vos dépendances cibles.
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"]),
]
)
Vous pouvez ajouter ce package sur Xcode. Voir la documentation .
Cette bibliothèque est disponible via CocoaPods . Pour l'installer, ajoutez simplement la ligne suivante à votre
Podfile:
pod 'UHIHTTPClient', '~> 0.6.0'
Cette bibliothèque est disponible via Carthage . Pour l'installer, ajoutez simplement la ligne suivante à votre
Cartfile:
github "uhooi/swift-http-client" ~> 0.6.0
Vous pouvez simplement importer
HTTPClientpour l'utiliser.
Implémentez une structure de corps de requête conforme au
Encodableprotocole. (Optionnel)
struct RegisterUserRequestBody: Encodable {
let name: String
let description: String
}
Implémentez une structure de corps de réponse conforme au
Decodableprotocole.
struct RegisterUserResponseBody: Decodable {
let id: String
}
extension RegisterUserResponseBody {
func convertToUserID() -> UserID { .init(id: self.id) }
}
Implémentez une structure de requête conforme au
Requestprotocole.
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] }
}
Créez une instance de la
HTTPClientclasse et appelez la
requestméthode.
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)
}
Je serais heureux si vous contribuez :)