5 个版本 (2 个稳定版)
1.1.0 | 2023年7月18日 |
---|---|
1.0.0 | 2023年6月18日 |
0.3.0 | 2019年9月21日 |
0.2.0 | 2019年9月1日 |
0.1.0 | 2019年8月31日 |
#2065 in 网页编程
74KB
1.5K SLoC
aliyun-openapi-core-rust-sdk
Aliyun OpenAPI POP核心SDK for Rust.
说明
您必须知道您的 AK
(accessKeyId/accessKeySecret
),以及阿里云产品的 endpoint
和 apiVersion
。
例如,ECS OpenAPI,API版本为 2014-05-26
。
端点列表可以在这里找到,中心端点是 ecs.aliyuncs.com。添加 http 协议 http
或 https
,应该是 https://ecs.aliyuncs.com/
。
安装
在您的项目目录中运行以下Cargo命令
cargo add aliyun-openapi-core-rust-sdk
或者将以下行添加到您的Cargo.toml
aliyun-openapi-core-rust-sdk = "1.1.0"
用法
RPC 风格客户端
use std::collections::HashMap;
use std::env;
use std::error::Error;
use aliyun_openapi_core_rust_sdk::client::rpc::RPClient;
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Debug)]
#[serde(rename_all = "PascalCase")]
struct Region {
region_id: String,
region_endpoint: String,
local_name: String,
}
#[derive(Serialize, Deserialize, Debug)]
#[serde(rename_all = "PascalCase")]
struct RegionList {
request_id: String,
regions: HashMap<String, Vec<Region>>,
}
#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
// create rpc style api client.
let aliyun_openapi_client = RPClient::new(
env::var("ACCESS_KEY_ID")?,
env::var("ACCESS_KEY_SECRET")?,
"https://ecs.aliyuncs.com/",
);
// call `DescribeRegions` with empty queries, return `RegionList`
let response = aliyun_openapi_client
.clone()
.version("2014-05-26")
.get("DescribeRegions")
.json::<RegionList>()
.await?;
println!("DescribeRegions response: {response:#?}");
// call `DescribeInstances` with queries, return `String`
let response = aliyun_openapi_client
.version("2014-05-26")
.get("DescribeInstances")
.query([("RegionId", "cn-hangzhou")])
.text()
.await?;
println!("DescribeInstances response: {response}");
Ok(())
}
ROA 风格客户端
use std::collections::HashMap;
use std::env;
use std::error::Error;
use aliyun_openapi_core_rust_sdk::client::roa::ROAClient;
use serde::{Deserialize, Serialize};
use serde_json::json;
#[derive(Serialize, Deserialize, Debug)]
#[serde(rename_all = "PascalCase")]
struct TranslateData {
word_count: String,
translated: String,
}
#[derive(Serialize, Deserialize, Debug)]
#[serde(rename_all = "PascalCase")]
struct Translate {
request_id: String,
data: TranslateData,
code: String,
}
#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
// create roa style api client.
let aliyun_openapi_client = ROAClient::new(
env::var("ACCESS_KEY_ID")?,
env::var("ACCESS_KEY_SECRET")?,
"http://mt.aliyuncs.com",
);
// create params.
let mut params = HashMap::new();
params.insert("SourceText", "你好");
params.insert("SourceLanguage", "zh");
params.insert("TargetLanguage", "en");
params.insert("FormatType", "text");
params.insert("Scene", "general");
// call `Translate` with json params, return `Translate`
let response = aliyun_openapi_client
.version("2018-04-08")
.post("/api/translate/web/general")
.header([("Content-Type".to_string(), "application/json".to_string())])?
.body(json!(params).to_string())?
.json::<Translate>()
.await?;
println!("Translate response: {response:#?}");
Ok(())
}
示例
导出AK信息到环境变量,然后运行 cargo run --example <NAME>
export ACCESS_KEY_ID=<access_key_id>
export ACCESS_KEY_SECRET=<access_key_secret>
# ecs example
cargo run --example ecs
# rds example
cargo run --example rds
# slb example
cargo run --example slb
# vpc example
cargo run --example vpc
# log service(SLS) example
cargo run --example log_service
许可证
MIT许可证
依赖项
~5–17MB
~265K SLoC