#flags #client #features #system #manifest #environment #vexilla

vexilla_client

A Rust客户端用于Vexilla功能标志系统

2个版本 (1个稳定版本)

1.0.0 2024年5月9日
0.0.1 2021年2月12日

#11#manifest

Download history 6/week @ 2024-03-27 13/week @ 2024-04-03 142/week @ 2024-05-08 2/week @ 2024-05-15 3/week @ 2024-05-22

81 每月下载次数

BUSL-1.1

1MB
18K SLoC

Bazel 16K SLoC // 0.1% comments Rust 1.5K SLoC // 0.0% comments

Vexilla Client - Rust

这是Vexilla的Rust客户端库,Vexilla是一个基于静态文件且与VCS兼容的功能标志系统。

目录

入门指南

要开始使用很简单。按照以下步骤进行集成。

安装

将客户端添加到您的导入中。

vexilla_client = "1.x.x"

设置

您需要在您的应用程序中创建一个客户端。这可以可选地接受用于与渐进式推出以及选择性功能一起使用的custom_instance_hash

创建后,调用sync_flags_blocking。由于它返回客户端实例,因此可以从构造函数中链式调用。

重要提示:所有执行HTTP请求的方法都接受请求本身的回调。这允许您使用现有的依赖项或标准库方法来保持此捆绑包更小且更具可定制性。

let mut client = VexillaClient::new("dev", "https://BUCKET_NAME.s3-website-AWS_REGION.amazonaws.com", user_id);

client.sync_manifest(|url| reqwest::blocking::get(url).unwrap().text().unwrap());

client
  .sync_flags("Scheduled", |url| {
      reqwest::blocking::get(url).unwrap().text().unwrap()
  })
  .unwrap();

使用方法

使用创建的客户端来检查功能Should是否开启。

let should_show_feature = client.should(FEATURE_NAME)

完整示例

let environment = "dev"
let server_host = "https://BUCKET_NAME.s3-website-AWS_REGION.amazonaws.com"
let user_id = "b7e91cc5-ec76-4ec3-9c1c-075032a13a1a"
let mut client = VexillaClient::new(environment, server_host, user_id);

client.sync_manifest(|url| reqwest::blocking::get(url).unwrap().text().unwrap());

client
  .sync_flags("Scheduled", |url| {
      reqwest::blocking::get(url).unwrap().text().unwrap()
  })
  .unwrap();

if client.should(FEATURE_NAME) {
  // Do the thing
}

什么是功能标志?

功能标志对于在无需重新部署的情况下启用或禁用应用程序的某些部分非常有用。在某些情况下,例如移动应用程序,重新部署可能需要长达一周的时间。

有关更多信息,请参阅此处

功能标志也是诸如A/B测试等事物的基本构建块。

它是如何工作的?

过程很简单,但需要几个步骤才能启动。请参阅我们文档中的深入指南。

API

