Azure Cosmos DB Rust SDK(NoSQL API),用于文档CRUD、查询、容器和全球分布式数据操作。技能概述azure-cosmos-rust 技能是Azure Cosmos DB NoSQL API的Rust客户端库,提供全球分布式、多模型数据库的完整支持。该SDK利用Rust的内存安全和高性能特性,适用于构建可靠、高效的数据访问层。通过该技能,开发者可以快速实现文档的CRUD操作、查询执行和容器管理等功能,同时享受Rust语言带来的类型安全和零成本抽象优势。下载地址:https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/azure-cosmos-rust主要功能文档CRUD操作: 支持文档的创建、读取、更新、删除和Patch操作类型安全: 使用Serde实现强类型的序列化和反序列化异步API: 基于Tokio的异步操作,适用于高并发场景Entra ID认证: 支持使用DeveloperToolsCredential进行安全认证密钥认证: 可选的密钥认证支持(需要启用feature flag)全球分布: 支持配置首选区域实现低延迟访问线程安全: 客户端实例可安全地在多线程间共享和重用触发条件在以下情况下应该使用此技能:需要使用Rust开发Azure Cosmos DB应用需要构建高性能、内存安全的数据访问层需要实现文档的CRUD操作和查询功能需要使用异步API处理高并发请求需要利用Rust的类型系统确保数据安全需要构建跨平台的高性能服务使用场景高性能服务开发构建需要极高性能和低延迟的服务,利用Rust的零成本抽象和内存安全特性,实现可靠的数据访问。系统级应用开发操作系统级或嵌入式应用,使用Cosmos DB作为数据存储,享受Rust的资源效率。WebAssembly应用构建WebAssembly应用,使用Cosmos DB作为后端存储,实现跨平台的高性能解决方案。处理过程1. 客户端初始化创建Cosmos客户端并配置认证:use azure_identity::DeveloperToolsCredential;use azure_data_cosmos::CosmosClient;let credential DeveloperToolsCredential::new(None)?;let client CosmosClient::new(https://account.documents.azure.com:443/,credential.clone(),None,)?;2. 获取数据库和容器客户端获取数据库和容器的客户端实例:let database client.database_client(myDatabase);let container database.container_client(myContainer);3. 文档CRUD操作定义数据结构并执行CRUD操作:rustuse serde::{Serialize, Deserialize};#[derive(Serialize, Deserialize)]struct Item {pub id: String,pub partition_key: String,pub value: String,}// 创建文档let item Item {id: 1.into(),partition_key: partition1.into(),value: hello.into(),};container.create_item(partition1, item, None).await?;// 读取文档let response container.read_item(partition1, 1, None).await?;let item: Item response.into_model()?;// 替换文档let mut item: Item container.read_item(partition1, 1, None).await?.into_model()?;item.value updated.into();container.replace_item(partition1, 1, item, None).await?;// 删除文档container.delete_item(partition1, 1, None).await?;4. Patch操作执行部分更新操作:use azure_data_cosmos::models::PatchDocument;let patch PatchDocument::default().with_add(/newField, newValue)?.with_remove(/oldField)?;container.patch_item(partition1, 1, patch, None).await?;输入要求使用此技能时,需要提供:Cosmos DB账户端点URL认证凭据(Entra ID或密钥)数据库名称和容器ID分区键值文档数据结构(Serialize和Deserialize trait)输出说明技能将提供:完整的客户端初始化代码数据结构定义示例CRUD操作实现代码Patch操作示例错误处理和最佳实践使用示例示例1: 完整CRUD操作use azure_identity::DeveloperToolsCredential;use azure_data_cosmos::CosmosClient;use serde::{Serialize, Deserialize};#[derive(Serialize, Deserialize)]struct Product {pub id: String,pub partition_key: String,pub name: String,pub price: f64,}#[tokio::main]async fn main() - Result(), Boxdyn std::error::Error {let credential DeveloperToolsCredential::new(None)?;let client CosmosClient::new(https://account.documents.azure.com:443/,credential.clone(),None,)?;let container client.database_client(mydb).container_client(mycontainer);// 创建let product Product {id: product-1.into(),partition_key: electronics.into(),name: Laptop.into(),price: 999.99,};container.create_item(electronics, product, None).await?;// 读取let response container.read_item(electronics, product-1, None).await?;let product: Product response.into_model()?;println!(Product: {} - ${}, product.name, product.price);Ok(())}示例2: Patch操作use azure_data_cosmos::models::PatchDocument;let patch PatchDocument::default().with_add(/discount, true)?.with_replace(/price, 899.99)?.with_remove(/oldField)?;container.patch_item(electronics, product-1, patch, None).await?;最佳实践始终指定分区键: 点读取和写入操作需要分区键,确保正确指定使用into_model(): 使用into_model()?方法将响应反序列化为自定义类型派生Serialize和Deserialize: 为所有文档类型派生Serde trait使用Entra ID认证: 优先使用DeveloperToolsCredential而不是密钥认证重用客户端实例: 客户端是线程安全的,可以在整个应用中重用错误处理: 使用Result类型正确处理可能的错误客户端层次结构客户端用途获取方式CosmosClient账户级操作直接实例化DatabaseClient数据库操作client.database_client()ContainerClient容器/项目操作database.container_client()密钥认证(可选)启用密钥认证:如果需要使用密钥认证而不是Entra ID,需要启用feature flag:cargo add azure_data_cosmos --features key_auth安装和配置# 添加依赖cargo add azure_data_cosmos azure_identity# 环境变量COSMOS_ENDPOINThttps://account.documents.azure.com:443/COSMOS_DATABASEmydbCOSMOS_CONTAINERmycontainer参考资源资源链接API参考azure_data_cosmos - Rust源代码GitHub仓库crates.iohttps://crates.io/crates/azure_data_cosmos