Epo 节点 SDK
埃波 是一个模块化的标注和实验分析工具。 Eppo的节点SDK是用来在多用户服务器侧上下文中完成任务而构建的. 在继续之前,你需要一个Epo账户.
特征
- 特性门
- 杀死开关
- 动态配置
- 逐步推出
- A/B/n实验
- 坚持
- 相互排斥的实验(Layers)
- 回转实验
- 四. 多武装土匪
所需资源
- 节点.js版本 20.x 或以后
安装
npm install @eppo/node-server-sdk
快开始
开始初始化一个Eppo客户端的单通实例. 初始化后,客户端可以用于在您的应用程序中任意位置的任务.
初始化一次
import { init } from "@eppo/node-server-sdk";
await init({ apiKey: "<SDK-KEY-FROM-DASHBOARD>" });
随地分配
import * as EppoSdk from "@eppo/node-server-sdk";
const eppoClient = EppoSdk.getInstance();
// Hypothetical user.
const user = getCurrentUser();
const variation = eppoClient.getStringAssignment(
'new-user-onboarding',
user.id,
{ country: user.country },
'control'
);
分配职能
每个Eppo旗都有回放类型,在仪表板上设定一次创建. 一旦创建了一面旗帜,代码中的指派应当使用相应的打入函数:
getBoolAssignment(...)
getNumericAssignment(...)
getIntegerAssignment(...)
getStringAssignment(...)
getJSONAssignment(...)
每个函数都有相同的签名,但返回函数名中的类型。 用于布尔斯 getBooleanAssignment,其签名如下:
getBoolAssignment: (
flagKey: string,
subjectKey: string,
subjectAttributes: Record<string, any>,
defaultValue: boolean,
) => boolean
初始化选项
这个 init 函数接受以下可选配置参数.
| 选项 | 类型 | 说明 | 默认 |
|---|---|---|---|
assignmentLogger | 指派 | 一个回调,将每个任务发送到你的数据仓库。 仅用于实验分析。 见 实例 见下文. | null |
requestTimeoutMs | 编号 | 实验配置 HTTPS 请求的超时为毫秒. | 5000 |
numInitialRequestRetries | 编号 | 数目 额外 如果初始配置请求失败,则会尝试其时间。 这是通常同步等待的请求(通过 await供完成。 请求之间将进行一个小等. | 1 |
pollAfterFailedInitialization | 布尔 | 即使初始配置请求失败, 仍要为新配置投放 . | false |
throwOnFailedInitialization | 布尔 | 如果初始化时无法获取初始配置, 则丢出一个错误( 拒绝承诺 ) . | true |
numPollRequestRetries | 编号 | 如果在初始化后对更新配置进行投票,在放弃之前将尝试请求次数。 随后的尝试使用指数回放进行. | 7 |
任务日志
要使用 Eppo SDK 进行需要进行分析的实验,请通过回调记录功能到 init 函数在 SDK 初始化上。 SDK在指定变异时引用回调来获取任务数据. 仓库需要分配数据进行分析.
以下代码说明了使用下列方式进行记录召回的实例: 部分但你可以使用任何你想要的系统。 唯一的要求是SDK收到一个 logAssignment 调用函数 。 在这里,我们确定 Eppo 的实施 IAssignmentLogger 包含单个函数的界面 logAssignment数字 :
import { IAssignmentLogger } from "@eppo/node-server-sdk";
import { AnalyticsBrowser } from "@segment/analytics-next";
// Connect to Segment (or your own event-tracking system)
const analytics = AnalyticsBrowser.load({ writeKey: "<SEGMENT_WRITE_KEY>" });
const assignmentLogger: IAssignmentLogger = {
logAssignment(assignment) {
analytics.track({
userId: assignment.subject,
event: "Eppo Assignment",
type: "track",
properties: { ...assignment },
});
},
};
导出配置
为了支持需要用 Epo 客户端 SDK 拖曳前端客户端的用例, Eppo NodeJS SDK 提供了导出旗帜配置的功能 .
使用 getFlagConfigurations(): Record<string, Flag> 函数以导出旗帜配置,将其字符串化(或您的首选序列化方法),并作为常规初始化的一部分发送给前端客户端.
import express from 'express';
import * as EppoSdk from "@eppo/node-server-sdk";
const app = express();
const eppoClient = EppoSdk.getInstance();
app.get('/api/flag-configurations', (req, res) => {
const flagConfigurations = eppoClient.getFlagConfigurations();
res.json(flagConfigurations);
});
哲学
Eppo的SDK是为简便,速度和可靠性而建造的. 旗帜配置被压缩并分布在全局CDN(快取)上,一般在15ms以下到达您的服务器. Server SDKs继续投票Eppo的API, 然后在本地缓存配置,确保每项任务立即完成。 每个SDK内部的评价逻辑由几行简单的数字和字符串比较组成. 上面列出的打出功能是所有开发者需要理解的,抽象出Eppo的内在(并扩展)功能集的复杂性.