#api #api-bindings #iaa-s

digitalocean

一个纯 Rust 数字海洋 API 绑定

5 个版本

0.1.1 2020 年 7 月 28 日
0.0.4 2018 年 11 月 6 日
0.0.3 2017 年 9 月 3 日
0.0.2 2017 年 8 月 26 日
0.0.1 2017 年 8 月 26 日

#2367开发工具

每月 21 次下载

MIT 许可证

145KB
3K SLoC

数字海洋

Build Status Crates.io

一个用于与数字海洋 API 交互的 Crate。

在浏览此文档时,请鼓励参考 数字海洋文档

基本示例

extern crate digitalocean;
use digitalocean::prelude::*;
use std::env;

fn main() {
    let api_key = env::var("API_KEY")
        .expect("API_KEY not set.");
    let client = DigitalOcean::new(api_key)
        .unwrap();

    Droplet::list()
        .execute(&client);
}

使用基础

所有值(DomainSshKey 等)可以在 api 模块中找到。

调用一个动作将返回一个 Request<_,_> 类型。例如 Droplet::create() 将创建一个 Request<Create, Droplet>。这些类型可能有特定的进一步函数来构建请求或将其转换为其他请求。

extern crate digitalocean;
use digitalocean::DigitalOcean;
use digitalocean::api::Domain;

fn main() {
    // Gets details of a specific domain.
    let req = Domain::get("foo.com");

    // Get the records for that domain instead (futher build the request)
    let req = req.records();
    // Get the records of a domain without having a prior request.
    let req = Domain::get("foo.com").records();

    // Create a new record for a domain
    let req = Domain::get("foo.com").records().create("CNAME", "test", "127.0.0.1");
}

为了实现任何动作,必须使用 DigitalOcean 客户端调用 .execute()。也可以调用 do_client.execute(some_request)

为了使用整个 API,建议参考各种 Request 类型。

设计

该 Crate 基于几个设计考虑

  • 保持简单和通用。
  • 紧密映射到数字海洋 API。
  • RequestClient 是不可知的。
  • 应该难以发出无效的 API 请求。
  • 尽可能使用静态调度。
  • 应携带最少的必要信息。
  • 允许轻松构建单独的客户端(hyper 等)
  • 无缓存(目前尚无)。(数字海洋没有 ETags

调试

此 Crate 使用 log Crate。您可以通过传递环境变量等方式查看 digitalocean 日志

RUST_LOG=digitalocean=debug cargo run

开发状态

此 Crate 处于原型状态。

并非所有端点在生产DigitalOcean API上都已经经过完整的端到端测试。很可能有些端点会由于API返回的意外值而产生解析错误。

如果有什么地方不工作,请提交一个bug!

欢迎提供反馈、补丁和新增功能。请只打开一个issue或PR!

依赖项

~21MB
~444K SLoC