FeatBit 服务器- Side SDK 用于节点.js
导言
这是100%开源功能旗管理平台的Node.js Server-Side SDK 费特比特。 。 。 .
FeatBit Server-Side SDK为Node.js设计,主要用于网络服务器和应用等多用户系统. 它并非用于桌面和嵌入式系统应用程序.
数据同步
我们用 网络安全套 或者说 投票 使本地数据与服务器同步,然后默认将其存储在内存中。 当特性旗或其相关数据有任何更改时,此更改会被推向 SDK,平均同步时间会少于 百分点。请注意WebSocket/Polling连接可能因互联网停用而中断,但一旦问题消失,将自动恢复.
开始
安装
最新稳定版本可在 无。 。 。 .
npm install --save @featbit/node-server-sdk
先决条件
在使用SDK之前,需要获得环境秘密(sdkKey)和SDK URL.
遵循以下文档获取这些值
快速启动
以下代码显示: @featbit/node-server-sdk。 。 。 .
import { FbClientBuilder, UserBuilder } from "@featbit/node-server-sdk";
// setup SDK options
const fbClient = new FbClientBuilder()
.sdkKey("your_sdk_key")
.streamingUri('ws://localhost:5100')
.eventsUri("http://localhost:5100")
.build();
(async () => {
// wait for the SDK to be initialized
try {
await fbClient.waitForInitialization();
} catch(err) {
// failed to initialize the SDK
console.log(err);
}
// flag to be evaluated
const flagKey = "game-runner";
// create a user
const user = new UserBuilder('a-unique-key-of-user')
.name('bob')
.custom('sex', 'female')
.custom('age', 18)
.build();
// evaluate a feature flag for a given user
const boolVariation = await fbClient.boolVariation(flagKey, user, false);
console.log(`flag '${flagKey}' returns ${boolVariation} for user ${user.Key}`);
// evaluate a boolean flag for a given user with evaluation detail
const boolVariationDetail = await fbClient.boolVariationDetail(flagKey, user, false);
console.log(`flag '${flagKey}' returns ${boolVariationDetail.value} for user ${user.Key}` +
`Reason Kind: ${boolVariationDetail.kind}, Reason Description: ${boolVariationDetail.reason}`);
// make sure the events are flushed before exit
await fbClient.close();
})();
实例
SDK 软件
Fb 客户端
这个 FbClientNode 是提供 FeatBit 服务器访问的 SDK 的核心 。 申请应在申请的周期内立即提出一个实例.
FbClientBuilder 用于构建一个 FbClientNode 举个例子 构建者将显示配置 SDK 的方法,并最终创建 FbClientNode 举个例子.
使用流线的 FbClient
import { FbClientBuilder } from "@featbit/node-server-sdk";
const fbClient = new FbClientBuilder()
.sdkKey("your_sdk_key")
.streamingUri('ws://localhost:5100')
.eventsUri("http://localhost:5100")
.build();
使用投票的 Fb 客户端
import { FbClientBuilder, DateSyncMode } from "@featbit/node-server-sdk";
const fbClient = new FbClientBuilder()
.sdkKey("your_sdk_key")
.dataSyncMode(DateSyncMode.POLLING)
.pollingUri('http://localhost:5100')
.eventsUri("http://localhost:5100")
.pollingInterval(10000)
.build();
用户
IUser 定义您正在评价特征标记的用户的属性 。 IUser有两个内置属性:密钥和名. 一个IUser唯一的强制属性是密钥,密钥必须单独识别每个用户.
除了这些内置属性外,您还可以使用 custom(string key, string value) 方法。 内置属性和自定义属性都可以在瞄准规则中被引用,并包含在分析数据中.
如果用户属性缺失或无效,则该属性的条件不匹配,包括否定的运算符,例如 NotEqual 财务报告和审定财务报表 NotOneOf。通常比较一个已存在的空字符串值。 评估继续沿用后续规则,再由旗下默认规则来进行,如果没有匹配的话.
用户构建器用于构建 IUser 举个例子 构建者暴露出配置 IUser 的方法,最后创建 IUser 实例.
import { UserBuilder } from "@featbit/node-server-sdk";
const bob = new UserBuilder("unique_key_for_bob")
.name("Bob")
.custom('age', 18)
.custom('country', 'FR')
.build();
或者,可以不使用 UserBuilder数字 :
import { IUser } from "@featbit/node-server-sdk";
const bob: IUser = {
key: "unique_key_for_bob",
name: "Bob",
customizedProperties: [
{ name: "age", value: "18" },
{ name: "country", value: "FR" },
],
};
评价旗帜
通过使用它已经收到的特性旗数据, SDK 本地计算 特性旗的值 给定用户.
有一个 variation 返回旗帜值的方法,以及 variationDetail 返回对象的方法
说明如何为每种类型确定数值.
- bulVariation/boolVariation 详情
- 字符串变化/字符串变化
- 数字变化/数字变化
- json 变化/json 变化
变位调取特性旗键,一个 IUser,和一个默认值. 如果有任何错误,则无法 评价旗帜(例如,特性旗帜密钥不匹配任何已存在的旗帜),默认值会被返回.
// flag to be evaluated
const flagKey = "game-runner";
// create a user
const user = new UserBuilder('a-unique-key-of-user')
.name('bob')
.custom('sex', 'female')
.custom('age', 18)
.build();
// evaluate a feature flag for a given user
const boolVariation = await fbClient.boolVariation(flagKey, user, false);
console.log(`flag '${flagKey}' returns ${boolVariation} for user ${user.Key}`);
// evaluate a boolean flag for a given user with evaluation detail
const boolVariationDetail = await fbClient.boolVariationDetail(flagKey, user, false);
console.log(`flag '${flagKey}' returns ${boolVariationDetail.value} for user ${user.Key}` +
`Reason Kind: ${boolVariationDetail.kind}, Reason Description: ${boolVariationDetail.reason}`);
锁定器
默认日志使用 无 作为日志级别,这意味着它不会输出任何东西。 如果默认日志不符合您的需要, 您有两个选项 .
使用不同的日志级别
const fbClient = new FbClientBuilder()
.logLevel('debug')
...
.build();
// or
const options = {
...
logLevel: 'debug'
}
const fbClient = new FbClientBuilder(options).build();
定义自己的日志
您的日志必须执行 ILOGER 浏览器 界面,我们提供了 Basic 潜行器你可以像这样使用:
const logger = new BasicLogger({
level: 'debug',
destination: console.log
});
const fbClient = new FbClientBuilder()
.logger(logger)
...
.build();
// or
const options = {
...
logger: logger
}
const fbClient = new FbClientBuilder(options).build();
注意日志选项的优先级高于日志级 。 如果您通过两个选项, 日志级将被忽略 .
离线模式
在某些情况下,你可能要停止 远程呼叫费特比特。 这是如何:
import { FbClientBuilder } from "@featbit/node-server-sdk";
const fbClient = new FbClientBuilder()
.offline(true)
.build();
注: JSON 字符串的填充数据只支持离线模式.
以旗帜和片段表示的数据格式由FeatBit来定义,可能会有变化. 而不是试图 自己构建这些对象, 直接从 FeatBit 服务器以 JSON 格式请求已有的旗帜比较简单 并使用此输出作为文件的起点。 这就是:
# replace http://localhost:5100 with your evaluation server url
curl -H "Authorization: <your-env-secret>" http://localhost:5100/api/public/sdk/server/latest-all > featbit-bootstrap.json
然后使用该文件来初始化 FbClient :
import { FbClientBuilder } from "@featbit/node-server-sdk";
import fs from 'fs';
let data: string = '';
try {
data = fs.readFileSync('path_to_the_json_file', 'utf8');
} catch (err) {
console.error(err);
}
const fbClient = new FbClientBuilder()
.offline(false)
.useJsonBootstrapProvider(data)
.build();
禁用事件收藏
默认情况下,SDK会自动向FeatBit服务器发送事件(旗下评价事件和A/B测试的度量事件),除非SDK处于离线模式.
如果您喜欢在SDK处于在线模式时禁用此事件收藏, 您可以使用 disableEvents 选项.
import { FbClientBuilder } from "@featbit/node-server-sdk";
const fbClient = new FbClientBuilder()
.disableEvents(true)
.build();
旗子评价事件收藏也由每个旗子控制 insightsEnabled 从 FeatBit 服务器收到的设置 :
false: 禁用该旗帜的评价事件收藏,而不改变其评价结果.true或缺:允许评价事件收集,但需启用全SDK事件收集.
disableEvents 必须是 false (默认)和SDK必须在线供每个旗子的见解来收集评价事件. 设置 insightsEnabled 改为 true 不覆盖 disableEvents 或离线模式。 这个 insightsEnabled 设置不影响自定义的度量事件 track();这些仍受SDK全局事件收集设置的约束.
实验(A/B/n测试)
我们支持网页浏览和点击的自动实验, 你只需要把你的实验设置在我们SaaS平台上, 那你应该可以在实验开始后 近实时看到结果.
如果你需要更多的控制 实验数据发送到我们的服务器, 我们提供一个方法 发送自定义事件.
fbClient.track(user, eventName, numericValue);
数值 ,默认值为 1.0 国家。 。 。 .
确保 track 在调用相关特性旗后调用, 否则自定义事件将不会包含
进入实验结果.
支持的 Node.js 版本
这个版本的SDK应该为最近版本的Node.js工作,如果你看到任何带有特定版本的问题, 请创建一个问题.