Rust API客户端库printnanny-api-client的使用,实现与PrintNanny云服务的无缝集成与自动化交互
Rust API客户端库printnanny-api-client的使用,实现与PrintNanny云服务的无缝集成与自动化交互
概述
printnanny-api-client是PrintNanny云服务的官方Rust API客户端库。该库通过OpenAPI Generator项目生成,使用远程服务器的openapi-spec规范创建。
技术规格:
- API版本:0.135.1
- 包版本:0.135.1
- 构建包:
com.printnanny.api.rust.RustClientGenerator
安装
将包放在项目文件夹中名为printnanny-api-client
的目录下,并在Cargo.toml
的[dependencies]
部分添加以下内容:
printnanny-api-client = { path = "./printnanny-api-client" }
或者直接运行:
cargo add printnanny-api-client
API端点文档
所有URI都是相对于http://localhost
的。以下是主要的API端点分类:
账户相关API
- 用户认证(2FA、登录、登出)
- 密码管理(重置、更改)
- 用户信息管理
设备相关API
- Raspberry Pi设备管理
- 网络设置
- 系统信息
- WebRTC视频流
3D打印相关API
- OctoPrint服务器管理
- Gcode文件管理
- 打印机配置文件
- 打印任务警报
视频相关API
- 摄像头快照
- 视频录制
- 视频分段
完整示例代码
下面是一个使用printnanny-api-client与PrintNanny云服务交互的完整示例:
use printnanny_api_client::apis::configuration::{ApiKey, Configuration};
use printnanny_api_client::apis::accounts_api;
use printnanny_api_client::models::{LoginRequest, User};
#[tokio::main]
async fn main() {
// 配置API客户端
let mut config = Configuration::new();
config.base_path = "https://printnanny.ai/api".to_string();
// 用户登录
let login_request = LoginRequest {
email: "your@email.com".to_string(),
password: "yourpassword".to_string(),
};
match accounts_api::accounts_login_create(&config, login_request).await {
Ok(response) => {
// 保存认证token供后续请求使用
if let Some(token) = response.key {
config.api_key = Some(ApiKey {
prefix: None,
key: token,
});
// 获取当前用户信息
match accounts_api::accounts_user_retrieve(&config).await {
Ok(user) => println!("Logged in as: {:?}", user.email),
Err(e) => eprintln!("Failed to fetch user: {:?}", e),
}
}
}
Err(e) => eprintln!("Login failed: {:?}", e),
}
// 获取设备列表
let devices_config = config.clone();
match printnanny_api_client::apis::devices_api::pis_list(&devices_config).await {
Ok(devices) => {
println!("Found {} devices:", devices.results.len());
for device in devices.results {
println!("- {} (ID: {})", device.hostname, device.id);
}
}
Err(e) => eprintln!("Failed to fetch devices: {:?}", e),
}
}
扩展示例代码
下面是一个扩展的完整示例,展示更多API功能:
use printnanny_api_client::apis::{
accounts_api, devices_api, octoprint_api, videos_api
};
use printnanny_api_client::apis::configuration::{ApiKey, Configuration};
use printnanny_api_client::models::{
LoginRequest, PatchedPiRequest, Pi, OctoPrintServer, VideoRecording
};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// 初始化配置
let mut config = Configuration::new();
config.base_path = "https://printnanny.ai/api".to_string();
// 1. 用户认证
println!("=== 用户登录 ===");
let login_request = LoginRequest {
email: "your@email.com".to_string(),
password: "yourpassword".to_string(),
};
let login_response = accounts_api::accounts_login_create(&config, login_request).await?;
if let Some(token) = login_response.key {
config.api_key = Some(ApiKey {
prefix: None,
key: token,
});
// 2. 获取用户信息
let user = accounts_api::accounts_user_retrieve(&config).await?;
println!("当前用户: {}", user.email);
// 3. 设备管理
println!("\n=== 设备管理 ===");
let devices = devices_api::pis_list(&config).await?;
println!("找到 {} 个设备", devices.results.len());
// 更新第一个设备信息
if let Some(first_device) = devices.results.first() {
let update_request = PatchedPiRequest {
hostname: Some("new-hostname".to_string()),
..Default::default()
};
let updated_device = devices_api::pis_partial_update(
&config,
first_device.id.to_string(),
Some(update_request)
).await?;
println!("更新后的设备名称: {}", updated_device.hostname);
}
// 4. OctoPrint服务器管理
println!("\n=== OctoPrint服务器 ===");
let octoprint_servers = octoprint_api::octoprint_servers_list(&config).await?;
for server in octoprint_servers.results {
println!("OctoPrint服务器: {} (API密钥: {})",
server.name,
server.api_key.unwrap_or_default()
);
}
// 5. 视频录制管理
println!("\n=== 视频录制 ===");
let recordings = videos_api::videos_recordings_list(&config).await?;
for recording in recordings.results {
println!("视频录制: {} (状态: {})",
recording.file_name.unwrap_or_default(),
recording.status.unwrap_or_default()
);
}
}
Ok(())
}
模型文档
该库包含了与PrintNanny API交互所需的所有模型,包括:
- 用户账户模型
- 设备信息模型
- 3D打印相关模型
- 视频录制模型
- 订单和支付模型
要访问生成的文档,可以使用:
cargo doc --open
许可证
该库使用AGPL-3.0许可证。
作者
Leigh Johnson leigh@printnanny.ai
1 回复
Rust API客户端库printnanny-api-client使用指南
介绍
printnanny-api-client
是一个Rust库,用于与PrintNanny云服务进行交互。PrintNanny是一个3D打印监控和管理平台,该客户端库允许开发者通过Rust程序与PrintNanny云服务进行无缝集成和自动化交互。
主要功能
- 认证与授权
- 设备管理
- 打印作业监控
- 事件处理
- 云配置同步
完整示例代码
下面是一个综合使用printnanny-api-client的完整示例,包含了认证、设备管理、打印监控和事件处理等功能:
use printnanny_api_client::{
apis::{auth_api, configuration, devices_api, events_api, prints_api},
models::EventType,
};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// 1. 初始化配置
let mut config = configuration::Configuration::new();
// 2. 用户认证
println!("正在登录PrintNanny服务...");
let token = auth_api::auth_login(
&config,
"your_username", // 替换为您的用户名
"your_password" // 替换为您的密码
).await?;
config.bearer_access_token = Some(token.access);
println!("登录成功,获取到访问令牌");
// 3. 获取设备列表
println!("\n获取设备列表...");
let devices = devices_api::devices_list(&config).await?;
println!("当前账户下的设备数量: {}", devices.len());
// 4. 监控当前打印作业
println!("\n检查当前打印作业...");
match prints_api::prints_current_retrieve(&config).await {
Ok(current_print) => {
println!("当前打印作业信息: {:?}", current_print);
if let Some(progress) = current_print.progress {
println!("打印进度: {:.2}%", progress * 100.0);
}
}
Err(e) => {
println!("没有活动的打印作业: {}", e);
}
}
// 5. 获取最近的事件
println!("\n获取最近的事件...");
let events = events_api::events_list(
&config,
None, // 分页页码
None, // 每页数量
None, // 排序字段
Some(EventType::PrintStarted) // 事件类型过滤
).await?;
println!("最近{}个PrintStarted事件:", events.results.len());
for event in events.results {
println!(
"事件ID: {}, 类型: {:?}, 时间: {}",
event.id,
event.event_type,
event.created
);
}
Ok(())
}
代码说明
- 初始化配置:创建基本的API配置对象
- 用户认证:使用用户名和密码获取访问令牌,并保存到配置中
- 设备管理:列出当前账户下的所有设备
- 打印监控:检查当前是否有活跃的打印作业,并显示进度
- 事件处理:查询特定类型的事件记录
编译和运行
- 将上述代码保存为
main.rs
- 确保
Cargo.toml
中包含所需依赖 - 运行命令:
cargo run
注意事项
- 替换示例中的用户名和密码为您自己的凭证
- 根据实际需求调整事件类型过滤条件
- 生产环境中应考虑将敏感信息如API密钥存储在安全的地方
- 建议添加适当的错误处理和重试机制
这个完整示例演示了如何使用printnanny-api-client库与PrintNanny云服务进行交互,涵盖了从认证到数据查询的主要功能。