@ featureflip/ edge (英语)
Cloudflare Workers的特长(SDK). 它从您环境旗配置的缓存副本中评估您工人内部的旗帜, 因此一个找到温暖副本的请求不会让网络呼叫来评价一面旗帜.
Cloudflare工人是唯一被支持的运行时间.
安装
npm install @featureflip/edge
快速启动
import { createEdgeClient } from '@featureflip/edge';
type Env = { FEATUREFLIP_SERVER_KEY: string };
// Config only at module scope: Workers forbid I/O there, and the key lives in `env`.
let flags: ReturnType<typeof createEdgeClient> | undefined;
export default {
async fetch(request: Request, env: Env, ctx: ExecutionContext) {
flags ??= createEdgeClient({ sdkKey: env.FEATUREFLIP_SERVER_KEY });
const snapshot = await flags.load(ctx);
const context = { user_id: 'user-123' };
const enabled = snapshot.boolVariation('new-checkout', context, false);
const detail = snapshot.variationDetail('checkout-copy', context, 'control');
const bootstrap = snapshot.bootstrapValues(context);
return new Response(JSON.stringify({ enabled, detail, bootstrap }));
},
};
打电话 load(ctx) 一次请求。 在它解决之后,每个变异呼叫都是同步的.
选项
sdkKey 是唯一必要的选项。 使用服务器 SDK 密钥,而不是客户端密钥.
| 选项 | 默认 | 说明 |
|---|---|---|
sdkKey | 无( 需要) | 服务器 SDK 密钥。 发送为 Authorization 从来没有记录. |
baseUrl | https://eval.featureflip.io | 评价API来源. |
ttlSeconds | 60 | 在背景中刷新副本的年龄 . |
maxStaleSeconds | 86400 | 年龄过后,一份副本就不再提供. |
loadTimeoutMs | 1000 | 没有缓存副本的负载要等多久才能找到来源 . |
store | 工人缓存 API | 被获取的配置由隔离器共享 . |
wrappers | [] | name/version 用于包装此 SDK 的库的符号 . |
flushBatchSize | 100 | 发送的事件 POST /v1/sdk/events 请求. |
fetch | 全球 fetch | fetch 执行,主要用于测试. |
新鲜度
旗帜更改到达边缘流量 ttlSeconds (默认为60秒). 这不是服务器SDKs通过串流连接而得到的近即时推力.
一个比 ttlSeconds 当背景刷新运行时仍然服务。 所以,在一次空闲的咒语之后,第一个请求得到了一次更古老的拷贝,因为它开始的更新还没有完成. 一个比 maxStaleSeconds 未送达。 如果一个配置抓取失败,SDK在再次尝试原产地之前会退后15秒,并不断提供它拥有的任何副本.
过 ctx
通过工人 ExecutionContext 改为 load(ctx)它记录背景更新和事件冲出 waitUntil,所以在回复发出后,两个都完成.
无 ctx,请等待 flush() 自己在回复前,当请求结束时,背景更新可能会被切断。 SDK 不运行时记录一次性警告 ctx。 。 。 .
冷的开始
没有缓存副本, load 等待时间 loadTimeoutMs 原产地。 如果来源较慢, load 以 ready === false 服务您的默认值。 抓取会持续在背景中进行, 并填充缓存, 用于下一个请求 .
启动浏览器 SDK
snapshot.bootstrapValues(context) 只返回客户端可见旗帜的值,用于 bootstrap 选项 @featureflip/browser。如果服务器不发送客户端-可视性字段,则它不返回任何信息,因此任何旗帜都不会被错误地曝光.
活动
将评价排队为事件并随 waitUntil 当你通过 ctx。一个请求的冲洗发送时,只有当一个批次已经满了或10秒,从上次发送后,一个忙碌的隔离就会停止发送。 之后a 429页:1 5xx 或网络出错 30 秒内无任何信息发送到窗口外 flush() 直接发送,封住5个请求 一个电话.
交付是最好的努力。 队列活在被隔离者的记忆中,因此Cloudflare驱逐被隔离者后的事件仍然被排入队.
日志
信件发送到 console.warn。SDK自己的开始 [featureflip-edge],以及共享评价核心的少数(拒绝或放弃事件,一个被忽略) wrappers 符号)从 [featureflip]。 。 。 .
许可证
阿帕奇 - 2.0