9个版本

0.2.9 2024年7月18日
0.2.8 2024年4月1日
0.2.7 2024年3月26日
0.2.5 2023年3月29日
0.1.0 2023年2月20日

#59数据库实现

Download history 6/week @ 2024-05-18 1/week @ 2024-05-25 81/week @ 2024-07-13 16/week @ 2024-07-20 14/week @ 2024-07-27

每月 55 次下载

MIT 许可证

20KB
481

简介

特性标记不应该这么复杂。

Mr Flagly是一个用Rust编写的去中心化特性标记系统,为其他语言提供了绑定。

它不依赖于第三方服务,也不需要您部署服务或数据库来管理。

支持的特性标记定义来源

  • URL
  • JSON值
  • 环境变量

Rust用法

设置您的标记服务

use mrflagly::service::{FlagService, FlagServiceOptions};
let flag_service = FlagService::new(FlagServiceOptions {
    finder_type: mrflagly::service::types::FlagFinderType::URL,
    url: "https://path/to/hosted/json/file",
    refresh_interval: 600,
    data: None,
    env_var: None,
})

然后,检查特性标记

if flag_service.enabled("feature_x", false /* default value */, Some(HashMap::from([(String::from("user_id"), String::from("123")),])) /* optional context */) {
    // do something
}

Python支持

import mrflagly

flag_service = mrflagly.FlagService(url="https://path/to/hosted/json/file")
if flag_service.enabled("feature_x", default=False, context={"foo": "bar"}):
    # do something

FlagService构造函数参数

  • finder_type: (NULL, URL, JSON, ENVVAR)
  • url: 下载特性标记json数据的URL
  • refresh_interval: 检查特性标记数据端点的频率
  • data: 不是从URL托管特性标记数据,您可以提供json blob
  • env_var: 在环境变量中提供特性标记数据

JSON格式

特性标记数据的JSON格式

{
    "my_feature": {
        "rollout": 100
    },
    "my_feature_with_variants": {
        "rollout": 0,
        "variants" {
            "user_id": ["123"],
            "company_id": ["123"]
        }
    }
}

示例:为特定客户激活

JSON配置数据

{
    "feature": {
        "rollout": 0,
        "variants": {
            "customer_id": ["123"]
        }
    }
}

用法

import mrflagly
import json

flag_service = mrflagly.FlagService(
    data=json.dumps({"feature": {"rollout": 0, "variants": {"customer_id": ["123"]}}}))

if flag_service.enabled("feature_x", default=False, context={"customer_id": "123"}):
    # do something

依赖关系

~12–23MB
~353K SLoC