16 个版本 (10 个重大更改)

0.11.0 2024年5月13日
0.10.3 2024年3月18日
0.10.1 2024年1月11日
0.10.0 2023年11月1日
0.3.0 2020年7月1日

#396 in Web编程

Download history 119/week @ 2024-05-03 249/week @ 2024-05-10 80/week @ 2024-05-17 153/week @ 2024-05-24 104/week @ 2024-05-31 120/week @ 2024-06-07 50/week @ 2024-06-14 69/week @ 2024-06-21 48/week @ 2024-06-28 17/week @ 2024-07-05 7/week @ 2024-07-12 9/week @ 2024-07-19 35/week @ 2024-07-26 56/week @ 2024-08-02 49/week @ 2024-08-09 31/week @ 2024-08-16

每月下载量 173
用于 unleash-proxy

Apache-2.0

130KB
3K SLoC

Rustlang的Unleash API客户端

Unleash 是一个功能标志API系统。这是一个客户端,用于通过API控制Rust程序中的功能。

客户端概述

客户端使用异步Rust编写。用于与Unleash API通信,内置了surf或reqwest支持,或者用户可以提供任何实现了抽象实际客户端的thin trait的异步HTTP客户端。

异步-std (功能 'surf-client') 和 tokio (功能 'reqwest-client') 的示例在源树中的examples/中。有关更多功能信息,请参阅API文档。

要在同步程序中使用它,运行异步执行器并block_on()相关调用。由于客户端规范要求向API发送背景指标,您需要安排在示例examples/theads.rs中演示的线程中调用poll_for_updates方法。

包含了Unleash定义的策略,以支持自定义策略,请使用ClientBuilder并调用strategy方法来注册您的自定义策略缓存函数。

请参阅crates文档以获取更多详细信息。

配置

开始使用Client的最简单方法是使用ClientBuilder。提供了一个简单示例

let config = EnvironmentConfig::from_env()?;
let client = client::ClientBuilder::default()
    .interval(500)
    .into_client::<UserFeatures, reqwest::Client>(
        &config.api_url,
        &config.app_name,
        &config.instance_id,
        config.secret,
    )?;
client.register().await?;

into_client方法所需的值如下(按顺序,如上所示)

  • api_url - 获取开关的服务器URL。
  • app_name - 您应用程序的名称。
  • instance_id - 一个唯一ID,理想情况下每个运行一个。这里可以选择由运行时生成的UUID。
  • authorization - Unleash客户端密钥,如果设置,则作为授权标头发送。

尽管上面的代码显示了EnvironmentConfig的使用方法,但这不是必需的,而是作为一种方便地从系统环境变量中读取数据的方式提供。

EnvironmentConfig 属性 环境变量 必需吗?
api_url UNLEASH_API_URL
app_name UNLEASH_APP_NAME
instance_id UNLEASH_INSTANCE_ID
secret UNLEASH_CLIENT_SECRET

请注意,如果您确实使用EnvironmentConfig作为访问系统变量的方式,您需要确保设置上述表格中标记为必需的所有环境变量,否则会引发panic。

ClientBuilder 还提供了一些假设有良好默认值且通常不需要更改的属性设置方法。如果您确实需要更改这些属性,可以在构建器上调用以下方法(如上所示,使用间隔)。

方法 参数 描述 默认
interval u64 将轮询间隔设置为以毫秒为单位的 Unleash 服务器 15000ms
disable_metric_submission N/A 关闭向 Unleash 提交指标 开启
enable_string_features N/A 默认情况下,Rust SDK 要求您定义一个枚举来解决问题,开启此功能将允许您通过字符串类型解决问题,通过使用is_enabled_str方法。请注意,这是通过断言强制执行的,如果未开启此功能而调用is_enabled_str,则会导致panic 关闭

状态

核心 Unleash API 功能在 Rust 1.60 或更高版本中工作。此项目的 MSRV 限制较弱:当强制依赖项提高版本时,也将提高针对的最低版本,但如果较旧的 Rust 版本对用户有效,则不会阻止。特别是 time 已知会强制执行 6 个月的编译器年龄,因此预计会定期增加与测试的最低版本。

未实现 Unleash 指定的功能

  • 在重启时,没有网络流量即可存活的本地序列化开关副本。

行为准则

请注意,该项目附带《贡献者行为准则》。通过参与此项目,您同意遵守其条款。

贡献

请按常规在 Github 上提交 PR。运行 Cargo test 运行测试套件,提交前使用 rustfmt 格式化代码。要运行功能测试套件,您需要一个用于执行 Unleash API。

例如,一种方法

docker-compose up -d

访问 https://127.0.0.1:4242/ 并使用管理员 unleash4all 登录,然后在 https://127.0.0.1:4242/admin/api/create-token 为用户管理员创建新的 API 令牌,类型为 Client。

然后运行测试套件

UNLEASH_API_URL=http://127.0.0.1:4242/api \
  UNLEASH_APP_NAME=fred UNLEASH_INSTANCE_ID=test \
  UNLEASH_CLIENT_SECRET="<tokenvalue>" \
  cargo test --features functional  -- --nocapture

或类似的。功能测试套件查找手动设置的特定功能集。例如,登录到端口 4242 上的 Unleash UI 并创建一个名为 default 的功能。

依赖关系

~3–18MB
~262K SLoC