29 个版本 (10 个重大更新)
0.10.0 | 2024 年 8 月 12 日 |
---|---|
0.9.5 | 2024 年 6 月 24 日 |
0.8.0 | 2024 年 6 月 10 日 |
#1148 in 网络编程
每月 175 次下载
89KB
1K SLoC
厌倦了与 RPC 模板代码的斗争?Qubit 简化了 Rust 服务与 TypeScript 客户端之间的通信,提供类型安全且功能丰富的开发体验,让您可以专注于构建出色的应用程序。
特性
-
生成的类型安全客户端:告别手动类型定义,Qubit 根据您的 Rust API 自动生成 TypeScript 客户端,确保开发过程流畅。
-
订阅:使用订阅构建实时、数据驱动的应用程序,允许 Rust 服务器直接将数据推送到连接的 TypeScript 客户端。
-
构建模块化 API:将 API 处理器组织到嵌套路由中,确保在服务扩展时保持简单性和可维护性。
-
Serde 兼容性:利用 Serde 在 Rust 和 TypeScript 之间进行无缝数据序列化和反序列化。
-
基于 JSONRPC 2.0 构建:需要非 TypeScript 客户端?使用任何语言中的 JSONRPC 客户端,通过 WebSocket 或 HTTP。
入门
- 添加所需的依赖项
# Cargo.toml
[dependencies]
qubit = "0.6.1"
ts-rs = "8.1.0" # Required to generate TS types
serde = { version = "1.0", features = ["derive"] } # Required for serialisable types
futures = "0.3.30" # Required for streaming functionality
tokio = { version = "1.38", features = ["full"] }
axum = "0.7"
hyper = { version = "1.0", features = ["server"] }
pnpm i @qubit-rs/client@latest
- 设置 Qubit 路由,并保存生成的类型
#[handler(query)]
async fn hello_world() -> String {
"Hello, world!".to_string()
}
let router = Router::new()
.handler(hello_world);
router.write_bindings_to_dir("./bindings");
- 将 Qubit 路由附加到 Axum 路由,并启动它
// Create a service and handle
let (qubit_service, qubit_handle) = router.to_service(());
// Nest into an Axum router
let axum_router = axum::Router::<()>::new()
.nest_service("/rpc", qubit_service);
// Start a Hyper server
axum::serve(
tokio::net::TcpListener::bind(&SocketAddr::from(([127, 0, 0, 1], 9944)))
.await
.unwrap(),
axum_router,
)
.await
.unwrap();
qubit_handle.stop().unwrap();
- 从 TypeScript 客户端发送请求
// Import transport from client, and generated server type
import { build_client, http } from "@qubit-rs/client";
import type { QubitServer } from "./bindings";
// Connect with the API
const api = build_client<QubitServer>(http("https://127.0.0.1:9944/rpc"));
// Call the handlers
const message = await api.hello_world.query();
console.log("received from server:", message);
示例
查看 examples
目录中的所有示例。
常见问题解答
Qubit 是什么意思?
“Qubit”一词指的是量子信息的基本单位。正如量子比特可以存在于状态的叠加中一样,Qubit 在 Rust 和 TypeScript 之间架起了一座桥梁,使开发者能够创建真正出色的应用程序。
现有技术
依赖项
~12–22MB
~306K SLoC