Expand description
§Azure Cosmos DB SDK for Rust.
This client library enables client applications to connect to Azure Cosmos DB via the NoSQL API. Azure Cosmos DB is a globally distributed, multi-model database service.
Source code | Package (crates.io) | API reference documentation | Azure Cosmos DB for NoSQL documentation
§Getting started
§Install the package
Install the Azure Cosmos DB SDK for Rust with cargo:
cargo add azure_data_cosmos
§Prerequisites
- An Azure subscription or free Azure Cosmos DB trial account.
Note: If you don’t have an Azure subscription, create a free account before you begin. You can Try Azure Cosmos DB for free without an Azure subscription, free of charge and commitments, or create an Azure Cosmos DB free tier account, with the first 400 RU/s and 5 GB of storage for free. You can also use the Azure Cosmos DB Emulator with a URI of https://localhost:8081. For the key to use with the emulator, see how to develop with the emulator.
§Create an Azure Cosmos DB account
You can create an Azure Cosmos DB account using:
§Authenticate the client
In order to interact with the Azure Cosmos DB service you’ll need to create an instance of the CosmosClient
struct. To make this possible you will need a URL and key of the Azure Cosmos DB service.
§Examples
The following section provides several code snippets covering some of the most common Azure Cosmos DB NoSQL API tasks, including:
§Create Cosmos DB Client
In order to interact with the Azure Cosmos DB service, you’ll need to create an instance of the CosmosClient
. You need an endpoint URL and credentials to instantiate a client object.
Using Microsoft Entra ID
The example shown below use a DefaultAzureCredential
, which is appropriate for most local development environments. Additionally, we recommend using a managed identity for authentication in production environments. You can find more information on different ways of authenticating and their corresponding credential types in the Azure Identity documentation.
The DefaultAzureCredential
will automatically pick up on an Azure CLI authentication. Ensure you are logged in with the Azure CLI:
az login
Instantiate a DefaultAzureCredential
to pass to the client. The same instance of a token credential can be used with multiple clients if they will be authenticating with the same identity.
use azure_identity::DefaultAzureCredential;
use azure_data_cosmos::CosmosClient;
async fn example() -> Result<(), Box<dyn std::error::Error>> {
let credential = DefaultAzureCredential::new()?;
let cosmos_client = CosmosClient::new("myAccountEndpointURL", credential.clone(), None)?;
Ok(())
}
Using account keys
Cosmos DB also supports account keys, though we strongly recommend using Entra ID authentication. To use account keys, you will need to enable the key_auth
feature:
cargo add azure_data_cosmos --features key_auth
For more information, see the API reference documentation.
§CRUD operation on Items
use serde::{Serialize, Deserialize};
use azure_data_cosmos::{CosmosClient, models::PatchDocument};
#[derive(Serialize, Deserialize)]
struct Item {
pub id: String,
pub partition_key: String,
pub value: String,
}
async fn example(cosmos_client: CosmosClient) -> Result<(), Box<dyn std::error::Error>> {
let item = Item {
id: "1".into(),
partition_key: "partition1".into(),
value: "2".into(),
};
let container = cosmos_client.database_client("myDatabase").container_client("myContainer");
// Create an item
container.create_item("partition1", item, None).await?;
// Read an item
let item_response = container.read_item("partition1", "1", None).await?;
let mut item: Item = item_response.into_json_body().await?;
item.value = "3".into();
// Replace an item
container.replace_item("partition1", "1", item, None).await?;
// Patch an item
let patch = PatchDocument::default()
.with_add("/newField", "newValue")?
.with_remove("/oldFieldToRemove")?;
container.patch_item("partition1", "1", patch, None).await?;
// Delete an item
container.delete_item("partition1", "1", None).await?;
Ok(())
}
§Next steps
§Next steps
§Provide feedback
If you encounter bugs or have suggestions, open an issue.
§Contributing
This project welcomes contributions and suggestions. Most contributions require you to agree to a Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us the rights to use your contribution. For details, visit https://cla.microsoft.com.
When you submit a pull request, a CLA-bot will automatically determine whether you need to provide a CLA and decorate the PR appropriately (e.g., label, comment). Simply follow the instructions provided by the bot. You’ll only need to do this once across all repos using our CLA.
This project has adopted the Microsoft Open Source Code of Conduct. For more information, see the Code of Conduct FAQ or contact opencode@microsoft.com with any additional questions or comments.
Modules§
- clients
- Clients used to communicate with Azure Cosmos DB
- constants
- Constants defining HTTP headers and other values relevant to Azure Cosmos DB APIs.
- models
- Model types sent to and received from the Azure Cosmos DB API.
Structs§
- Cosmos
Client - Client for Azure Cosmos DB.
- Cosmos
Client Options - Options used when creating a
CosmosClient
. - Create
Container Options - Options to be passed to
DatabaseClient::create_container()
. - Create
Database Options - Options to be passed to
CosmosClient::create_database()
. - Delete
Container Options - Options to be passed to
ContainerClient::delete()
. - Delete
Database Options - Options to be passed to
DatabaseClient::delete()
. - Feed
Page - Represents a single page of results from a Cosmos DB feed.
- Item
Options - Options to be passed to APIs that manipulate items.
- Partition
Key - Specifies a partition key value, usually used when querying a specific partition.
- Partition
KeyValue - Represents a value for a single partition key.
- Query
- Represents a Cosmos DB Query, with optional parameters.
- Query
Containers Options - Options to be passed to
DatabaseClient::query_containers()
- Query
Databases Options - Options to be passed to
CosmosClient::query_databases()
- Query
Options - Options to be passed to
ContainerClient::query_items()
. - Read
Container Options - Options to be passed to
ContainerClient::read()
. - Read
Database Options - Options to be passed to
DatabaseClient::read()
. - Replace
Container Options - Options to be passed to
ContainerClient::replace()
. - Throughput
Options - Options to be passed to operations related to Throughput offers.
Enums§
- Query
Partition Strategy - Describes the partition strategy that will be used when querying.
Type Aliases§
- Feed
Pager - Represents a stream of pages from a Cosmos DB feed.