#cryptocurrency #kraken #crypto #api-bindings #http-client #api #api-client

kraapi

用于Kraken加密货币交易所的异步HTTP客户端

2个版本

0.2.1 2021年3月16日
0.2.0 2021年3月16日

#18 in #kraken

MIT/Apache

150KB
3K SLoC

克雷皮

Released API docs MIT licensed

用于Kraken加密货币交易所的异步HTTP客户端

特性

  • 异步
  • 类型驱动和自验证API
  • 易用且高效
  • 促进结构重用,避免不必要的分配或冗余HTTP客户端

安装

通过Crates.io - 在您的Cargo.toml中添加以下内容

kraapi = "0.2"

通过本地克隆 - 在您的Cargo.toml中添加以下内容

kraapi = { path = "path/to_local_checkout" }

一般说明 - TLDR

  • 每个输入类型都以KI开头。每个输出类型都以KO开头
  • 每个输入类型都是KrakenInput的构建器类型。所有必需参数(每个Kraken)是该类型构造函数的参数。可选参数通过方法公开。
  • 只有KrakenInput实例可以传递给KrakenClient。您必须履行类型公开的任何契约,并通过调用finish()或finish_clone()(每个输入类型都存在)将其转换为KrakenInput
  • 您必须等待request调用的调用
  • 将Kraken返回的数据反序列化到输出结构体是自动完成的。目前,如果您传入错误的输出类型,解析将失败
  • 构建器方法需要所有权,因此如果您在构建KrakenInput时必须执行某些应用程序逻辑,则必须重新分配变量,如下所示
use kraapi::api::AssetPairInfo;
use kraapi::public::KIAssetPairs;
let some_application_logic = true;
// mut to allow reassignment based on application logic
let mut input = KIAssetPairs::build();

if some_application_logic {
    input = input.info(AssetPairInfo::Leverage);
} else {
    input = input.info(AssetPairInfo::Margin);
}

// Now of type KrakenInput so we have to rebind the variable
let input = input.finish();
  • 允许列出一些项目的端点(资产、资产对、交易ID等)将具有以下特点的方法
    • with_asset(...)with_asset_list(...)的方法始终追加到列表中。对with_asset(...)的链式调用在功能上等同于对with_asset_list(...)的相同列表的单一调用
    • update_transaction_list(...)的方法将始终覆盖当前数据以新数据
    • 对于不需要填充其列表的端点,存在如 clear_asset_list() 等方法来从请求构建器中删除之前的资产列表。
  • 上述设计允许您模板化您的请求。您可以复制一个模板请求,然后在发送请求之前只更改您关心的数据。

示例

有关这些示例的更多信息,请参阅https://www.kraken.com/features/api#example-api-code-php-lib

公共端点 - Ticker

use kraapi::client::KrakenClient;
use kraapi::public::{KITicker, KOTicker};
use kraapi::api::{KAsset, KAssetPair};

async fn main() -> hyper::Result<()> {
	 let client = KrakenClient::new("", "");

	 let ticker_input = KITicker::build(KAssetPair(KAsset::XBT, KAsset::USD)).finish();

	 let ticker_output = client.request::<KOTicker>(&ticker_input).await?;

	 println!("{:?}", ticker_output);
	 Ok(())
}

私有端点 - 添加订单

use kraapi::client::KrakenClient;
use kraapi::private::{
    KIAddOrder, KOAddOrder};
use kraapi::api::{
    KAsset, KAssetPair,
    TradeType, OrderType};

async fn main() -> hyper::Result<()> {
	 let client = KrakenClient::new(
	     "<Your-API-Key>", 
	     "<Your-API-Secret>"
	     );

	 let add_order_input = KIAddOrder::build(
	     KAssetPair(KAsset::XBT, KAsset::USD),
	     TradeType::Buy,
	     OrderType::Limit("101.9901"),
	     2.12345678)
	     .with_leverage((2, 1))
	     .with_closing_order(OrderType::StopLossLimit("#5%", "#10"))
	     .validate()
	     .finish();

	 let add_order_output = client.request::<KOAddOrder>(&add_order_input).await?;

	 println!("{:?}", add_order_output);
	 Ok(())
}

附言。

这个库读作“crappy”

依赖项

~7–21MB
~262K SLoC