ApiKit Logo

Version Swift 6.0 MIT License Twitter: @danielsaidi Mastodon: @danielsaidi@mastodon.social

关于 ApiKit

ApiKit 是一个 Swift SDK,可以帮助您与任何 REST API 集成。

ApiKit 定义了一个 ApiClient 协议,该协议描述了如何从任何 REST API 请求原始数据和类型化数据。 该协议由 URLSession 实现,因此您无需创建客户端即可使用共享会话。

ApiKit 定义了 ApiEnvironmentApiRoute 协议,使您可以轻松地建模 API 环境和路由,以及一个 ApiRequest,它可以定义路由和响应类型,以便更易于使用。

安装

ApiKit 可以通过 Swift Package Manager 安装

https://github.com/danielsaidi/ApiKit.git

入门

假设您想要与 Yelp API 集成,该 API 可以返回餐厅、评论等。

您首先需要定义要集成的各种 API 环境。 在这种情况下,我们只与 v3 环境集成,这需要为所有请求提供 API 标头令牌

import ApiKit

enum YelpEnvironment: ApiEnvironment {

    case v3(apiToken: String)
    
    var url: String {
        switch self {
        case .v3: "https://api.yelp.com/v3/"
        }
    }
 
    var headers: [String: String]? {
        switch self {
        case .v3(let token): ["Authorization": "Bearer \(token)"]
        }
    }
}

然后,我们可以定义从 Yelp API 请求的路由。 在这种情况下,我们只获取按 ID 查找的商家

import ApiKit

enum YelpRoute: ApiRoute {

    case business(id: String)

    var path: String {
        switch self {
        case .business(let id): "businesses/\(id)"
        }
    }

    var httpMethod: HttpMethod { .get }
    var headers: [String: String]? { nil }
    var formParams: [String: String]? { nil }
    var postData: Data? { nil }
    
    var queryParams: [String: String]? {
        switch self {
        case .business: nil
        }
    }
}

有了环境和路由,我们可以使用任何 ApiClientURLSession 获取 YelpBusiness

let client = URLSession.shared
let environment = YelpEnvironment.v3(apiToken: "YOUR_TOKEN")
let route = YelpRoute.business(id: "abc123") 
let business: YelpBusiness = try await client.request(route, in: environment)

通用请求函数会自动将原始响应映射到请求的类型,并抛出发生的任何原始错误。 如果您想要获取原始数据或使用自定义错误处理,也有非通用变体。

有关更多信息,请参阅在线入门指南

文档

在线文档包含更多信息、文章、代码示例等。

演示应用程序

Demo 文件夹包含一个应用程序,可让您探索该库并与一些 API 集成。

支持我的工作

您可以在 GitHub Sponsors 上赞助我,或者联系我以获得付费支持,以帮助支持我的开源项目

您的支持使我能够投入更多精力到这些项目中,并使它们达到最佳状态。

联系方式

如果您有任何疑问或想以任何方式做出贡献,请随时与我联系

许可证

ApiKit 在 MIT 许可证下可用。 有关更多信息,请参见 LICENSE 文件。