焰火 (Firework)

焰火 (Firework) 是 Alamofire 的一个封装。

Test codecov

要求

用法

1. 定义终点 (endpoints)

extension Endpoint {
    // Base endpoint
    static var base: Endpoint { "https://some.api.com" }
    
    // Health check API endpoint
    static var healthCheck: Endpoint { base / "health" } // https://some.api.com/health
    
    // User API endpoints
    static var user: Endpoint { base / "user" }
    static var login: Endpoint { user / "login" }
    static var profile: Endpoint { user / "profile" } // https://some.api.com/user/profile
}

2. 发送请求

例如,发送一个 GET 请求

// A GET request type
struct HealthCheckRequest: GETRequest {
    var endpoint: Endpoint { .healthCheck }
}

// Send a request [async version]
do {
    let request = HealthCheckRequest()
    let _ = try await HTTPClient().send(request).result.get()
    print("Healthy!")
} catch {
    print(error)
}

// Send a request [callback version]
let request = HealthCheckRequest()
HTTPClient().send(request) { response in
    switch response.result {
    case .success:
        print("Healthy!")
    case .failure(let error):
        print(error)
    }
}

例如,发送一个 POST 请求并解码响应 JSON

// A type corresponding to response JSON such as `{ "name": "...", "age": ... }`
struct Profile: Decodable {
    let name: String
    let age: Int
}

// A POST request type
struct ProfileRequest: POSTRequest, DecodingRequest {
    typealias Response = Profile
    let userID: Int
    
    var endpoint: Endpoint { .profile }
    var body: [String: Any] {
        ["user_id": userID]
    }
}

// Send a request [async version]
do {
    let request = ProfileRequest(userID: 100)
    let profile = try await HTTPClient().send(request).result.get()
    // The type of `profile` is `Profile`
    print("User name:", profile.name)
} catch {
    print(error)
}

// Send a request [callback version]
let request = ProfileRequest(userID: 100)
HTTPClient().send(request, decodingCompletion: { response in
    switch response.result {
    case .success(let profile):
        // The type of `profile` is `Profile`
        print("User name:", profile.name)
    case .failure(let error):
        print(error)
    }
})

在你的项目中使用 Firework

要在 SwiftPM 项目中使用 Firework 库,请将以下行添加到你的 Package.swift 文件中的 dependencies 中

.package(url: "https://github.com/jrsaruo/Firework", from: "3.0.2"),

并添加 Firework 作为你的目标的依赖项

.target(name: "<target>", dependencies: [
    .product(name: "Firework", package: "Firework"),
    // other dependencies
]),

最后,在你的源代码中添加 import Firework