大家好,分享一个我在维护的 Rust 项目:
larksuite-oapi-sdk-rs 是一个 非官方 的飞书 / Lark Open Platform SDK。它面向需要用 Rust 做机器人、事件消费、长连接和 OpenAPI 自动化的场景。
- crates.io:https://crates.io/crates/larksuite-oapi-sdk-rs
- docs.rs:https://docs.rs/larksuite-oapi-sdk-rs/latest/larksuite_oapi_sdk_rs/
- GitHub:https://github.com/adamcavendish/larksuite-oapi-sdk-rs
为什么做它
飞书 / Lark 的官方 Go SDK 很完善,但在 Rust 服务里接入时,常常需要自己处理 token、请求签名、事件解密、长连接、卡片 JSON,以及大量接口的请求/响应模型。
这个 crate 尽量把这些部分做成可组合的 Rust API,同时保持与官方 Go SDK 的接口契约对齐。对于尚未提升为专用 Rust resource 的接口,也保留了 raw request 与兼容层入口。
现在包含什么
- tenant、user、app、marketplace token 获取、缓存与重试
- 类型化 OpenAPI resource:IM、Calendar、Drive、Docs、Sheets、Base、Approval、VC、Wiki、Hire 等
- 文件上传 / 下载、分页迭代器、请求与响应错误处理
- HTTP webhook 的签名校验、加密事件解密和事件分发
- WebSocket 长连接事件客户端,以及 Axum、channel 集成
- 交互式卡片:Card JSON v1/v2、CardKit 流式更新、Card Builder 模板与回调
- OAuth SSO、PKCE、token refresh 等 Feishu / Lark 登录流程
快速开始
[dependencies]
larksuite-oapi-sdk-rs = "0.3.11"
创建 client 后即可调用类型化 resource:
use larksuite_oapi_sdk_rs::service::im::v1::CreateMessageReqBody;
use larksuite_oapi_sdk_rs::{LarkClient, RequestOption};
let client = LarkClient::builder("APP_ID", "APP_SECRET").build()?;
let body = CreateMessageReqBody {
receive_id: Some("CHAT_ID".to_string()),
msg_type: Some("text".to_string()),
content: Some(r#"{"text":"Hello from Rust"}"#.to_string()),
uuid: None,
};
let response = client
.im()
.message
.create("chat_id", &body, &RequestOption::default())
.await?;
如果你想先做一个不需要公网 callback URL 的机器人,可以从这个教程开始:
https://github.com/adamcavendish/larksuite-oapi-sdk-rs/blob/main/docs/tutorial-build-a-feishu-bot.md
项目目前要求 Rust 1.95+、edition 2024,MIT License。 如果你在 Rust 中接入飞书 / Lark,尤其是遇到缺失 endpoint、事件模型、WebSocket 或卡片协议问题,欢迎提 Issue 或来讨论;带上官方文档或 Go SDK 对应实现会很有帮助。
Ext Link: https://github.com/adamcavendish/larksuite-oapi-sdk-rs
评论区
写评论还没有评论