#ipfs-api #ipfs #client

izihawa-ipfs-api-prelude

IPFS HTTP API 客户端共享代码

1 个不稳定版本

0.5.1 2022 年 11 月 13 日

#968文件系统


2 个 Crates 中使用(通过 izihawa-ipfs-api-backend-…

MIT/Apache

195KB
3.5K SLoC

Workflow Status Maintenance

ipfs-api

组件

名称 文档
ipfs-api-prelude Docs Crate
ipfs-api-backend-actix Docs Crate
ipfs-api-backend-hyper Docs Crate
ipfs-api (已弃用) Docs Crate

使用 Hyper/Actix 连接到 IPFS HTTP API 的 Rust 库。

用法

使用 Hyper

要使用 Hyper 后端,声明

[dependencies]
ipfs-api-backend-hyper = "0.5"

您可以选择指定 with-hyper-rustlswith-hyper-tls(互斥)特性以支持 TLS。

使用 Actix

要使用 Actix 后端,声明

[dependencies]
ipfs-api-backend-actix = "0.6"

构建器模式

无论是使用 Hyper 还是 Actix 后端,您都可以指定 with-builder 特性以启用构建请求时使用的构建器模式。

用法(已弃用)

[dependencies]
ipfs-api = "0.16.0"

特性标志(已弃用)

您可以使用 actix-web 作为后端而不是 hyper

[dependencies]
ipfs-api = { version = "0.16.0", features = ["with-actix"], default-features = false }

您还可以选择使用 rustls 而不是原生 TLS。

[dependencies]
ipfs-api = { version = "0.16.0", features = ["with-hyper-rustls"], default-features = false }

要启用构建器模式(默认)使用 with-builder 特性

[dependencies]
ipfs-api = { version = "0.16.0", features = ["with-hyper-rustls", "with-builder"], default-features = false }

示例

将文件写入 IPFS

使用 Hyper
use ipfs_api::{IpfsApi, IpfsClient};
use std::io::Cursor;

#[tokio::main]
async fn main() {
    let client = IpfsClient::default();
    let data = Cursor::new("Hello World!");

    match client.add(data).await {
        Ok(res) => println!("{}", res.hash),
        Err(e) => eprintln!("error adding file: {}", e)
    }
}
使用 Actix
use ipfs_api::{IpfsApi, IpfsClient};
use std::io::Cursor;

#[actix_rt::main]
async fn main() {
    let client = IpfsClient::default();
    let data = Cursor::new("Hello World!");

    match client.add(data).await {
        Ok(res) => println!("{}", res.hash),
        Err(e) => eprintln!("error adding file: {}", e)
    }
}

从 IPFS 读取文件

使用 Hyper
use futures::TryStreamExt;
use ipfs_api_backend_hyper::{IpfsApi, IpfsClient};
use std::io::{self, Write};

#[tokio::main]
async fn main() {
    let client = IpfsClient::default();

    match client
        .get("/test/file.json")
        .map_ok(|chunk| chunk.to_vec())
        .try_concat()
        .await
    {
        Ok(res) => {
            let out = io::stdout();
            let mut out = out.lock();

            out.write_all(&res).unwrap();
        }
        Err(e) => eprintln!("error getting file: {}", e)
    }
}
使用 Actix
use futures::TryStreamExt;
use ipfs_api::{IpfsApi, IpfsClient};
use std::io::{self, Write};

#[actix_rt::main]
async fn main() {
    let client = IpfsClient::default();

    match client
        .get("/test/file.json")
        .map_ok(|chunk| chunk.to_vec())
        .try_concat()
        .await
    {
        Ok(res) => {
            let out = io::stdout();
            let mut out = out.lock();

            out.write_all(&res).unwrap();
        }
        Err(e) => eprintln!("error getting file: {}", e)
    }
}

附加示例

项目中也包含了一些示例,我使用了它们进行测试

要获取示例列表,运行

$ cargo run --example

您可以使用 cargo 运行任何示例

$ cargo run --example add_file

许可

许可方式为以下之一

任选其一。

贡献

除非您明确声明,否则根据 Apache-2.0 许可证定义,您提交的任何有意包含在作品中的贡献,将根据上述方式双许可,无需附加条款或条件。

依赖项

~10–21MB
~300K SLoC