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(())
}

代码说明

  1. 初始化配置:创建基本的API配置对象
  2. 用户认证:使用用户名和密码获取访问令牌,并保存到配置中
  3. 设备管理:列出当前账户下的所有设备
  4. 打印监控:检查当前是否有活跃的打印作业,并显示进度
  5. 事件处理:查询特定类型的事件记录

编译和运行

  1. 将上述代码保存为main.rs
  2. 确保Cargo.toml中包含所需依赖
  3. 运行命令:cargo run

注意事项

  1. 替换示例中的用户名和密码为您自己的凭证
  2. 根据实际需求调整事件类型过滤条件
  3. 生产环境中应考虑将敏感信息如API密钥存储在安全的地方
  4. 建议添加适当的错误处理和重试机制

这个完整示例演示了如何使用printnanny-api-client库与PrintNanny云服务进行交互,涵盖了从认证到数据查询的主要功能。

回到顶部