25 个版本
新 0.5.0-a.2 | 2024 年 8 月 20 日 |
---|---|
0.5.0-a.1 | 2024 年 3 月 19 日 |
0.4.0 | 2024 年 3 月 12 日 |
0.3.4 | 2023 年 2 月 16 日 |
0.0.0 | 2022 年 3 月 24 日 |
215 在 HTTP 客户端
155 每月下载量
在 chrs 中使用
100KB
2.5K SLoC
ChRIS Rust 客户端库
lib.rs
:
简介
ChRIS 是一个科学和医疗计算平台。在 ChRIS 中,称为 ChRIS 插件 的对象代表数据处理软件。用户可以通过创建 插件实例 来运行 插件。将 插件实例 链组织为 数据流。
大多数 ChRIS API,也称为 CUBE,需要用户帐户。API 端点的一小部分可以匿名以只读模式访问。例如,任何人都可以列出 CUBE 的插件。但是,创建 插件实例 和浏览非公开 数据流 需要用户帐户。
提示:阅读集成测试代码以获取代码示例。
- https://github.com/FNNDSC/chrs/blob/master/chris/tests/test_public.rs
- https://github.com/FNNDSC/chrs/blob/master/chris/tests/test_logged_in.rs
身份验证
通常,您从 CUBE URL、用户名和密码开始。首先,使用 Account::get_token
获取令牌,然后调用 ChrisClient::build
。
对于匿名访问,只需调用 AnonChrisClient::build
。
访问模式
所有客户端结构体都是泛型于[访问权],可以是[读写访问权]或[只读访问权]。在许多情况下,只有在对象类型为[读写访问权]时,方法才可用。例如,PluginRw::create_instance
定义在类型Plugin<RwAccess>
上,但对于Plugin<RoAccess>
则不存在此类方法。
在[读写访问权]或[只读访问权]都适用的情况下,实现您的函数以泛型于[访问权]。例如,
use chris::{Access, BaseChrisClient, Plugin};
async fn generic_example<A: Access, C: BaseChrisClient<A>>(chris: &C) -> Plugin<A> {
todo!()
}
与[只读访问权]泛型的类型通常具有与[读写访问权]泛型相同类型的方法子集。如果[只读访问权]对您来说足够好,请考虑使用[EitherClient]
use chris::{BaseChrisClient, EitherClient, PluginRo};
async fn either_client_example(chris: &EitherClient) -> PluginRo {
chris.plugin().name("pl-dircopy").search().get_only().await.unwrap()
}
通过调用AuthedChrisClient::into_ro、EitherClient::into_ro、search::Search::into_ro、search::QueryBuilder::into_ro或LinkedModel::from,可以将对象从T<Access>
转换为T<RoAccess>
。
搜索集合
ChRIS API围绕对象和集合的概念设计。例如,插件集合API是api/v1/plugins/
,而特定的插件可以从api/v1/plugins/1/
、api/v1/plugins/2/
等检索。集合通常也具有搜索API,例如api/v1/plugins/search/?name=pl-example
。
许多函数返回一个search::Search。例如,假设您想要一个[Plugin]。您需要像这样搜索它
use chris::{Access. BaseChrisClient, Plugin};
async fn get_plugin_example<A: Access, C: BaseChrisClient<A>>(chris: &C) -> Plugin<A> {
chris
.plugin()
.name("pl-example")
.search()
.get_first()
.await
.unwrap()
.expect("plugin not found")
}
您可以使用search::Search::get_first
来获取Option<T>
,或者使用[search::Search::get_only()
]来获取仅有的T
。
响应数据,链接结构与未链接结构
直接表示JSON API响应数据的结构体定义在 src/models/data.rs
中,遵循命名规范 *Response
,例如 [PluginResponse]。这些响应数据结构体,与 [Access] 和 [request::Client] 结合,是 [LinkedModel] 的泛型参数。为特定的泛型类型组合定义了特定方法。例如,当有读写访问权限时,你可以获取订阅源的笔记。因此,为 [LinkedModel<FeedResponse, RwAccess>
] 定义了 FeedRw::note
方法。
在某些情况下,API响应数据只包含指向对象的链接(例如 "https://example.org/api/v1/5/"
而不是完整的对象(例如 {"id": 5, "name": "Example feed", "url": "https://example.org/api/v1/5/", ...}
)。创建完整的 [LinkedModel] 可能会非常昂贵。因此,返回一个 [LazyLinkedModel],它的工作方式与 [LinkedModel] 相同,但缺少实际的对象数据。可以通过调用 LazyLinkedModel::get 来获取对象数据。
依赖项
~13–29MB
~487K SLoC