INTEGRITY Документация

Причины оценки и коды ошибок

Когда вы вычисляете флаг с помощью метода привязки *Details методы или OpenFeature SDK, ответ включает reason поле, объясняющее, почему было возвращено то или иное значение. Если происходит ошибка, ответ включает errorCode поле.

Причины оценки

Причина Описание
TARGETING_MATCH Условия правила таргетинга совпали с контекстом оценки, и был возвращён вариант этого правила.
SPLIT Сработало правило таргетинга с процентным развёртыванием. Пользователь попал в указанный процент развёртывания и получил вариант этого правила.
DEFAULT Ни одно правило таргетинга не соответствует контексту оценки. Возвращён вариант флага по умолчанию.
DISABLED Флаг отключён. Вариант по умолчанию был возвращён независимо от правил таргетинга.
CACHED SDK вернул закэшированный результат оценки.
ERROR Оценка не удалась, было возвращено значение по умолчанию.

Коды ошибок

Если при вычислении происходит ошибка, метод возвращает предоставленное вами значение по умолчанию. *Details методы включают дополнительные метаданные об ошибке.

Код ошибки Описание
TYPE_MISMATCH Тип варианта флага не соответствует запрошенному типу. Например, при вызове getBooleanValue для флага, вариант которого является строкой. Возвращается значение по умолчанию.
FLAG_NOT_FOUND Указанный ключ флага не существует в этом приложении. Возвращается значение по умолчанию.
INVALID_CONTEXT Контекст оценки содержит неподдерживаемые значения, например объекты или массивы при оценке по HTTP. Возвращается значение по умолчанию.
PARSE_ERROR SDK получил недопустимый ответ на оценку. Возвращается значение по умолчанию.
GENERAL Во время оценки произошла непредвиденная ошибка, например тайм-аут или сбой сети. Возвращается значение по умолчанию.

Пример

В следующем примере проверяются детали оценки, возвращённые getBooleanDetails:

const details = await env.FLAGS.getBooleanDetails("my-feature", false, {
	userId: "user-42",
});

switch (details.reason) {
	case "TARGETING_MATCH":
		console.log(`Matched targeting rule, variant: ${details.variant}`);
		break;
	case "SPLIT":
		console.log(`Included in rollout, variant: ${details.variant}`);
		break;
	case "DEFAULT":
		console.log("No rule matched, using default variant");
		break;
	case "DISABLED":
		console.log("Flag is disabled");
		break;
}

if (details.errorCode) {
	console.error(`Evaluation error: ${details.errorCode}`);
}
const details = await env.FLAGS.getBooleanDetails("my-feature", false, {
	userId: "user-42",
});

switch (details.reason) {
	case "TARGETING_MATCH":
		console.log(`Matched targeting rule, variant: ${details.variant}`);
		break;
	case "SPLIT":
		console.log(`Included in rollout, variant: ${details.variant}`);
		break;
	case "DEFAULT":
		console.log("No rule matched, using default variant");
		break;
	case "DISABLED":
		console.log("Flag is disabled");
		break;
}

if (details.errorCode) {
	console.error(`Evaluation error: ${details.errorCode}`);
}