#db #wrapper #thin #projects #interact #http-client #ksql

ksqldb

对 KSQL DB REST API 的一种轻量级封装,使其更适合 Rust 项目使用

6 个版本

0.1.0-alpha.62021 年 2 月 24 日
0.1.0-alpha.22021 年 2 月 21 日
0.1.0-alpha.12021 年 2 月 19 日

异步 中排名第 1790

Apache-2.0

50KB
836

Rust KSQL DB

crates.io docs repo Apache-2.0

本 crate 是对 KSQL-DB REST API 的一种轻量级封装,使得 Rust 项目与 API 的交互更加便捷。在底层,它使用 reqwest 作为 HTTP 客户端与 API 交互。

该项目处于早期阶段,仍在开发中,所以如果您有任何功能或改进建议,请提出问题。同样,所有贡献都受欢迎。

直到 v0.2 版本发布,项目将 不会 遵循 semver。即后续的 v0.1-alphav0.1-beta 发布可能包含破坏性变更,这是为了在早期阶段给库的自由,以快速改进 API 设计。一旦发布 v0.2,项目将遵循 semver。

crate 是什么,不是什么

crate 是什么

  • crate 的目的是提供一个与提供的 REST API 交互的便捷方式,这意味着已经为您创建了有用的抽象,如 futures::Stream
  • 提供类型化的响应和错误,而不是在您的应用程序代码中处理响应解析
  • 在性质上相当轻量级

这个 crate 不是什么 (目前)

  • 它不是一个 DSL,也不打算解析 SQL 语句或编译时

快速入门

use reqwest::Client;
use ksqldb::KsqlDB;
use futures_util::stream::StreamExt;
use serde::Deserialize;

#[derive(Debug, Deserialize)]
struct MyResponse {
    id: String,
    data: Vec<u32>
}

#[tokio::main]
async fn main() {
    let ksql = KsqlDB::new("localhost:8080".into(), Client::builder(), false).unwrap();

    let statement = r#"SHOW STREAMS EXTENDED;"#;
    let response = ksql.list_streams(&statement, &Default::default(), None).await.unwrap();
    println!("{:#?}", response);

    let query = r#"SELECT * FROM MY_STREAM EMIT CHANGES;"#;

    let mut stream = ksql.select::<MyResponse>(&query, &Default::default()).await.unwrap();

    while let Some(data) = stream.next().await {
        println!("{:#?}", data);
    }
}

文档

最低支持版本

  • 本 crate 将目前旨在支持 Rust 的最新 STABLE 版本
  • 这个包将致力于与KSQL-DB的最新稳定版本保持同步(目前为v0.15)

依赖项

~4–21MB
~275K SLoC