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

Download history 11170/week @ 2024-05-03 11620/week @ 2024-05-10 12272/week @ 2024-05-17 10421/week @ 2024-05-24 10570/week @ 2024-05-31 11120/week @ 2024-06-07 11827/week @ 2024-06-14 9285/week @ 2024-06-21 8278/week @ 2024-06-28 8095/week @ 2024-07-05 8757/week @ 2024-07-12 9189/week @ 2024-07-19 9735/week @ 2024-07-26 10543/week @ 2024-08-02 10224/week @ 2024-08-09 11517/week @ 2024-08-16

每月下载量 43,953
用于 49 个 Crates (22 个直接使用)

授权 MPL-2.0

155KB
3.5K SLoC

Cynic

Rust 的自携类型 GraphQL 客户端

Crate Info API Docs Discord Chat

文档 | 示例 | 变更日志

概述

Cynic 是一个 Rust 的 GraphQL 库。它不是第一个,但它采用了与现有库不同的方法。

现有库采用查询优先的方法来处理 GQL - 你使用 GraphQL 编写查询,库使用宏为你生成 Rust 结构体。这非常简单,非常适合快速入门。然而,如果你想要使用宏生成的结构体之外的 struct,你可能就不幸了。一些更复杂的用例,如在不同查询之间共享 struct,通常也不受支持。

Cynic 采用不同的方法 - 它使用 Rust 结构体来定义查询,并从它们生成 GraphQL。这让你在享受类型安全查询的同时,还可以自由控制将要工作的结构体。当内置的 derives 不能满足你的需求时,它提供了更低级的 API 来挂钩并获取你想要的数据,并以你想要的工作格式获取。

当然,编写所有表示大型 GraphQL 查询的结构体可能相当具有挑战性,GraphQL 也有出色的工具来构建查询。Cynic 提供了 querygen 来帮助解决这个问题 - 你使用现有的 GQL 工具编写 GraphQL 查询,它会生成一些 cynic 结构体来执行这个查询。你可以将此用作项目的起点 - 要么直接添加到 rust 结构体中,要么根据需要重新使用 querygen

特性

Cynic 目前仍在开发中,但以下特性已支持

  • 类型安全的查询和突变。
  • 定义自定义标量。
  • 在运行时构建动态(但仍经过类型检查)的查询。
  • 查询参数,包括输入对象
  • 接口和联合类型
  • 通过 cynic-clicynic-introspection 进行内省
  • 通过 graphql-ws-client 使用 GraphQL 订阅。

以下功能目前不支持,但可能将来会支持。

  • 指令
  • 可能还有其他东西(如果发现任何明显缺失的内容,请提出问题)

文档

Cynic 的文档分布在几个地方

  1. cynic-rs.dev 上有使用 cynic 的指南
  2. 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