1个不稳定版本

0.1.1 2021年3月2日
0.1.0 2021年3月2日

#73 in #internet

AGPL-3.0

125KB
2.5K SLoC

该库是qaul的核心,提供用户身份、对等信任管理、消息发送抽象和高级别对等发现机制。

其API(在文档中也称为“服务API”)使应用能够在去中心化网络上运行,而无需依赖服务器来促进数据交换。

您可以使用两种方式使用libqaul API

  1. libqaul作为依赖项要求,并使用Rust API原生。这将导致您的应用程序运行一个去中心化路由器(参见ratman存储库)。

  2. libqaul-sdk存储库作为依赖项,它公开与libqaul相同的API,但通过QRPC协议连接到正在运行的守护程序。

第二种方法对大多数用户来说推荐,因为它将允许许多不同的应用程序使用相同的路由守护程序来完成任务。

基本架构

在qaul中,我们将客户端(具有某种类型UI的用户界面实体)和服务(微应用程序,向客户端和其他服务公开API)区分开来。

以下是对完整的qaul应用程序堆栈的简要概述。您可以在开发者手册中找到更详细的描述。

组件 描述
终端用户应用程序 用户与之交互的UI(图形或文本)
服务 提供非常具体和可重用功能给其他服务和应用程序的微应用程序
RPC系统 (可选)QRPC代理和SDK系统,用于连接到外部qaul守护程序
libqaul 核心身份、数据和对等管理库
Ratman 去中心化、容错、用户空间路由器
网络驱动程序 Ratman的网络驱动程序插件,特定于平台

初始化libqaul的实例时,组件需要以相反的顺序初始化(网络驱动程序首先,用户应用程序状态最后)。

示例

以下是如何直接使用libqaul的简短示例。有关如何使用SDK的示例,请参阅libqaul-sdk文档!

use libqaul::Qaul;
let q = Qaul::new(router);

// Create an anonymous user with a password
let alice = q.users().create("password alice secret keeps").await?;

// Alice decides she wants to publish her handle
let update = UserUpdate { handle: ItemDiff::set("@alice"), ..Default::default() };
q.users().update(alice, update).await?;

// libqaul will now advertise Alice as `@alice` along side with
// her cryptographic public key!

功能

libqaul处理用户注册、登录、身份验证、二进制有效负载消息、对等发现和管理。某些概念不是在libqaul中直接实现的(如消息组或文本有效负载消息),而是需要服务。

有关qaul项目编写的服务的概述,请参阅开发者手册中的此页

依赖项

~28–39MB
~399K SLoC