Querl

CI Status Version License Platform

Querl 是一个极简的 GraphQL 客户端库。它的目标是不受你的应用程序架构和技术选型的影响。它可以与任何网络堆栈一起使用,并且不对你的模型定义方式做任何假设。此外,它尽可能地具有 Swift 的特性:面向协议、类型安全、并且充满了泛型。它没有任何依赖项,并且包含不到 200 行易于审查的代码。

Querl 不是一个 GraphQL 查询构建库。Querl 没有提供一个框架或 DSL 来在编译时构建查询,而是期望你使用你喜欢的测试工具(PawPostmanGraphiqlInsomnia 等)来生成一个静态的 .graphql 文件,然后 Querl 从磁盘读取该文件。

特性

Querl 支持以下 GraphQL 特性

它通过以下 Swift 语言特性支持这些 GraphQL 特性

Querl 尚未(还)支持以下 GraphQL 特性

示例

要运行示例项目,请克隆仓库,然后首先从 Example 目录运行 pod install

代码可以像这样简单

CountryForCode.graphql

query($code: ID!) {
    country(code: $code) {
        name
    }
}

main.swift

import Querl

struct CountryForCode: Query, HasArguments {
    struct Response: Decodable {
        let country: Country?
    }
    let code: String
}

let query = CountryForCode(code: "US")
let request = URLRequest(url: graphQLEndpoint)
request.httpMethod = "POST"
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = try JSONSerialization.data(withJSONObject: query.body)
let (data, _) = try await URLSession.shared.data(for: request)
let country = try CountryForCode.decodeResponse(data).country // "United States of America"

这种模式可以很容易地适应 Alamofire 或任何其他执行 POST 请求的网络库。

要求

Querl 需要 iOS 11.0 或更高版本。

安装

CocoaPods

Querl 可通过 CocoaPods 获得。要安装它,只需将以下行添加到您的 Podfile 中

pod 'Querl'

Swift Package Manager

将 Querl 声明为包依赖项。

.package(
    name: "Querl", 
    url: "https://github.com/joinhandshake/Querl", 
    .upToNextMinor(from: "0.1.0")),

在目标依赖项中使用 Querl

.product(name: "Querl", package: "Querl")

贡献

有关更多信息,请参见 CONTRIBUTING.md 。欢迎贡献!

行为准则

有关更多信息,请参见 CODE_OF_CONDUCT.md

作者

Joel Kin, open-source@joinhandshake.com, @foon@mastodon.social

许可证

Querl 在 Apache 2.0 许可下可用。有关更多信息,请参见 LICENSE 文件。