14 个版本 (9 个重大变化)
新 0.10.0 | 2024年8月23日 |
---|---|
0.8.0 | 2024年8月2日 |
0.7.0 | 2024年7月27日 |
0.3.0 | 2024年3月15日 |
#2 in #open-stack
501 每月下载量
在 openstack_cli 中使用
9.5MB
216K SLoC
OpenStack API 绑定(SDK)
每个平台的API都需要为各种编程语言提供SDK绑定。Rust的OpenStack API绑定不是例外。OpenStack提供了一个名为openstack_sdk
的crate,它提供了一个具有同步和异步接口的SDK。
API绑定是从相应服务的OpenAPI规范生成的。这意味着它们只是封装API,通常不提供额外的便利功能。主要好处是生成的代码不需要维护。一旦OpenStack服务更新了集成资源的OpenAPI规范,更改将立即在下一次生成时可用。
功能
- 同步和异步接口
Query
、Find
和Pagination
接口实现了基本功能RawQuery
接口提供了更高级的API调用控制,具有上传和下载功能。- 每个URL + http方法 + body模式组合都由一个专门的模块表示
- 用户负责返回数据模式。
结构
每个API调用都由一个专门的模块表示,该模块实现REST Endpoint
接口。这意味着与POST
操作相比,GET
操作是一个专门实现。如结构文档中所述,每个RPC-like操作和每个微版本都使用单个模块实现。
使用
一个简单的示例,演示如何列出计算类型
use openstack_sdk::api::{paged, Pagination, QueryAsync};
use openstack_sdk::{AsyncOpenStack, config::ConfigFile, OpenStackError};
use openstack_sdk::types::ServiceType;
use openstack_sdk::api::compute::v2::flavor::list;
async fn list_flavors() -> Result<(), OpenStackError> {
// Get the builder for the listing Flavors Endpoint
let mut ep_builder = list::Request::builder();
// Set the `min_disk` query param
ep_builder.min_disk("15");
let ep = ep_builder.build().unwrap();
let cfg = ConfigFile::new().unwrap();
// Get connection config from clouds.yaml/secure.yaml
let profile = cfg.get_cloud_config("devstack".to_string()).unwrap().unwrap();
// Establish connection
let mut session = AsyncOpenStack::new(&profile).await?;
// Invoke service discovery when desired.
session.discover_service_endpoint(&ServiceType::Compute).await?;
// Execute the call with pagination limiting maximum amount of entries to 1000
let data: Vec<serde_json::Value> = paged(ep, Pagination::Limit(1000))
.query_async(&session)
.await.unwrap();
println!("Data = {:?}", data);
Ok(())
}
文档
Crate文档在此发布
项目文档在此可用
依赖项
~14–30MB
~416K SLoC