pub fn new( environment: &'static str, base_url: &'static str, instance_id: &'static str) ->VexillaClient

返回Vexilla客户端的新实例

参数

  • environment &'static str:您要针对的环境的名称或ID。这将在标志及其配置的查找中使用。

  • base_url &'static str:存储JSON文件的基准URL。在检索标志时,Vexilla会将强制的文件名追加到url。不要使用尾部斜杠。

  • instance_id &'static str:默认情况下使用的ID,通常用于确定渐进式标志和选择性标志。这通常是用户的ID。

pub fn get_manifest(&self, fetch:回调) -> 结果<清单>

获取清单文件以方便名称到ID的查找。不会在客户端设置值。之后需要调用set_manifest。或者,您可以使用sync_manifest以更少的代码执行这两个步骤。

参数

  • fetch fn(url: &str) -> String:一个回调函数,传递清单文件的URL。您可以携带自己的HTTP请求库。

pub fn set_manifest(&mut self, manifest:清单)

在Client实例内设置获取的清单。

参数

  • manifest Manifest:要持久化到客户端的清单文件。通常通过get_manifest获取。

pub fn sync_manifest(&mut self, fetch:回调)

获取并设置客户端中的清单,以方便名称到ID的查找。

参数

  • fetch fn(url: &str) -> String:一个回调函数,传递清单文件的URL。您可以携带自己的HTTP请求库。

pub fn get_flags(&self, file_name: &str, fetch:回调) -> VexillaResult<FlagGroup>

获取特定标志组的标志。可以使用组ID或名称进行查找。

参数

  • file_name &str:要获取的标志组的名称或ID。

  • fetch fn(url: &str) -> String:一个回调函数,传递标志组文件的URL。您可以携带自己的HTTP请求库。

pub fn set_flags(&mut self, group_id: &str, flags:FlagGroup)

在Client实例内设置获取的标志组。

参数

  • group_id &str:要设置的标志组的ID或名称。

  • flags FlagGroup:要设置的标志集合。通常从get_flags调用中获取。sync_flags将这两个函数包装起来以简化流程。

pub fn sync_flags(&mut self, file_name: &str, fetch: Callback) -> VexillaResult<(), VexillaError>

获取并设置客户端中的标志组,以方便名称到ID的查找。

参数

  • file_name &str:要获取的标志组的名称或ID。

  • fetch fn(url: &str) -> String:一个回调函数,传递标志组文件的URL。您可以携带自己的HTTP请求库。

pub fn should(&self, group_id: &'static str, feature_name: &'static str) -> VexillaResult

检查切换、渐变或选择性标志是否应该启用。存在其他方法用于其他标志类型,例如值。

参数

  • group_id &str:要检查的标志组的ID或名称。

  • feature_name &str:要检查的功能标志的ID或名称。

pub fn should_custom_str(&self, group_id: &str, feature_name: &str, custom_id: &str) -> VexillaResult

类似于should方法,但允许传递自定义字符串,以与从构造函数中使用的custom_hash_id相同的方式使用。这对于针对组而不是单个用户ID的选择性标志特别有用。

参数

  • group_id &str:要检查的标志组的ID或名称。

  • feature_name &str:要检查的功能标志的ID或名称。

custom_id &str:要评估的自定义字符串,用于渐变检查或选择性检查。

pub fn should_custom_int(&self, group_id: &str, feature_name: &str, custom_id: i64) -> VexillaResult

类似于should方法,但允许传递自定义整数,以与从构造函数中使用的custom_hash_id相同的方式使用。这对于针对组而不是单个用户ID的选择性标志特别有用。

参数

  • group_id &str:要检查的标志组的ID或名称。

  • feature_name &str:要检查的功能标志的ID或名称。

custom_id i64:您希望在渐变检查或选择性检查中评估的自定义整数。

pub fn should_custom_float(&self, group_id: &str, feature_name: &str, custom_id: f64) -> VexillaResult

类似于 should 方法,但允许传递一个自定义浮点数,以与从构造函数中使用的 custom_hash_id 相同的方式进行使用。这对于针对用户组而不是单个用户 ID 的选择性标志特别有用。

参数

  • group_id &str:要检查的标志组的ID或名称。

  • feature_name &str:要检查的功能标志的ID或名称。

custom_id f64:您希望在渐变检查或选择性检查中评估的自定义浮点数。

pub fn value_str(&self, group_id: &str, feature_name: &str, default: &'static str) -> VexillaResult

根据环境获取字符串值。对于定价和订阅计划等事项非常有用。

参数

  • group_id &str:要检查的标志组的ID或名称。

  • feature_name &str:要检查的功能标志的ID或名称。

  • default &str:如果标志通过调度关闭或无法检索,则使用的默认字符串值。

pub fn value_int(&self, group_id: &str, feature_name: &str, default: i64) -> VexillaResult

根据环境获取整数值。对于定价和订阅计划等事项非常有用。

参数

  • group_id &str:要检查的标志组的ID或名称。

  • feature_name &str:要检查的功能标志的ID或名称。

  • default i64:如果标志通过调度关闭或无法检索,则使用的默认整数值。

pub fn value_float(&self, group_id: &str, feature_name: &str, default: f64) -> VexillaResult

根据环境获取浮点值。对于定价和订阅计划等事项非常有用。

参数

  • group_id &str:要检查的标志组的ID或名称。

  • feature_name &str:要检查的功能标志的ID或名称。

  • default f64:如果标志通过调度关闭或无法检索,则使用的默认浮点值。

生成类型(可选)

我们已创建一个工具来生成代码中使用的类型。它将爬取您的 JSON 结构并创建常量或枚举,以帮助防止拼写错误和其他“魔法字符串”相关的问题。您只需要传递 JSON 文件所在的 URL。

NPM

要使用此工具,您可以直接从 NPM 运行它。

npx vexilla types rust REMOTE_JSON_URL

自动安装脚本

您还可以使用适用于您平台的预编译二进制文件。此安装脚本将自动为您选择正确的二进制文件

curl -o- -s https://raw.githubusercontent.com/vexilla/vexilla/main/install.sh | bash

安装脚本也接受目标安装路径

curl -o- -s https://raw.githubusercontent.com/vexilla/vexilla/main/install.sh | bash -s -- -b /usr/local/bin/

手动安装

如果您更喜欢手动下载二进制文件,您可以从 GitHub 的发行版部分获取,https://github.com/vexilla/vexilla/releases

支持

您是否遇到了错误?是否有您认为缺少的功能?请随意创建一个 GitHub 问题

获取支持或帮助的另一种方式是通过我们的 Discord 社区 联系。

贡献

您想为此客户端 SDK 做出贡献吗?您有很多帮助的方式。报告问题或创建 PR 是最明显的方式。帮助他人审查问题和 PR 也将非常有帮助。成为 Discord 社区充满活力的成员也是帮助的一种方式。

如果您想为应用程序、文档或其他项目部分做出贡献,请查看我们的 贡献指南

在生产中使用 Vexilla 吗?

我们非常希望将您公司的标志添加到我们网站上的使用部分。请在此 问题 中提交您的姓名和标志 URL。

赞助商

目前还没有赞助商。这里可以放置 您的 公司的链接和图标。

许可证

当前的 Vexilla 代码是在商业源许可证 (BSL) 和 MIT 许可证的组合下发布的。

有关更多信息,请参阅 许可证文件

依赖关系

~8–13MB
~244K SLoC