67 个版本 (37 个稳定版)
3.7.3 | 2024年6月4日 |
---|---|
3.7.0 | 2024年4月28日 |
3.5.0 | 2024年3月25日 |
3.3.0 | 2023年11月14日 |
0.1.2 | 2020年2月4日 |
在 网页编程 中排名 31
每月下载量 43,953
用于 49 个 Crates (22 个直接使用)
155KB
3.5K SLoC
概述
Cynic 是一个 Rust 的 GraphQL 库。它不是第一个,但它采用了与现有库不同的方法。
现有库采用查询优先的方法来处理 GQL - 你使用 GraphQL 编写查询,库使用宏为你生成 Rust 结构体。这非常简单,非常适合快速入门。然而,如果你想要使用宏生成的结构体之外的 struct,你可能就不幸了。一些更复杂的用例,如在不同查询之间共享 struct,通常也不受支持。
Cynic 采用不同的方法 - 它使用 Rust 结构体来定义查询,并从它们生成 GraphQL。这让你在享受类型安全查询的同时,还可以自由控制将要工作的结构体。当内置的 derives
不能满足你的需求时,它提供了更低级的 API 来挂钩并获取你想要的数据,并以你想要的工作格式获取。
当然,编写所有表示大型 GraphQL 查询的结构体可能相当具有挑战性,GraphQL 也有出色的工具来构建查询。Cynic 提供了 querygen
来帮助解决这个问题 - 你使用现有的 GQL 工具编写 GraphQL 查询,它会生成一些 cynic 结构体来执行这个查询。你可以将此用作项目的起点 - 要么直接添加到 rust 结构体中,要么根据需要重新使用 querygen
。
特性
Cynic 目前仍在开发中,但以下特性已支持
- 类型安全的查询和突变。
- 定义自定义标量。
- 在运行时构建动态(但仍经过类型检查)的查询。
- 查询参数,包括输入对象
- 接口和联合类型
- 通过
cynic-cli
或cynic-introspection
进行内省 - 通过
graphql-ws-client
使用 GraphQL 订阅。
以下功能目前不支持,但可能将来会支持。
- 指令
- 可能还有其他东西(如果发现任何明显缺失的内容,请提出问题)
文档
Cynic 的文档分布在几个地方
- 在 cynic-rs.dev 上有使用 cynic 的指南
- 在 docs.rs 上的参考文档
灵感来源
- graphql-client,原始的 Rust GraphQL 客户端。这是一个从 Rust 使用 GraphQL 的优秀库。它并不完全符合我的需求,但可能符合你的需求。
- 将 GraphQL 类型系统编码为 DSL 的想法来自 elm-graphql。
- 大多数 JSON 解码 API 都来自 Elm 中的 Json.Decode。
- 从结构体推导代码是 Rust 中的常见模式,尽管 serde 特别为 derive API 提供了灵感。
依赖项
~5–17MB
~211K SLoC