You need to enable JavaScript to run this app.
文档中心
A/B测试(DataTester)私有化

A/B测试(DataTester)私有化

复制全文
下载 pdf
开放能力
开放接口V3
复制全文
下载 pdf
开放接口V3

一. 概述

本文档提供「A/B测试」应用中开放接口V3版本的说明。
可用范围包括

  • 实验信息:创建实验、获取实验详情、获取实验列表、修改实验、开始实验、结束实验
  • 指标信息:创建指标、删除指标、获取指标详情、获取指标列表、全量修改指标信息、修改指标状态
  • 互斥组信息:获取互斥组列表、新建互斥组
  • 报告页信息:获取实验报告基础数据

如需使用老版本开放接口,请参考:A/B测试开放接口

二. 联系开通

为了保证您和用户的数据安全,开放接口权限默认是关闭的。
在开始使用之前,您需要联系我们开通。(您可以通过服务对接的飞书/微信群或页面右下角的在线客服与我们取得联系)

  • 开通后,我们会为您提供导出所需的AK/SK,收到后请务必妥善保管和使用。
  • 开通时请和对接人员确认需要开放的接口范围以及接口使用额度,不在开放范围内的接口以及超出限额的接口请求将被拒绝。

三. 使用方式

为了方便集成和使用OpenAPI,我们提供了SDK。其主要功能是提供了对签名过程和复杂查询参数的包装。
SDK已经在 Github 上开源,建议使用Github 源码的方式进行集成。
基本使用流程为:

  1. 根据ak, sk, API 服务地址初始化一个RangersClient
  2. 使用RangersClient的request接口或者data_tester来调用具体API(具体的方法名称在不同的语言上会有命名格式的区别)

由于中国区和非中国区是隔离不互通的,OpenAPI 的服务地址需要根据所在地区进行设置:

  • 中国区:https://analytics.volcengineapi.com
  • 非中国区: https://analytics.byteplusapi.com
  • 私有化部署:根据私有化部署的环境来获取,即产品的域名地址。

SDK使用说明

Java

  • 源码:https://github.com/volcengine/datafinder-sdk-openapi-java
  • 软件包:https://github.com/volcengine/datafinder-sdk-openapi-java/raw/main/release/javasdk.zip
  • 初始化示例:
String ak = "{使用AK替换}";
String sk = "{使用SK替换}";

// SDK 的默认url地址是指向中国区 SAAS 的
RangersClient bc = new RangersClient(ak, sk);

// 海外和私有化需要指定url地址, 可以参考上文
String url="{使用非中国区或者Tester服务域名替换}";
RangersClient bc = new RangersClient(ak, sk, url);

String result = bc.dataTester("/openapi/v1/openapi-test", "GET");
System.out.println(result);

Python

  • 源码:https://github.com/volcengine/datafinder-sdk-openapi-py
  • 软件包:https://github.com/volcengine/datafinder-sdk-openapi-py/raw/main/release/rangersdk-1.2.0.tar.gz

Python SDK 软件包的形式下载后在shell执行以下命令完成安装:

# python需要3.7及以上版本
pip install rangersdk-${version}.tar.gz
  • 初始化示例:
from rangersdk import RangersClient

ak = '{使用AK替换}'
sk = '{使用SK替换}'
bc = RangersClient(ak, sk)

# 海外和私有化需要指定url地址, 可以参考上文,
url = '{使用非中国区或者Tester服务域名替换}'
# 注意这里传参数,一定要写成 url=url
bc = RangersClient(ak, sk, url=url)

re = bc.data_tester("/openapi/v1/openapi-test", method="GET")
print(re.json())

Golang

  • 源码:https://github.com/volcengine/datafinder-sdk-openapi-go
  • 软件包:https://github.com/volcengine/datafinder-sdk-openapi-go/raw/main/release/gosdk.zip
  • 初始化示例:
var (
   ak = "{使用AK替换}"
   sk = "{使用SK替换}"
)
bc := dslcontent.NewRangersClient(ak, sk)

// 海外和私有化需要指定url地址, 可以参考上文
url = '{使用非中国区或者Tester服务域名替换}'
bc := dslcontent.NewRangersClientWithUrl(ak, sk, url)

res, _ := bc.DataTester("/openapi/v1/openapi-test", "GET")
data, err := ioutil.ReadAll(res.Body)
fmt.Println(err, string(data))

JS

  • 源码:https://github.com/volcengine/datafinder-sdk-openapi-js
  • 软件包:https://github.com/volcengine/datafinder-sdk-openapi-js/raw/main/release/nodejssdk.zip
  • 初始化示例:
ak = "{使用AK替换}"
sk = "{使用SK替换}"
bc = new RangersClient(ak, sk)

// 海外和私有化需要指定url地址, 可以参考上文
url = '{使用非中国区或者Tester服务域名替换}'
bc = RangersClient(ak, sk, url=url)

bc.dataTester("/openapi/v1/openapi-test", {method: "GET"})
    .then(res => res.json())
    .then(response => {
        if (200 !== response['code']) {
            throw " result is not ok, code: " + response['code'] + ", message: " + response['message'];
        }
        console.log(response)
        console.log('success.')
    })
    .catch(error => console.error('error:', error));

PHP

  • 源码:https://github.com/volcengine/datafinder-sdk-openapi-php
  • 软件包:https://github.com/volcengine/datafinder-sdk-openapi-php/raw/main/release/phpsdk.zip
  • 初始化示例:
$ak = "{使用AK替换}";
$sk = "{使用SK替换}";
$bc = new RangersClient($ak, $sk);

// 海外和私有化需要指定url地址, 可以参考上文
$url = '{使用非中国区或者Tester服务域名替换}'
$bc = new RangersClient($ak, $sk, $url);

echo $bc->dataTester("/openapi/v1/openapi-test", "GET");

SDK使用注意

中文编码

获取列表的相关接口(实验、指标、互斥组)支持根据关键字查询,如需查询中文,Java、Python、PHP需要调用前自行进行url转码,转码方法如下
golang SDK和nodeJs SDK不需要自行转码
Java

import java.net.URLEncoder;

String keyword = URLEncoder.encode("中文关键字", "UTF-8")

Python

import urllib.parse

keyword = urllib.parse.quote("中文关键字", encoding="UTF-8")

PHP

$keyword = urlencode("中文关键字");

四. 接口说明

获取受众过滤条件

说明: 获取App实验过滤条件,用于受众规则圈选,当前仅支持编程实验-服务端实验。

说明

私有化4.9.0版本开始新增支持此接口。

请求路径:/openapi/v3/apps/{app_id}/para-filters
请求方法:GET
请求参数

参数名称

参数类型

是否必填

描述

experiment_mode

string

是

实验类型,当前仅支持编程实验,需配置为“coding”。

side_type

string

是

实验端类型,当前仅支持服务端实验,需配置为“server”。

返回值

参数名称

类型

说明

code

int

接口返回状态,200为成功

message

string

接口返回信息,成功时默认为success

data

object

接口返回的服务端过滤条件。结构如下:

{
"list":[{},{},...]
}

注意

私有化-CDP联合部署环境下,服务端编程实验会返回用户分群列表。

data结构说明

参数名称

类型

说明

id

int

过滤参数ID

name

string

过滤参数名称

description

string

描述信息

key

string

过滤参数Key

type

string

过滤参数Value类型

owner

object

owner信息列表

modify_time

int

参数更新时间戳(秒)

attribute

string

过滤参数属性

options

object

过滤参数可取值列表,直接参考下方样例

op

object

过滤参数可以进行的操作符, 直接参考下方样例

property_type

string

过滤参数参数类型

说明

返回的数据中,主要需要关注下面几个字段,用于拼接实验的受众过滤规则:

  • key: 参数Key, 其中cohort的表示当前系统中圈选的分群
  • type:参数value类型,进而决定操作符
  • op: 可进行的操作符
  • property_type:参数类型,其中cdp_cohort标识是cdp的分群

示例

{
    "code": 200,
    "data": {
        "list":[
                {
                    "id": 12463,
                    "name": "姓名",
                    "key": "name",
                    "type": "string",
                    "owner": [
                        {
                            "id": 238434,
                            "name": "zhangsan",
                            "avatar": "https://sf3-ttcdn-tos.pstatp.com/obj/byterangers-avatar/NPTDy24097558461*****.png"
                        }
                    ],
                    "modify_time": 1695108262,
                    "attribute": "profile",
                    "options": [
                        {
                            "label": "",
                            "value": "syz"
                        },
                        {
                            "label": "",
                            "value": "cy"
                        }
                    ],
                    
                },
                {
                    "id": 0,
                    "name": "用户分群",
                    "description": "",
                    "key": "cohort",
                    "type": "int",
                    "owner": [],
                    "modify_time": 0,
                    "attribute": "common_param",
                    "options": [
                        {
                            "label": "昨天做了任意事件_20231206174256586",
                            "value": 1022367
                        },
                        ...
                },
                ...
            ]
    }
    "message": "success"
}

创建实验

注意

开放接口所创建的实验,仅管理员可编辑

接口描述: 创建一个编程实验或MAB实验。
请求路径:/openapi/v3/apps/{app_id}/experiments
请求方法:POST
请求参数

参数名称

参数类型

是否必填

描述

备注

name

string

是

实验名称

不能与当前APP下已有实验重名,长度限制200字符

description

string

否

实验描述

长度限制1000字符

tags

string

否

实验标签

["123", "456"]

owners

object

否

创建人

实验owner列表,owner的object数据结构包括id和name两个参数:

  • id:int类型,必填,表示用户ID。
  • name:string类型,必填,表示用户名。

您可以使用用户信息查询接口获取实验owners的数值。

endpoint_type

int

是

实验类型

0-客户端实验,1-服务端实验

duration

int

是

实验时长

单位天,范围:[1, 365]

major_metric

int

是

核心指标ID

必须在metrics中

metrics

int[]

是

关注的指标ID列表

必须包含major_metric

versions

object[]

是

实验版本配置

数组长度要大于等于2,详见version结构说明

layer_info

object

是

实验层配置

详见layer_info说明

mab_info

object

否

MAB实验配置信息

如果是创建MAB实验,该字段必传。详细介绍请参见下文的mab_info结构说明。

user_group_filter_rules

object[]

否

客群实验受众规则列表。详情请参见下文的user_group_filter_rules结构说明章节。

4.9.0版本开始,与CDP联合部署时,新增支持创建客群实验,使用客群进行受众规则配置时需配置此参数。

manage_sub_type

string

否

特性实验子类型,仅可配置为:user_group。

null

rehash_info

object

否

重随机信息。如果创建非重随机实验,该参数无需传入值。详情请参见下文的 rehash_info 章节。

注意

重随机能力当前不能用于 mab 实验、客群实验及特型实验。

传入时校验

注意

  • 配置mab组和对应的非mab组的配置要相同,也就是mab和非mab组的配置是一对一对的。具体参见下文的例子,例如智能调优组"对照组"和评估组"对照组-Besfw"是一一对应的。
  • 私有化480版本mab核心指标只支持单事件转化率类型的指标,uv_per_dau(算子为:转化率)。

version结构说明

参数名称

参数类型

是否必填

描述

备注

type

int

是

对照版本/实验版本

0-对照版本,1-实验版本 versions数组中只能有一个对照版本

name

string

是

版本名称

长度50字符

description

string

否

版本描述

长度1000字符

weight

float

否

实验版本的流量分配

范围[0.001, 1] 0.1% ~ 100%
versions数组中不传,则默认均匀分配 如果传,则会校验所有weight的和是否为1

config

object

是

版本配置

version数组中所有config的key需要保持一致 { "key1": "value1", "key2": "value2" }

users

string[]

否

白名单用户

不同版本的白名单用户不能有交集

is_mab

int

否

是否为mab智能流量组,取值:0或1

layer_info结构说明

参数名称

参数类型

是否必填

描述

备注

layer_id

int

否

互斥组ID

使用的实验层,使用默认层则传-1或不传
如果指定了layer_id,则会校验实验层上可用流量是否满足实验配置

version_resource

float

是

实验流量占比

范围[0.001, 1],最小精度千分之一

mab_info结构说明

参数名称

参数类型

是否必填

描述

备注

interval_time

int

是

调优间隔,单位:秒

单位秒,最小间隔30分钟,并且按照30分钟增加,例如1800, 3600, 5400。

non_mab_traffic

int

是

评估流量占比

百分比,例如6就是6%,每个实验组最低需要3%的评估流量,例如三个实验组最低需要9%的评估流量。

user_group_filter_rules结构说明

参数名称

参数类型

是否必填

描述

name

string

是

客群名称

type

int

是

对照客群/实验客群

  • 0:对照客群
  • 1:实验客群

user_group_filter_rules数组中只能有一个对照客群

rehash_info结构说明

参数名称

参数类型

是否必填

描述

备注

cohorts

list

否

分群信息

其他字段和编程实验一致,此处略去

└ cohort_id

int

是

分群 ID

无

└ type

string

否

分群类型

固定取值 uba

metrics

list

否

指标信息

传入时校验

└ metric_group_id

int

是

指标组 ID

分群 ID

└ metrics

list

是

指标信息

最多 3 个指标

└└ metric_id

int

是

指标 ID

无

start_ts

int

否

开始时间

当 metrics 指定时,必填,精确到秒

end_ts

int

否

结束时间

当 metrics 指定时,必填,精确到秒

launch_times

int

否

尝试次数

默认 10,即尝试 10 个随机种子

statistic_type

string

否

统计类型

统计类型,固定值:p_value

threshold_value

float

否

统计阈值

默认 0.05

返回值

参数名称

类型

说明

code

int

接口返回状态,200为成功

message

string

接口返回信息,成功时默认为success

data

int

新创建实验ID

示例
编程实验,两个评估组,两个智能调优组,一共4个组,调优间隔30分钟,评估流量6%。

{
    "name": "test-mab",
    "duration": 14,
    "versions": [
        {
            "name": "对照组",
            "label": "对照组",
            "weight": 0.47,
            "is_mab": 1,
            "type": 0,
            "config": {
                "HcCVhO": "_Lf5XM"
            },
            "users": []
        },
        {
            "name": "实验组1",
            "label": "实验组1",
            "weight": 0.47,
            "is_mab": 1,
            "type": 1,
            "config": {
                "HcCVhO": "TAqqd4"
            },
            "users": []
        },
        {
            "name": "对照组-Besfw",
            "label": "对照组",
            "weight": 0.03,
            "is_mab": 0,
            "type": 1,
            "config": {
                "HcCVhO": "ij45wC"
            },
            "users": []
        },
        {
            "name": "实验组1-fL17k",
            "label": "实验组1",
            "weight": 0.03,
            "is_mab": 0,
            "type": 1,
            "config": {
                "HcCVhO": "WRDoSW"
            },
            "users": []
        }
    ],
    "major_metric": 100942,
    "metrics": [
        100940,
        100941,
        100942,
        100943,
        100944,
        100945,
        100946
    ],
    "mode": 1,
    "mab_info": {
        "interval_time": 1800,
        "non_mab_traffic": 6
    },
    "endpoint_type": 0,
    "layer_info": {
        "layer_id": -1,
        "version_resource": 1
    }
    {
    "user_group_filter_rules": [
        {
            "name": "\u5ba2\u7fa4A",
            "type": 0,
            "filter_rule": [
                {
                    "logic": "||",
                    "conditions": [
                        {
                            "logic": "&&",
                            "condition": {
                                "key": "automation_copy_aaaessrssb_Int",
                                "type": "int",
                                "op": "==",
                                "value": [
                                    1
                                ],
                                "property_type": "common_param"
                            }
                        }
                    ]
                }
            ]
        },
        {
            "name": "\u5ba2\u7fa4B",
            "type": 1,
            "filter_rule": [
                {
                    "logic": "||",
                    "conditions": [
                        {
                            "logic": "&&",
                            "condition": {
                                "key": "cohort",
                                "type": "int",
                                "op": "==",
                                "value": [
                                    1000004
                                ],
                                "property_type": "cdp_cohort"
                            }
                        }
                    ]
                }
            ]
        }
    ],
    "manage_sub_type": "user_group",      // 实验的子类型字段,这里是客群传递user_group,若用户编辑rollback后传递空串或者不传都可以,后端会判断对应更新实验表
}
}

获取实验详情

说明: 根据实验ID获取实验详情
请求路径:/openapi/v3/apps/{app_id}/experiments/{experiment_id}
请求方法:GET
返回值

参数名称

类型

说明

code

int

接口返回状态,200为成功

message

string

接口返回信息,成功时默认为success

data

object

接口返回的实验信息

data信息

参数名称

类型

说明

experiment

object

实验信息

experiment结构说明

参数名称

类型

说明

id

int

实验的experiment_id

name

string

实验名称

tags

string

标签列表

owners

object

owner信息列表

launch_start_time

long

实验开始时间,Unix时间戳

end_time

long

实验结束时间,Unix时间戳

create_time

long

实验创建时间,Unix时间戳

modify_time

long

实验修改时间,Unix时间戳

test_start_time

long

实验调试开始时间,Unix时间戳

duration

long

实验运行时间,单位秒

confidence_level

int

置信度水平,95代表置信度水平为95%

version_resource

float

实验所占流量,范围[0.001, 1],1为100%

layer_id

int

实验层id

freeze_status

int

实验冻结状态 1-冻结,0-没冻结

freeze_time

long

实验冻结时间,Unix时间戳(只有冻结状态为1时才有效)

version_freeze_status

boolean

是否进组不出组

  • true:是
  • false:否

pause_status

boolean

实验是否暂停

  • true:暂停
  • false:不暂停

endpoint_type

int

0-客户端实验,1-服务端实验

versions

object[]

实验版本信息

metrics

object[]

实验关注指标信息

status

int/enum

实验状态, 0:已结束 1:运行中 2: 待调度 3:调试中

filters

string

实验受众目标,json字符串

description

string

实验描述

user_group_filter_rules

List[Dict]

客群实验受众规则列表

manage_sub_type

string

特性实验子类型

rehash_info

object

重随机信息,详情请参见下文rehash_info结构说明章节

metric结构说明

参数名称

类型

说明

id

int

指标id

name

string

指标名称

description

string

指标描述

is_primary

int

是否核心指标:0-否 1-是

calculate_type

string

指标计算类型

dsl

object

指标dsl

status

int

指标状态 0: 已下线 1:没下线

is_composed

boolean

是否组合指标:true/false

data_type

string

指标展现数值格式

metric_type

string

指标类型,枚举值如下:

  • tea:事件指标
  • funnel:漏斗指标
  • retention_all:预置留存指标。
  • custom_retention:自定义留存指标。
  • portable:数仓指标。
  • event:事件指标,过往曾使用“event”表示事件指标,当前事件指标均使用“tea”。
  • 其他枚举值:其他指标类型。

version结构说明

参数名称

类型

说明

id

int

版本id

type

int

版本类型:0-对照版本,1-实验版本

name

string

版本名称

description

string

版本描述

config

object

版本配置 { "key1": "value1", "key2": "value2" }

weight

int

版本权重,和为1000,1代表0.1% 为0则为均匀分配

user_list

string[]

白名单列表

rehash_info结构说明

参数名称

类型

说明

rehash_id

int

重随机任务 ID

status

int

重随机任务状态:

  • INITIALIZED = 99, "初始化"
  • RUNNING = 0, "运行中"
  • SUCCESS = 1, "成功"
  • FAILURE = 2, "失败"
  • ADOPTED = 3, "已采用"
  • DEPRECATED = 5, "已取消"

获取实验列表

说明: 分页获取APP下的实验列表
注意:如果搜索关键字keyword包含中文,则需要先进行url转义,再进行调用
请求路径:/openapi/v3/apps/<app_id>/experiments
请求方法:GET
URL查询参数

参数

类型

说明

status

int

实验状态,0-已结束,1-运行中,3-测试中;不传则默认所有状态

page

int

分页参数,1表示第一页,不传默认为1

page_size

int

每页数量,不传默认99

keyword

string

搜索关键字,当前支持按照实验name和description模糊搜索

sort_by

string

排序规则。当前仅支持 end_time结束时间、launch_start_time实验启动时间、test_start_time测试开始时间; 不传默认实验创建时间

sort_order

string

排序顺序。desc/asc。不传默认desc降序

返回值

参数名称

类型

说明

code

int

接口返回状态,200为成功

message

string

接口返回信息,成功时默认为success

data

object

{
"experiments": [],
"page": {
"current_page": 1, // 当前页
"total_pages": 0, // 总页数
"total_items": 0 // 总条目数
}
}

experiments结构说明

参数名称

类型

说明

id

int

实验ID

name

string

实验名称

end_time

long

实验结束时间,Unix时间戳

test_start_time

long

实验调试开始时间,Unix时间戳

launch_start_time

long

实验开始时间,Unix时间戳

duration

long

实验运行时间,单位秒

version_resource

float

实验所占流量,范围[0.001, 1],1为100%

layer_id

int

实验层id

freeze_status

int

实验冻结状态 1-冻结,0-没冻结

freeze_time

long

实验冻结时间,Unix时间戳(只有冻结状态为1时才有效)

version_freeze_status

boolean

是否进组不出组

  • true:是
  • false:否

pause_status

boolean

实验是否暂停

  • true:暂停
  • false:不暂停

endpoint_type

int

0-客户端实验,1-服务端实验

description

string

实验描述

status

int/enum

实验状态, 0:已结束 1:运行中 2: 待调度 3:调试中

owner

字符串

实验创建人

versions

object[]

实验版本信息

修改实验信息

说明: 修改实验的配置信息。通过Method来区分是全量修改还是部分修改。

  • 全量修改:Method=PUT。请求参数中的所有必填参数必须包含。
  • 部分修改:Method=PATCH。可以任意传递支持的配置参数,请求体中有的参数,才会进行校验与修改,请求体中没有的参数,则会保持现状。

注意:由于使用的网络库本身不支持不支持PATCH方法,因此Java SDK暂不支持PATCH方法
请求路径:/openapi/v3/apps/{app_id}/experiments/<experiment_id>
请求方法:PUT/PATCH
请求参数

参数名称

参数类型

是否必须

描述

备注

name

string

是

实验名称

不能与已有实验重名,长度50字符

description

string

否

实验描述

长度1000字符

tags

string

否

实验标签

["123", "456"]

owners

object

否

创建人

实验owner列表

duration

int

是

实验时长

单位天,[1, 365],整数

major_metric

int

是

核心指标 ID

运行中不可修改 测试中可以修改

metrics

int[]

是

指标ID列表

versions

object[]

是

实验版本

version数量不可变动,只可以修改version内容

layer_info

object

否

互斥组

user_group_filter_rules

object[]

否

客群实验受众规则列表。详情请参见下文的user_group_filter_rules结构说明章节。

manage_sub_type

string

否

特性实验子类型,仅可配置为:user_group。

version结构

参数名称

参数类型

是否必填

描述

备注

id

int

是

版本ID

修改version信息必填

name

string

是

版本名称

长度50字符

description

string

否

版本描述

长度1000字符

weight

float

否

流量分配

范围[0.001, 1] 0.1% ~ 100%
versions数组中不传,则默认均匀分配
如果传,则会校验所有weight的和是否为1

config

object

是

版本参数不同版本的 key
需要保持一致

version数组中所有config的key需要保持一致
{ "key1": "value1", "key2": "value2" }

users

string[]

否

白名单用户

layer_info结构

参数名称

参数类型

是否必填

描述

备注

layer_id

int

否

互斥组 ID

version_resource

float

是

占用流量百分比

范围[0.001, 1],最小精度千分之一

user_group_filter_rules结构

参数名称

参数类型

是否必填

描述

name

string

是

客群名称

type

int

是

对照客群/实验客群

  • 0:对照客群
  • 1:实验客群

user_group_filter_rules数组中只能有一个对照客群

返回值

参数名称

类型

说明

code

int

接口返回状态,200为成功

message

string

接口返回信息,成功时默认为success

data

object

实验ID

开始实验

说明: 开始一个测试中的实验。使其状态变为运行中。
请求路径: /openapi/v3/apps/<app_id>/experiments/<experiment_id>/launch
请求方法: PUT
返回值

参数名称

类型

说明

code

int

接口返回状态,200为成功

message

string

接口返回信息,成功时默认为success

data

object

实验ID

暂停实验

说明: 暂停指定实验,4.9.0版本开始支持此接口
请求路径 : /openapi/v3/apps/<app_id>/experiments/<experiment_id>/pause
请求方法: POST
请求参数

参数名称

类型

说明

duration

int

暂停某个实验时,实验流量是平滑生效的,通过此参数设置平滑生效的时间是多少分钟

返回值

参数名称

类型

说明

code

int

接口返回状态,200为成功

message

string

接口返回信息,成功时默认为success

恢复实验

说明: 恢复指定实验,4.9.0版本开始支持此接口
请求路径 : /openapi/v3/apps/<app_id>/experiments/<experiment_id>/restore
请求方法: POST
请求参数

参数名称

类型

说明

duration

int

恢复某个实验时,实验流量是平滑生效的,通过此参数设置平滑生效的时间是多少分钟

返回值

参数名称

类型

说明

code

int

接口返回状态,200为成功

message

string

接口返回信息,成功时默认为success

结束实验

说明: 结束指定实验
请求路径 : /openapi/v3/apps/<app_id>/experiments/<experiment_id>/stop
请求方法: PUT
返回值

参数名称

类型

说明

code

int

接口返回状态,200为成功,非200的错误码说明如下:

  • 400:业务逻辑错误
  • 500:服务异常

message

string

接口返回信息,成功时默认为success

data

object

实验ID

关闭实验组

说明: 关闭某个实验组
请求路径 : /openapi/v3/apps/<app_id>/experiments/:flight_id/versions/:version_id/close
请求方法: POST
请求参数

参数

类型

说明

app_id

integer

路径参数,实验所属app_id

flight_id

integer

路径参数,实验ID

version_id

integer

路径参数,实验组ID

返回值

参数名称

类型

说明

code

int

接口返回状态,200为成功,非200的错误码说明如下:

  • 400:业务逻辑错误
  • 500:服务异常

message

string

接口返回信息,成功时默认为success

创建指标

说明: 创建一个A/B测试指标
请求路径: /openapi/v3/apps/<app_id>/metrics
请求方法:POST
请求参数

参数名称

类型

是否必须

描述

备注

name

string

是

指标名称

长度限制 50,不可与相同APP下其他指标重复

description

string

否

指标描述

长度限制 1000

dsl

object

是

指标DSL

dsl详情可咨询对接人员

composed

boolean

是

是否是组合指标

true/false

data_type

string

否

数据展示类型

枚举值
number_0, number_1, number_2, number_3, number_4, number_5,
percent_0, percent_1, percent_2, percent_3, percent_4, percent_5
默认为percent_4,即百分数四位小数

返回值

参数名称

类型

说明

code

int

接口返回状态,200为成功

message

string

接口返回信息,成功时默认为success

data

int

指标ID

基于指标模板创建指标

说明: 基于现存的A/B测试指标,通过修改其中的属性过滤信息,创建新的A/B测试指标。只会替换模板指标中同名的属性值,模板指标中不存在的属性会忽略。如果传入多个 metrics,要修改的属性信息会分别应用于每个 metric。
可以简单理解为把每个模板指标都复制一份,然后修改其已存在的 property 信息。
请求路径: /openapi/v3/apps/<app_id>/metrics/create-from-templates
请求方法: POST
请求参数

参数名称

类型

是否必须

描述

备注

metrics

list[metric]

是

指标信息列表

metric 见下表说明

properties

list[property]

是

需要修改的属性信息

property 见下表说明

metric字段说明

参数名称

类型

是否必须

描述

备注

metric_id

int

是

模板指标id

已存在的指标id

name

string

是

根据模板指标,新建指标的名称

长度限制 50,不可与相同APP下其他指标重复

description

string

否

根据模板指标,新建指标的指标信息

长度限制 1000

property字段说明

参数名称

类型

是否必须

描述

备注

property_name

string

是

属性名称

模板中不存在的属性名会直接忽略,不报错

property_values

string/int/float数组

是

属性值

长度限制255,如果为空,则是[];属性值类型需要与模板指标的属性类型保持一致。具体字段说明可参考 V3 DSL 字段详细说明

返回值

参数名称

类型

说明

code

int

接口返回状态,200为成功

message

string

接口返回信息,成功时默认为success

data

list[object]

新创建的指标信息

object字段说明

参数名称

类型

说明

id

int

新创建的指标ID

name

string

新创建的指标名称

curl --location --request POST '{host}/datatester/openapi/v3/apps/253047/metrics/create-from-template' \
--header 'Content-Type: application/json' \
--data-raw '{
    "metrics": [
        {
            "metric_id": 33487,
            "name": "测试一下事件指标5",
            "description": "这是一个description"
        },
        {
            "metric_id": 33488,
            "name": "测试一下事件指标6",
            "description": "这是一个description"
        }
    ],
    "properties": [
        {
            "property_name": "app_channel",
            "property_values": [
                "channel3",
                "channel4"
            ]
        },
        {
            "property_name": "account_id",
            "property_values": [
                "1234556",
                "7654321"
            ]
        }
    ]
}'

删除指标

说明: 删除指定的指标。如果指标有已经关联的实验,则无法删除
请求路径: /openapi/v3/apps/<app_id>/metrics/<metric_id>
请求方法: DELETE
返回值

参数名称

类型

说明

code

int

接口返回状态,200为成功

message

string

接口返回信息,成功时默认为success

data

int

指标ID

获取指标详情

说明: 获取指定指标的详情数据
请求路径: /openapi/v3/apps/<app_id>/metrics/<metric_id>
请求方法: GET
返回值

参数名称

类型

说明

code

int

接口返回状态,200为成功

message

string

接口返回信息,成功时默认为success

data

object

指标信息 {"metric_info": }

指标信息说明

参数名称

类型

说明

id

int

指标ID

name

string

指标名

description

string

描述

dsl

object

指标dsl

composed

boolean

是否是组合指标

status

int

状态 0-下线 1-上线

is_support_major

boolean

是否支持设置为核心指标

获取指标列表

说明: 分页获取APP下的指标列表
请求路径:/openapi/v3/apps/<app_id>/metrics
请求方法:GET
URL查询参数

参数

类型

说明

status

int

指标状态,0-下线 1-上线,不传则默认所有状态

page

int

分页参数,1表示第一页,不传默认为1

page_size

int

每页数量,不传默认99

keyword

string

搜索关键字,当前支持按照指标name和description模糊搜索

only_confidence

int

只查询支持置信度计算的指标,1 为有效值,不传或其他值无效

返回值

参数名称

类型

说明

code

int

接口返回状态,200为成功

message

string

接口返回信息,成功时默认为success

data

object

{
"metrics": [],
"page": {
"current_page": 1, // 当前页
"total_pages": 0, // 总页数
"total_items": 0 // 总条目数
}
}

指标信息说明

参数名称

类型

说明

id

int

指标ID

name

string

指标名

description

string

描述

dsl

object

指标dsl

composed

boolean

是否是组合指标

status

int

状态 0-下线 1-上线

is_support_major

boolean

是否支持设置为核心指标

获取指标组详情

说明: 获取指定指标组的详情数据
请求路径: /openapi/v3/apps/<app_id>/metric-groups/<metric_group_id>
请求方法: GET
返回值

参数名称

类型

说明

code

int

接口返回状态,200为成功

message

string

接口返回信息,成功时默认为success

data

object

指标组信息 {"metric_info": }

指标组信息说明

  • body.data

    字段名

    描述

    id

    指标组id

    name

    指标组名称

  • body.metrics[0]

    字段名

    描述

    id

    指标id

    name

    指标名称

    type

    指标类型

    • portable:数仓指标
    • tea:uba指标,除数仓指标外的其他指标均为tea类型的uba指标

    composed

    是否组合指标

    • true:组合指标
    • false:单一指标

    is_experimental_property_filter

    是否支持灵活属性

    • 1:支持,返回支持的灵活属性详情,格式可参见下文的:body.metrics[0].experimental_property_filter_tpl
    • 0:不支持
  • body.metrics[0].experimental_property_filter_tpl

    {
      "A": {
        "event_id": 89,
        "event_name": "any_event",
        "properties": [
          {
            "property_type": "common_param",
            "property_value_type": "string",
            "property_name": "user_agent"
          }
        ]
      },
      "B": {
        "event_id": 91,
        "event_name": "app_launch",
        "properties": [
          {
            "property_type": "user_profile",
            "property_value_type": "datetime",
            "property_name": "first_event_time"
          }
        ]
      },
      "all": {
        "properties": [
          {
            "property_type": "user_profile",
            "property_value_type": "string",
            "property_name": "gender"
          }
        ]
      }
    }
    

    灵活属性详情的返回结果字段详情与DataFinder的DSL结构说明类似,主要字段如下:

    字段名

    描述

    A、B

    对应DSL中的show_label。

    all

    对所有事件生效的属性

    properties

    指标属性描述

    property_name

    属性名称

    property_type

    属性类型

    • common_param:公共事件属性
    • user_profile:用户属性

    property_value_type

    属性值类型
    int/string/long/float

返回示例

  • 查询数仓指标组详情

    {
      "code": 0,
      "data": {
        "id": 60,
        "name": "portable(单一+组合指标)45712",
        "status": 1,
        "description": "",
        "type": "portable",
        "uba_report_type": 1,
        "uba_app_id": 0,
        "owners": [
          {
            "id": 1,
            "name": "admin",
            "avatar": null,
            "is_superuser": null
          }
        ],
        "app_ids": [
          10000001
        ],
        "import_app_ids": [],
        "tags": [],
        "merge_types": {
          "total_start_time": 0,
          "support_accumulate": 0,
          "support_total": 0,
          "support_avg": 1
        },
        "metric_scenes": [],
        "sla": "",
        "metrics": [
          {
            "id": 10397,
            "name": "SUM/UV-灵活",
            "description": "",
            "status": 1,
            "dsl": {
              "version": 3,
              "content": {
                "queries": [
                  [
                    {
                      "dataset_id": 9,
                      "event_indicator": "measure",
                      "filters": [],
                      "measure_info": {
                        "field_name": "amount",
                        "measure_type": "sum",
                        "property_type": "profile",
                        "value_type": "int"
                      },
                      "nickname": "",
                      "show_label": "A"
                    }
                  ],
                  [
                    {
                      "dataset_id": 9,
                      "event_indicator": "event_users",
                      "filters": [],
                      "nickname": "",
                      "show_label": "B"
                    }
                  ],
                  [
                    {
                      "formula": "A/B",
                      "show_label": "metric_relation",
                      "show_name": "指标关系"
                    }
                  ]
                ],
                "profile_filters": [],
                "show_option": null,
                "option": null
              }
            },
            "composed": true,
            "data_type": "number_4",
            "type": "portable",
            "is_required": 0,
            "permission_type": "public",
            "calculate_type": "events_per_user",
            "create_time": 1724056602,
            "modify_time": 1724056637,
            "support_confidence": true,
            "is_support_major": true,
            "experiment_num": 2,
            "key": "",
            "file": "",
            "is_hourly": 0,
            "support_bayes": 0,
            "need_weighted": 0,
            "weighted_metric_id": null,
            "visible": true,
            "major_metric_num": 0,
            "has_running_experiments": true,
            "is_defense_metric": 0,
            "defenses": [],
            "use_pre_sql": 0,
            "pre_alert": 0,
            "merge_pre_sql": "",
            "avg_pre_sql": "",
            "first_entry_avg_pre_sql": "",
            "extra_info": "{\"is_experimental_property_filter\":1,\"experimental_property_filter_tpl\":{\"A\":{\"properties\":[{\"property_value_type\":\"int\",\"property_name\":\"amount\"}]},\"B\":{\"properties\":[{\"property_value_type\":\"string\",\"property_name\":\"order_no\"}]},\"all\":{\"properties\":[{\"property_value_type\":\"string\",\"property_name\":\"product_type\"}]}}}",
            "is_experimental_property_filter": 1,
            "experimental_property_filter_tpl": {
              "A": {
                "properties": [
                  {
                    "property_value_type": "int",
                    "property_name": "amount"
                  }
                ]
              },
              "B": {
                "properties": [
                  {
                    "property_value_type": "string",
                    "property_name": "order_no"
                  }
                ]
              },
              "all": {
                "properties": [
                  {
                    "property_value_type": "string",
                    "property_name": "product_type"
                  }
                ]
              }
            },
            "is_experimental_property_filter_editable": 0
          }
        ],
        "permission_type": "public",
        "modify_time": 1724056601,
        "metric_num": null,
        "libra_analysis_type": 0,
        "dimensions": [],
        "new_format": 1,
        "dataset_id": 5,
        "ab_analysis_type": 0
      },
      "message": ""
    }
    
  • 查询UBA指标组详情

    {
        "code": 0,
        "data": {
            "id": 2,
            "name": "default",
            "status": 1,
            "description": "应用接入测试指标组(系统自建)",
            "type": "uba",
            "uba_report_type": 1,
            "uba_app_id": 0,
            "owners": [
                {
                    "id": -2,
                    "name": "InnerAPI",
                    "avatar": null,
                    "is_superuser": null
                }
            ],
            "app_ids": [
                10000001
            ],
            "import_app_ids": [],
            "tags": [],
            "merge_types": {
                "total_start_time": 0,
                "support_accumulate": 0,
                "support_total": 0,
                "support_avg": 1
            },
            "metric_scenes": [],
            "sla": "",
            "metrics": [
                {
                    "id": 10425,
                    "name": "组合指标-1-灵活",
                    "description": "组合指标-1-灵活",
                    "status": 1,
                    "dsl": {
                        "version": 3,
                        "content": {
                            "queries": [
                                [
                                    {
                                        "event_id": 89,
                                        "event_indicator": "pv_per_dau",
                                        "event_name": "any_event",
                                        "event_type": "origin",
                                        "filters": [
                                            {
                                                "expression": {
                                                    "conditions": [],
                                                    "logic": "and"
                                                }
                                            }
                                        ],
                                        "nickname": "",
                                        "show_label": "A"
                                    }
                                ],
                                [
                                    {
                                        "event_id": 91,
                                        "event_indicator": "pv_per_dau",
                                        "event_name": "app_launch",
                                        "event_type": "origin",
                                        "filters": [],
                                        "nickname": "",
                                        "show_label": "B"
                                    }
                                ],
                                [
                                    {
                                        "formula": "A/B",
                                        "show_label": "metric_relation",
                                        "show_name": "指标关系"
                                    }
                                ]
                            ],
                            "profile_filters": [],
                            "show_option": null,
                            "option": null
                        }
                    },
                    "composed": true,
                    "data_type": "number_4",
                    "type": "tea",
                    "is_required": 0,
                    "permission_type": "public",
                    "calculate_type": "",
                    "create_time": 1726024310,
                    "modify_time": 1726024483,
                    "support_confidence": false,
                    "is_support_major": false,
                    "experiment_num": 0,
                    "key": "",
                    "file": "",
                    "is_hourly": 0,
                    "support_bayes": 0,
                    "need_weighted": 0,
                    "weighted_metric_id": null,
                    "visible": true,
                    "major_metric_num": 0,
                    "has_running_experiments": false,
                    "is_defense_metric": 0,
                    "defenses": [],
                    "use_pre_sql": 0,
                    "pre_alert": 0,
                    "merge_pre_sql": "",
                    "avg_pre_sql": "",
                    "first_entry_avg_pre_sql": "",
                    "extra_info": "{\"is_experimental_property_filter\":1,\"experimental_property_filter_tpl\":{\"A\":{\"event_id\":89,\"event_name\":\"any_event\",\"properties\":[{\"property_type\":\"common_param\",\"property_value_type\":\"string\",\"property_name\":\"user_agent\"}]},\"B\":{\"event_id\":91,\"event_name\":\"app_launch\",\"properties\":[{\"property_type\":\"user_profile\",\"property_value_type\":\"datetime\",\"property_name\":\"first_event_time\"}]},\"all\":{\"properties\":[{\"property_type\":\"user_profile\",\"property_value_type\":\"string\",\"property_name\":\"gender\"}]}}}",
                    "is_experimental_property_filter": 1,
                    "experimental_property_filter_tpl": {
                        "A": {
                            "event_id": 89,
                            "event_name": "any_event",
                            "properties": [
                                {
                                    "property_type": "common_param",
                                    "property_value_type": "string",
                                    "property_name": "user_agent"
                                }
                            ]
                        },
                        "B": {
                            "event_id": 91,
                            "event_name": "app_launch",
                            "properties": [
                                {
                                    "property_type": "user_profile",
                                    "property_value_type": "datetime",
                                    "property_name": "first_event_time"
                                }
                            ]
                        },
                        "all": {
                            "properties": [
                                {
                                    "property_type": "user_profile",
                                    "property_value_type": "string",
                                    "property_name": "gender"
                                }
                            ]
                        }
                    },
                    "is_experimental_property_filter_editable": 1
                }
            ],
            "permission_type": "public",
            "modify_time": 1724814787,
            "metric_num": null,
            "libra_analysis_type": 0,
            "dimensions": [],
            "new_format": 1,
            "dataset_id": null,
            "ab_analysis_type": 0
        },
        "message": ""
    }
    

全量修改指标信息

说明: 全量修改指标的信息,DSL暂时无法修改,只可以修改名称、描述和数据类型
请求路径: /openapi/v3/apps/<app_id>/metrics/<metric_id>
请求方法: PUT
请求体

参数名称

类型

是否必须

描述

备注

name

string

是

指标名称

最大长度50,不可重复

description

string

否

指标描述

最大长度1000

data_type

string

否

指标数据类型

枚举值
number_0, number_1, number_2, number_3, number_4, number_5,
percent_0, percent_1, percent_2, percent_3, percent_4, percent_5
默认为percent_4,即百分数四位小数

返回值

参数名称

类型

说明

code

int

接口返回状态,200为成功

message

string

接口返回信息,成功时默认为success

data

int

指标ID

修改指标状态

说明: 修改指标的状态(上线、下线)。JAVA SDK暂不支持此接口
请求路径: /openapi/v3/apps/<app_id>/metrics/<metric_id>
请求方法: PATCH
请求体

参数名称

类型

是否必须

描述

备注

status

int

是

指标状态

0-下线 1-上线

返回值

参数名称

类型

说明

code

int

接口返回状态,200为成功

message

string

接口返回信息,成功时默认为success

data

int

指标ID

获取实验报告-分组结论概览

说明:获取实验报告分析结论概览
请求路径 : /openapi/v3/apps/<app_id>/experiments/<experiment_id>/summary-data
请求方法: GET
返回值

code

int

接口返回状态,200为成功

message

string

接口返回信息,成功时默认为success

data

object

报告数据,详情请参见下文的报告数据结构说明。

报告数据结构说明

参数名称

参数类型

描述

summary_infos

list[object]

报告概览数据,详情请参见下文的summa_infos结构说明。

report_type

string

报告类型:day:天级

start_ts

int

查询开始时间,UNIX时间戳

end_ts

int

查询结束时间,UNIX时间戳

user_data

object

各版本进组人数

summary_infos结构说明

参数名称

参数类型

描述

major_metric_name

string

核心指标名称

summary

list[object]

指标概览数据

返回示例

{
    "code": 200,
    "data": {
        "summary_infos": [
            {
                "major_metric_name": "any转化率",
                "summary": [
                    {
                        "vid": 339601,
                        "version_name": "8b4b2cfdbd73941123bce96f9ce541e2",
                        "confidence": 3,
                        "conf_interval": [
                            -0.08904,
                            0.08904
                        ],
                        "p": 1.0
                    }
                ]
            }
        ],
        "user_data": {
            "339600": 799,
            "339601": 799
        },
        "start_ts": 1708822800,
        "end_ts": 1713801599,
        "report_type": "day"
    },
    "message": "success"
}

获取实验报告-核心指标概览

说明:用于获取实验报告分组结论概览
请求路径 : /openapi/v3/apps/<app_id>/experiments/<experiment_id>/metric-data
请求方法: POST
请求参数

参数名称

类型

是否必须

描述

备注

metric_id

int

是

指标ID

您可以通过获取指标列表接口获取指标ID。

report_type

string

是

查询类型

时间粒度:天、小时、分钟。

  • 私有化:day/hour/five_minute
  • Saas:只支持day

start_ts

int

是

查询开始时间,UNIX时间戳

默认实验开始时间,不可以早于实验开始时间

end_ts

int

是

查询结束时间,UNIX时间戳

默认当前时间,不可以晚于实验结束时间

dim

string

否

查询数据统计维度,默认为实验组维度

对于客群实验,支持实验和客群维度交叉查询:abversion_usergroup

返回值

参数名称

类型

说明

code

int

接口返回状态,200为成功

message

string

接口返回信息,成功时默认为success

data

object

报告数据,详情请参见下文的报告数据结构说明。

data(报告数据)结构说明

参数名称

参数类型

描述

versions

list[object]

实验版本信息,详情请参见下文的版本信息结构说明。

user_groups

list[object]

客群信息,只有客群实验且包含客群维度时才返回。

version_usergroups

list[object]

客群信息,只有客群实验且dim=abversion_usergroup时才返回。

start_ts

int

查询开始时间,UNIX时间戳

end_ts

int

查询结束时间,UNIX时间戳

available_start_ts

int

可用报告开始时间,UNIX时间戳

说明

当查询的时间范围超出了真实的报告数据产出的时间范围时,调用接口的返回结果为报告有数据的时间范围内的数据,这里的可用报告开始/结束时间,指的是真实返回的报告数据的时间范围。

available_end_ts

int

可用结束时间,UNIX时间戳

confidence_level

int

置信度

metric_id

int

指标ID

distribution

object

统计分布数据

daily_data

object

天级、小时级、5分钟级报告数据

user_data

object

各版本进组人数

版本信息结构说明

参数名称

参数类型

描述

id

int

版本ID

name

string

版本名称

config

object

版本配置信息

type

int

0:对照版本 1:实验版本

weight

int

版本权重,0为均分

disabled

bool

是否禁用

返回示例
成功:

{
    "code": 200,
    "data": {
        "available_start_ts": 1708822800,
        "available_end_ts": 1713801599,
        "start_ts": 1708822800,
        "end_ts": 1713801599,
        "versions": [
            {
                "id": "339600",
                "name": "版本1",
                "config": {
                    "0304": "111"
                },
                "type": 0,
                "weight": 0,
                "disabled": false
            },
            {
                "id": "339601",
                "name": "版本2",
                "config": {
                    "0304": "222"
                },
                "type": 1,
                "weight": 0,
                "disabled": false
            }
        ],
        "confidence_level": 80,
        "metric_id": 99196,
        "distribution": {
            "339600": {
                "339601": {
                    "p": 1,
                    "m": 0.3416771,
                    "change": 0,
                    "change_rate": 0,
                    "conf_interval": [
                        -0.08904,
                        0.08904
                    ],
                    "half_interval": 0.0890367,
                    "confidence": 3,
                    "mean": {
                        "339600": 0.3416771,
                        "339601": 0.3416771
                    },
                    "variance": {
                        "339600": 0.00028152,
                        "339601": 0.00028152
                    },
                    "mde": 0.14750037,
                    "sample_size": {
                        "339600": 799,
                        "339601": 799
                    },
                    "details": {
                        "numerator": 273,
                        "denominator": 799
                    }
                }
            },
            "339601": {
                "339600": {
                    "p": 0,
                    "m": 0.3416771,
                    "change": 0,
                    "change_rate": 0,
                    "conf_interval": [
                        0,
                        0
                    ],
                    "half_interval": 0,
                    "confidence": 3,
                    "mean": {
                        "339600": 0,
                        "339601": 0
                    },
                    "variance": {
                        "339600": 0,
                        "339601": 0
                    },
                    "details": {
                        "numerator": 273,
                        "denominator": 799
                    }
                }
            }
        },
        "daily_data": {
            "2024-03-04": {
                "339600": {
                    "339601": {
                        "p": 1,
                        "m": 0.3416771,
                        "change": 0,
                        "change_rate": 0,
                        "conf_interval": [
                            -0.08904,
                            0.08904
                        ],
                        "half_interval": 0.0890367,
                        "confidence": 3,
                        "mean": {
                            "339600": 0,
                            "339601": 0
                        },
                        "variance": {
                            "339600": 0,
                            "339601": 0
                        },
                        "mde": 0.14750037,
                        "details": {
                            "numerator": 273,
                            "denominator": 799
                        }
                    }
                },
                "339601": {
                    "339600": {
                        "p": 0,
                        "m": 0.3416771,
                        "change": 0,
                        "change_rate": 0,
                        "conf_interval": [
                            0,
                            0
                        ],
                        "half_interval": 0,
                        "confidence": 3,
                        "mean": {
                            "339600": 0,
                            "339601": 0
                        },
                        "variance": {
                            "339600": 0,
                            "339601": 0
                        },
                        "details": {
                            "numerator": 273,
                            "denominator": 799
                        }
                    }
                }
            }
        },
        "boxplot": "The current indicator does not support box plots. Please refer to the explanation below for the specific reason.",
        "user_data": {
            "339600": 799,
            "339601": 799
        }
    },
    "message": "success"
}

包含客群维度的返回示例:

{
    "code": 200,
    "data": {
        "available_start_ts": 1716775273,
        "available_end_ts": 1716998399,
        "start_ts": 1716775273,
        "end_ts": 1716911999,
        "versions": [
            {
                "id": "217",
                "name": "版本1",
                "config": {
                    "zgtest0524": "a"
                },
                "type": 0,
                "weight": 0,
                "disabled": false
            },
            {
                "id": "218",
                "name": "版本2",
                "config": {
                    "zgtest0524": "b"
                },
                "type": 1,
                "weight": 0,
                "disabled": false
            }
        ],
        "confidence_level": 90,
        "metric_id": 10393,
        "distribution": {
            "217_2": {
                "218_1": {
                    "p": 0,
                    "m": 0,
                    "change": 0,
                    "change_rate": 0,
                    "conf_interval": [
                        0,
                        0
                    ],
                    "half_interval": 0,
                    "confidence": 3,
                    "mean": {
                        "217_2": 0,
                        "218_1": 0
                    },
                    "variance": {
                        "217_2": 0,
                        "218_1": 0
                    },
                    "details": {
                        "numerator": 0,
                        "denominator": 0
                    }
                },
                "218_2": {
                    "p": 0,
                    "m": 1.5,
                    "change": 0,
                    "change_rate": 0,
                    "conf_interval": [
                        0,
                        0
                    ],
                    "half_interval": 0,
                    "confidence": 3,
                    "mean": {
                        "217_2": 0,
                        "218_2": 0
                    },
                    "variance": {
                        "217_2": 0,
                        "218_2": 0
                    },
                    "details": {
                        "numerator": 258,
                        "denominator": 172
                    }
                },
                "217_1": {
                    "p": 0,
                    "m": 1.5045,
                    "change": 0,
                    "change_rate": 0,
                    "conf_interval": [
                        0,
                        0
                    ],
                    "half_interval": 0,
                    "confidence": 3,
                    "mean": {
                        "217_2": 0,
                        "217_1": 0
                    },
                    "variance": {
                        "217_2": 0,
                        "217_1": 0
                    },
                    "details": {
                        "numerator": 3009,
                        "denominator": 2000
                    }
                }
            },
            "218_1": {
                "217_2": {
                    "p": 0,
                    "m": 0,
                    "change": 0,
                    "change_rate": 0,
                    "conf_interval": [
                        0,
                        0
                    ],
                    "half_interval": 0,
                    "confidence": 3,
                    "mean": {
                        "218_1": 0,
                        "217_2": 0
                    },
                    "variance": {
                        "218_1": 0,
                        "217_2": 0
                    },
                    "details": {
                        "numerator": 0,
                        "denominator": 0
                    }
                },
                "218_2": {
                    "p": 0,
                    "m": 1.5,
                    "change": 0,
                    "change_rate": 0,
                    "conf_interval": [
                        0,
                        0
                    ],
                    "half_interval": 0,
                    "confidence": 3,
                    "mean": {
                        "218_1": 0,
                        "218_2": 0
                    },
                    "variance": {
                        "218_1": 0,
                        "218_2": 0
                    },
                    "details": {
                        "numerator": 258,
                        "denominator": 172
                    }
                },
                "217_1": {
                    "p": 0,
                    "m": 1.5045,
                    "change": 0,
                    "change_rate": 0,
                    "conf_interval": [
                        0,
                        0
                    ],
                    "half_interval": 0,
                    "confidence": 3,
                    "mean": {
                        "218_1": 0,
                        "217_1": 0
                    },
                    "variance": {
                        "218_1": 0,
                        "217_1": 0
                    },
                    "details": {
                        "numerator": 3009,
                        "denominator": 2000
                    }
                }
            },
            "218_2": {
                "217_2": {
                    "p": 0,
                    "m": 0,
                    "change": 0,
                    "change_rate": 0,
                    "conf_interval": [
                        0,
                        0
                    ],
                    "half_interval": 0,
                    "confidence": 3,
                    "mean": {
                        "218_2": 0,
                        "217_2": 0
                    },
                    "variance": {
                        "218_2": 0,
                        "217_2": 0
                    },
                    "details": {
                        "numerator": 0,
                        "denominator": 0
                    }
                },
                "218_1": {
                    "p": 0,
                    "m": 0,
                    "change": 0,
                    "change_rate": 0,
                    "conf_interval": [
                        0,
                        0
                    ],
                    "half_interval": 0,
                    "confidence": 3,
                    "mean": {
                        "218_2": 0,
                        "218_1": 0
                    },
                    "variance": {
                        "218_2": 0,
                        "218_1": 0
                    },
                    "details": {
                        "numerator": 0,
                        "denominator": 0
                    }
                },
                "217_1": {
                    "p": 0,
                    "m": 1.5045,
                    "change": 0,
                    "change_rate": 0,
                    "conf_interval": [
                        0,
                        0
                    ],
                    "half_interval": 0,
                    "confidence": 3,
                    "mean": {
                        "218_2": 0,
                        "217_1": 0
                    },
                    "variance": {
                        "218_2": 0,
                        "217_1": 0
                    },
                    "details": {
                        "numerator": 3009,
                        "denominator": 2000
                    }
                }
            },
            "217_1": {
                "217_2": {
                    "p": 0,
                    "m": 0,
                    "change": -1.5045,
                    "change_rate": -1.0,
                    "conf_interval": [
                        0,
                        0
                    ],
                    "half_interval": 0,
                    "confidence": 3,
                    "mean": {
                        "217_1": 0,
                        "217_2": 0
                    },
                    "variance": {
                        "217_1": 0,
                        "217_2": 0
                    },
                    "details": {
                        "numerator": 0,
                        "denominator": 0
                    }
                },
                "218_1": {
                    "p": 0,
                    "m": 0,
                    "change": -1.5045,
                    "change_rate": -1.0,
                    "conf_interval": [
                        0,
                        0
                    ],
                    "half_interval": 0,
                    "confidence": 3,
                    "mean": {
                        "217_1": 0,
                        "218_1": 0
                    },
                    "variance": {
                        "217_1": 0,
                        "218_1": 0
                    },
                    "details": {
                        "numerator": 0,
                        "denominator": 0
                    }
                },
                "218_2": {
                    "p": 0.9,
                    "m": 1.5,
                    "change": -0.0045,
                    "change_rate": -0.00299103,
                    "conf_interval": [
                        -0.04927,
                        0.04329
                    ],
                    "half_interval": 0.04628192,
                    "confidence": 3,
                    "mean": {
                        "217_1": 1.5045,
                        "218_2": 1.5
                    },
                    "variance": {
                        "217_1": 0.00012505,
                        "218_2": 0.00146199
                    },
                    "mde": 0.06856722,
                    "sample_size": {
                        "217_1": 2000,
                        "218_2": 172
                    },
                    "details": {
                        "numerator": 258,
                        "denominator": 172
                    }
                }
            }
        },
        "daily_data": {
            "2024-05-27": {
                "217_1": {
                    "217_2": {
                        "p": 0,
                        "m": 0,
                        "change": -1.009,
                        "change_rate": -1.0,
                        "conf_interval": [
                            0,
                            0
                        ],
                        "half_interval": 0,
                        "confidence": 3,
                        "mean": {
                            "217_1": 0,
                            "217_2": 0
                        },
                        "variance": {
                            "217_1": 0,
                            "217_2": 0
                        },
                        "details": {
                            "numerator": 0,
                            "denominator": 0
                        }
                    },
                    "218_1": {
                        "p": 0,
                        "m": 0,
                        "change": -1.009,
                        "change_rate": -1.0,
                        "conf_interval": [
                            0,
                            0
                        ],
                        "half_interval": 0,
                        "confidence": 3,
                        "mean": {
                            "217_1": 0,
                            "218_1": 0
                        },
                        "variance": {
                            "217_1": 0,
                            "218_1": 0
                        },
                        "details": {
                            "numerator": 0,
                            "denominator": 0
                        }
                    },
                    "218_2": {
                        "p": 0.001,
                        "m": 1.5,
                        "change": 0.491,
                        "change_rate": 0.48662042,
                        "conf_interval": [
                            0.44702,
                            0.52622
                        ],
                        "half_interval": 0.03959949,
                        "confidence": 1,
                        "mean": {
                            "217_1": 0,
                            "218_2": 0
                        },
                        "variance": {
                            "217_1": 0,
                            "218_2": 0
                        },
                        "mde": 0.07158988,
                        "details": {
                            "numerator": 258,
                            "denominator": 172
                        }
                    }
                },
                "217_2": {
                    "217_1": {
                        "p": 0,
                        "m": 1.009,
                        "change": 0,
                        "change_rate": 0,
                        "conf_interval": [
                            0,
                            0
                        ],
                        "half_interval": 0,
                        "confidence": 3,
                        "mean": {
                            "217_2": 0,
                            "217_1": 0
                        },
                        "variance": {
                            "217_2": 0,
                            "217_1": 0
                        },
                        "details": {
                            "numerator": 1009,
                            "denominator": 1000
                        }
                    },
                    "218_1": {
                        "p": 0,
                        "m": 0,
                        "change": 0,
                        "change_rate": 0,
                        "conf_interval": [
                            0,
                            0
                        ],
                        "half_interval": 0,
                        "confidence": 3,
                        "mean": {
                            "217_2": 0,
                            "218_1": 0
                        },
                        "variance": {
                            "217_2": 0,
                            "218_1": 0
                        },
                        "details": {
                            "numerator": 0,
                            "denominator": 0
                        }
                    },
                    "218_2": {
                        "p": 0,
                        "m": 1.5,
                        "change": 0,
                        "change_rate": 0,
                        "conf_interval": [
                            0,
                            0
                        ],
                        "half_interval": 0,
                        "confidence": 3,
                        "mean": {
                            "217_2": 0,
                            "218_2": 0
                        },
                        "variance": {
                            "217_2": 0,
                            "218_2": 0
                        },
                        "details": {
                            "numerator": 258,
                            "denominator": 172
                        }
                    }
                },
                "218_1": {
                    "217_1": {
                        "p": 0,
                        "m": 1.009,
                        "change": 0,
                        "change_rate": 0,
                        "conf_interval": [
                            0,
                            0
                        ],
                        "half_interval": 0,
                        "confidence": 3,
                        "mean": {
                            "218_1": 0,
                            "217_1": 0
                        },
                        "variance": {
                            "218_1": 0,
                            "217_1": 0
                        },
                        "details": {
                            "numerator": 1009,
                            "denominator": 1000
                        }
                    },
                    "217_2": {
                        "p": 0,
                        "m": 0,
                        "change": 0,
                        "change_rate": 0,
                        "conf_interval": [
                            0,
                            0
                        ],
                        "half_interval": 0,
                        "confidence": 3,
                        "mean": {
                            "218_1": 0,
                            "217_2": 0
                        },
                        "variance": {
                            "218_1": 0,
                            "217_2": 0
                        },
                        "details": {
                            "numerator": 0,
                            "denominator": 0
                        }
                    },
                    "218_2": {
                        "p": 0,
                        "m": 1.5,
                        "change": 0,
                        "change_rate": 0,
                        "conf_interval": [
                            0,
                            0
                        ],
                        "half_interval": 0,
                        "confidence": 3,
                        "mean": {
                            "218_1": 0,
                            "218_2": 0
                        },
                        "variance": {
                            "218_1": 0,
                            "218_2": 0
                        },
                        "details": {
                            "numerator": 258,
                            "denominator": 172
                        }
                    }
                },
                "218_2": {
                    "217_1": {
                        "p": 0,
                        "m": 1.009,
                        "change": 0,
                        "change_rate": 0,
                        "conf_interval": [
                            0,
                            0
                        ],
                        "half_interval": 0,
                        "confidence": 3,
                        "mean": {
                            "218_2": 0,
                            "217_1": 0
                        },
                        "variance": {
                            "218_2": 0,
                            "217_1": 0
                        },
                        "details": {
                            "numerator": 1009,
                            "denominator": 1000
                        }
                    },
                    "217_2": {
                        "p": 0,
                        "m": 0,
                        "change": 0,
                        "change_rate": 0,
                        "conf_interval": [
                            0,
                            0
                        ],
                        "half_interval": 0,
                        "confidence": 3,
                        "mean": {
                            "218_2": 0,
                            "217_2": 0
                        },
                        "variance": {
                            "218_2": 0,
                            "217_2": 0
                        },
                        "details": {
                            "numerator": 0,
                            "denominator": 0
                        }
                    },
                    "218_1": {
                        "p": 0,
                        "m": 0,
                        "change": 0,
                        "change_rate": 0,
                        "conf_interval": [
                            0,
                            0
                        ],
                        "half_interval": 0,
                        "confidence": 3,
                        "mean": {
                            "218_2": 0,
                            "218_1": 0
                        },
                        "variance": {
                            "218_2": 0,
                            "218_1": 0
                        },
                        "details": {
                            "numerator": 0,
                            "denominator": 0
                        }
                    }
                }
            },
            "2024-05-28": {
                "217_1": {
                    "217_2": {
                        "p": 0,
                        "m": 0,
                        "change": -1.0,
                        "change_rate": -1.0,
                        "conf_interval": [
                            0,
                            0
                        ],
                        "half_interval": 0,
                        "confidence": 3,
                        "mean": {
                            "217_1": 0,
                            "217_2": 0
                        },
                        "variance": {
                            "217_1": 0,
                            "217_2": 0
                        },
                        "details": {
                            "numerator": 0,
                            "denominator": 0
                        }
                    },
                    "218_1": {
                        "p": 0,
                        "m": 0,
                        "change": -1.0,
                        "change_rate": -1.0,
                        "conf_interval": [
                            0,
                            0
                        ],
                        "half_interval": 0,
                        "confidence": 3,
                        "mean": {
                            "217_1": 0,
                            "218_1": 0
                        },
                        "variance": {
                            "217_1": 0,
                            "218_1": 0
                        },
                        "details": {
                            "numerator": 0,
                            "denominator": 0
                        }
                    },
                    "218_2": {
                        "p": 0,
                        "m": 0,
                        "change": -1.0,
                        "change_rate": -1.0,
                        "conf_interval": [
                            0,
                            0
                        ],
                        "half_interval": 0,
                        "confidence": 3,
                        "mean": {
                            "217_1": 0,
                            "218_2": 0
                        },
                        "variance": {
                            "217_1": 0,
                            "218_2": 0
                        },
                        "details": {
                            "numerator": 0,
                            "denominator": 0
                        }
                    }
                },
                "217_2": {
                    "217_1": {
                        "p": 0,
                        "m": 1.0,
                        "change": 0,
                        "change_rate": 0,
                        "conf_interval": [
                            0,
                            0
                        ],
                        "half_interval": 0,
                        "confidence": 3,
                        "mean": {
                            "217_2": 0,
                            "217_1": 0
                        },
                        "variance": {
                            "217_2": 0,
                            "217_1": 0
                        },
                        "details": {
                            "numerator": 2000,
                            "denominator": 2000
                        }
                    },
                    "218_1": {
                        "p": 0,
                        "m": 0,
                        "change": 0,
                        "change_rate": 0,
                        "conf_interval": [
                            0,
                            0
                        ],
                        "half_interval": 0,
                        "confidence": 3,
                        "mean": {
                            "217_2": 0,
                            "218_1": 0
                        },
                        "variance": {
                            "217_2": 0,
                            "218_1": 0
                        },
                        "details": {
                            "numerator": 0,
                            "denominator": 0
                        }
                    },
                    "218_2": {
                        "p": 0,
                        "m": 0,
                        "change": 0,
                        "change_rate": 0,
                        "conf_interval": [
                            0,
                            0
                        ],
                        "half_interval": 0,
                        "confidence": 3,
                        "mean": {
                            "217_2": 0,
                            "218_2": 0
                        },
                        "variance": {
                            "217_2": 0,
                            "218_2": 0
                        },
                        "details": {
                            "numerator": 0,
                            "denominator": 0
                        }
                    }
                },
                "218_1": {
                    "217_1": {
                        "p": 0,
                        "m": 1.0,
                        "change": 0,
                        "change_rate": 0,
                        "conf_interval": [
                            0,
                            0
                        ],
                        "half_interval": 0,
                        "confidence": 3,
                        "mean": {
                            "218_1": 0,
                            "217_1": 0
                        },
                        "variance": {
                            "218_1": 0,
                            "217_1": 0
                        },
                        "details": {
                            "numerator": 2000,
                            "denominator": 2000
                        }
                    },
                    "217_2": {
                        "p": 0,
                        "m": 0,
                        "change": 0,
                        "change_rate": 0,
                        "conf_interval": [
                            0,
                            0
                        ],
                        "half_interval": 0,
                        "confidence": 3,
                        "mean": {
                            "218_1": 0,
                            "217_2": 0
                        },
                        "variance": {
                            "218_1": 0,
                            "217_2": 0
                        },
                        "details": {
                            "numerator": 0,
                            "denominator": 0
                        }
                    },
                    "218_2": {
                        "p": 0,
                        "m": 0,
                        "change": 0,
                        "change_rate": 0,
                        "conf_interval": [
                            0,
                            0
                        ],
                        "half_interval": 0,
                        "confidence": 3,
                        "mean": {
                            "218_1": 0,
                            "218_2": 0
                        },
                        "variance": {
                            "218_1": 0,
                            "218_2": 0
                        },
                        "details": {
                            "numerator": 0,
                            "denominator": 0
                        }
                    }
                },
                "218_2": {
                    "217_1": {
                        "p": 0,
                        "m": 1.0,
                        "change": 0,
                        "change_rate": 0,
                        "conf_interval": [
                            0,
                            0
                        ],
                        "half_interval": 0,
                        "confidence": 3,
                        "mean": {
                            "218_2": 0,
                            "217_1": 0
                        },
                        "variance": {
                            "218_2": 0,
                            "217_1": 0
                        },
                        "details": {
                            "numerator": 2000,
                            "denominator": 2000
                        }
                    },
                    "217_2": {
                        "p": 0,
                        "m": 0,
                        "change": 0,
                        "change_rate": 0,
                        "conf_interval": [
                            0,
                            0
                        ],
                        "half_interval": 0,
                        "confidence": 3,
                        "mean": {
                            "218_2": 0,
                            "217_2": 0
                        },
                        "variance": {
                            "218_2": 0,
                            "217_2": 0
                        },
                        "details": {
                            "numerator": 0,
                            "denominator": 0
                        }
                    },
                    "218_1": {
                        "p": 0,
                        "m": 0,
                        "change": 0,
                        "change_rate": 0,
                        "conf_interval": [
                            0,
                            0
                        ],
                        "half_interval": 0,
                        "confidence": 3,
                        "mean": {
                            "218_2": 0,
                            "218_1": 0
                        },
                        "variance": {
                            "218_2": 0,
                            "218_1": 0
                        },
                        "details": {
                            "numerator": 0,
                            "denominator": 0
                        }
                    }
                }
            }
        },
        "boxplot": "当前指标不支持箱型图,具体原因见下方解读",
        "user_data": {
            "217_1": 2000,
            "217_2": 0,
            "218_1": 0,
            "218_2": 172
        },
        "sql": {
            "user_data": [
                null
            ],
            "distribution_data": [
                null
            ],
            "daily_data": [
                null
            ],
            "boxplot_data": [
                null
            ]
        },
        "user_groups": [
            {
                "id": "1",
                "name": "测试",
                "type": 0
            },
            {
                "id": "2",
                "name": "测试1",
                "type": 1
            }
        ],
        "version_usergroups": [
            {
                "id": "217_1",
                "name": "版本1_测试"
            },
            {
                "id": "217_2",
                "name": "版本1_测试1"
            },
            {
                "id": "218_1",
                "name": "版本2_测试"
            },
            {
                "id": "218_2",
                "name": "版本2_测试1"
            }
        ]
    },
    "message": "success"
}

失败情况说明:

失败情况

Response

超出查询范围:

  • 小时级:最近2日。从第1日的00点开始。
  • 分钟级:当前日。从当前日的00开始。
{
    "code": 204,
    "data": null,
    "message": "起止时间不在实验运行有效时间范围内"
}

实验第一天运行时,要查询天级数据,因天级数据是T+1的,所以此时会报错

{
    "code": 301,
    "data": null,
    "message": "实验报告类型错误"
}

获取MAB实验获胜率

说明:获取MAB智能调优实验的各版本获胜概率
请求路径:/openapi/v3/apps/<app_id>/experiments/<experiment_id>/mab-probability
请求方法:GET
返回值

参数名称

类型

说明

code

int

接口返回状态,200为成功

message

string

接口返回信息,成功时默认为success

data

object

报表数据,详情见下文的报表数据说明。

报表数据说明

参数名称

类型

说明

versions

list of object

各实验版本基本信息,详情见下文的实验版本基本信息。

probs

list of object

各实验版本获胜概率,详情见下文的实验版本获胜概率。

实验版本基本信息

参数名称

类型

说明

id

int

版本ID

name

string

版本名称

type

int

版本类型,0:对照组,1:实验组

is_mab

int

是否为mab实验版本,0:否,1:是

实验版本获胜概率

参数名称

类型

说明

version_id

int

版本ID

probability_to_beat_all

float

获胜概率,取值范围0-1

返回示例

{
    "code": 200,
    "data": {
        "versions": [
            {
                "id": "251",
                "name": "版本1",
                "type": 0,
                "is_mab": 0,
            },
            {
                "id": "252",
                "name": "版本2",
                "type": 1,
                "is_mab": 0,
            },
            {
                "id": "253",
                "name": "版本3",
                "type": 1,
                "is_mab": 0,
            },
                        {
                "id": "254",
                "name": "版本1-mab",
                "type": 0,
                "is_mab": 1,
            },
            {
                "id": "255",
                "name": "版本2-mab",
                "type": 1,
                "is_mab": 1,
            },
            {
                "id": "256",
                "name": "版本3-mab",
                "type": 1,
                "is_mab": 1,
            }
        ],
        "probs": [
            {
                "version_id": "251",
                "probability_to_beat_all": 0.0,
            },
            {
                "version_id": "252",
                "probability_to_beat_all": 0.85939893
            },
            {
                "version_id": "253",
                "probability_to_beat_all": 0.14060107
            }
        ],
    },
    "message": "success"
}

重随机任务信息查询

说明:​根据重随机任务ID,查询重随机任务详情
路径:/openapi/v3/apps/{app_id}/rehashes/{rehash_id}
请求方法:GET
返回值

参数名称

类型

说明

code

int

接口返回状态,200为成功

message

string

接口返回信息,成功时默认为success

data

object

接口返回的实验信息

data信息

参数名称

类型

描述

cohorts

list

分群信息,结构同提交参数

└ p_value

float

统计p值

metrics

list

指标信息,结构同提交参数

└ p_value

float

统计p值

start_ts

int

开始时间

end_ts

int

结束时间

launch_times

int

尝试次数

statistic_type

string

统计类型

threshold_value

float

统计阈值

optimal_result

object

任务结果

└ rehash_id

int

重随机任务ID

└ status

int

重随机任务状态:

  • INITIALIZED = 99, "初始化"
  • RUNNING = 0, "运行中"
  • SUCCESS = 1, "成功"
  • FAILURE = 2, "失败"
  • ADOPTED = 3, "已采用"
  • DEPRECATED = 5, "已取消"

└ fail_reason

string

失败原因

└ best_hash_seed

string

最优种子

└ metric_target

object

指标重随机任务结果

└ cohort_target

object

分群重随机任务结果

重随机任务状态修改接口(取消/重试/采用)

说明:​分页获取APP下的指标列表,增加支持置信度计算的指标的过滤参数
路径:/openapi/v3/apps/{app_id}/rehashes/{rehash_id}
请求方法:​PATCH
请求参数

参数名称

类型

说明

status

int

目标状态:5-放弃重随机 4-重试 3-采用

返回值

参数名称

类型

说明

code

int

接口返回状态,200为成功

message

string

接口返回信息,成功时默认为success

data

object

接口返回的实验信息

data信息

参数名称

类型

描述

rehash_id

int

重随机任务ID

original_status

int

原来的状态,状态信息枚举:

  • RUNNING = 0, "运行中"
  • SUCCESS = 1, "成功"
  • FAILURE = 2, "失败"
  • ADOPTED = 3, "已采用"
  • DEPRECATED = 5, "已取消"

new_status

int

更新后的状态,状态信息枚举:

  • RUNNING = 0, "运行中"
  • SUCCESS = 1, "成功"
  • FAILURE = 2, "失败"
  • ADOPTED = 3, "已采用"
  • DEPRECATED = 5, "已取消"

互斥域/互斥域组接口

公共响应结构

参数名

类型

说明

code

Integer

业务状态码。200 表示成功。

message

String

响应信息。成功时通常为 success。

data

Object / Array / Integer / Null

接口返回数据,不同接口结构不同。

公共枚举

字段

取值

说明

endpoint_type

0

客户端层。

endpoint_type

1

服务端层。

获取互斥域流量层

说明:分页获取APP下互斥组的流量层
请求路径:/openapi/v3/apps/<app_id>/layers
请求方法:GET
请求参数

参数名

位置

类型

是否必填

说明

app_id

Path

Integer

是

应用 ID。

domain_id

Query

Integer

否

只查询某个互斥域下绑定的层。

domain_group_id

Query

Integer

否

只查询某个互斥域组下绑定的层。

keyword

Query

string

否

查询关键字,可以根据名称或描述模糊查询。

endpoint_type

Query

Integerint

否

互斥组的端类型。0为客户端层,1为服务端层。

page

Query

Integerint

否

查询页码。默认为1

page_size

Query

Integerint

否

每页数量,默认为99。

响应参数

参数名

类型

说明

data.layers

Array

互斥层列表。

data.layers[].id

Integer

互斥层 ID。

data.layers[].name

String

互斥层名称。

data.layers[].description

String

互斥层描述。

data.layers[].endpoint_type

Integer

端类型。0为客户端层,1为服务端层。

data.layers[].domain_id

Integer / Null

层绑定的互斥域 ID。未绑定时为空。

data.layers[].domain_group_id

Integer / Null

层所属互斥域组 ID。未绑定互斥域时为空。

data.layers[].available_traffic

Float

层当前可用流量。

data.page.current_page

Integer

当前页码。

data.page.total_pages

Integer

总页数。

data.page.total_items

Integer

总条数。

请求示例

GET /datatester/openapi/v3/apps/20000930/layers?endpoint_type=1&domain_id=456

响应示例

{
  "code": 200,
  "message": "success",
  "data": {
    "layers": [
      {
        "id": 1001,
        "name": "域 A 层",
        "description": "created by openapi",
        "endpoint_type": 1,
        "domain_id": 456,
        "domain_group_id": 123,
        "available_traffic": 0.9
      }
    ],
    "page": {
      "current_page": 1,
      "total_pages": 1,
      "total_items": 1
    }
  }
}

互斥域创建流量层

说明:互斥域创建流量层
请求路径:/openapi/v3/apps/<app_id>/layers
请求方法:POST
请求参数

参数名称

位置

类型

是否必须

说明

app_id

Path

Integer

是

应用 ID。

name

Body

String

是

互斥层名称。同一应用下不可重复。

endpoint_type

Body

Integer

是

端类型。0 为客户端层,1 为服务端层。

description

Body

String

否

互斥层描述。

domain_id

Body

Integer

否

互斥域 ID。传入时服务端校验互斥域存在、未删除、属于当前应用,且端类型与 endpoint_type 一致。

响应参数

参数名称

类型

说明

data

Integer

创建成功的互斥层 ID。

请求示例

{
  "name": "域 A 层",
  "description": "created by openapi",
  "endpoint_type": 1,
  "domain_id": 456
}

响应示例

{
  "code": 200,
  "message": "success",
  "data": 1001
}

获取互斥域组列表

说明:获取互斥域组列表数据,包括互斥域组名称、端类型、域组下绑定的互斥层总数等信息。
路径:/openapi/v3/apps/{app_id}/domain-groups
请求方法:GET
请求参数

参数名

位置

类型

是否必填

说明

app_id

Path

Integer

是

应用 ID。

endpoint_type

Query

Integer

否

端类型。0 为客户端层,1 为服务端层。

响应参数

参数名

类型

说明

data.domain_group

Array

互斥域组列表。

data.domain_group[].id

Integer

互斥域组 ID。

data.domain_group[].name

String

互斥域组名称。

data.domain_group[].endpoint_type

Integer

端类型。0 为客户端层,1 为服务端层。

data.domain_group[].total_layer_count

Integer

域组下绑定的互斥层总数。

data.domain_group[].total_domain_count

Integer

域组下互斥域数量。

请求示例

GET /datatester/openapi/v3/apps/20000930/domain-groups?endpoint_type=1

响应示例

{
  "code": 200,
  "message": "success",
  "data": {
    "domain_group": [
      {
        "id": 123,
        "name": "服务端域组",
        "endpoint_type": 1,
        "total_layer_count": 2,
        "total_domain_count": 2
      }
    ]
  }
}

创建互斥域组

说明:指定应用 ID、互斥域组名称、端类型等信息创建互斥域组。
路径:/openapi/v3/apps/{app_id}/domain-groups
请求方法:POST
请求参数

参数名

位置

类型

是否必填

说明

app_id

Path

Integer

是

应用 ID。

name

Body

String

是

互斥域组名称。

endpoint_type

Body

Integer

是

端类型。0 为客户端层,1 为服务端层。

domain_list

Body

Array

是

互斥域列表,至少包含两个互斥域。

domain_list[].name

Body

String

是

互斥域名称。

domain_list[].traffic

Body

Float

是

互斥域流量比例,示例 0.5 表示 50%。

domain_list[].layer_ids

Body

Array

是

绑定到该互斥域的互斥层 ID 列表。空数组表示不绑定层。

domain_list[].domain_group_ids

Body

Array

是

绑定到该互斥域的子互斥域组 ID 列表。空数组表示不绑定子域组。

注意

请求参数仅支持以上字段,不支持传入其他字段。

响应参数

参数名

类型

说明

data

Integer

创建成功的互斥域组 ID。

请求示例

{
  "name": "服务端域组",
  "endpoint_type": 1,
  "domain_list": [
    {
      "name": "域 A",
      "traffic": 0.5,
      "layer_ids": [1001],
      "domain_group_ids": []
    },
    {
      "name": "域 B",
      "traffic": 0.5,
      "layer_ids": [],
      "domain_group_ids": [2001]
    }
  ]
}

响应示例

{
  "code": 200,
  "message": "success",
  "data": 123
}

复制互斥域组

说明:基于源互斥域组复制一个新的互斥域组,需设置复制后的互斥域组名称。
路径:/openapi/v3/apps/{app_id}/domain-groups
请求方法:POST
请求参数

参数名

位置

类型

是否必填

说明

app_id

Path

Integer

是

应用 ID。

origin_id

Body

Integer

是

被复制的源互斥域组 ID。

name

Body

String

是

复制后互斥域组名称。

响应参数

参数名

类型

说明

data

Integer

复制成功后新的互斥域组 ID。

请求示例

{
  "origin_id": 123,
  "name": "服务端域组-copy"
}

响应示例

{
  "code": 200,
  "message": "success",
  "data": 124
}

获取互斥域组详情

说明:查询互斥域组的详细信息,包括名称、端类型、域组下的互斥域列表、互斥域信息等。
路径:/openapi/v3/apps/{app_id}/domain-groups/{domain_group_id}
请求方法:GET
请求参数

参数名

位置

类型

是否必填

说明

app_id

Path

Integer

是

应用 ID。

domain_group_id

Path

Integer

是

互斥域组 ID。

响应参数

参数名

类型

说明

data.id

Integer

互斥域组 ID。

data.name

String

互斥域组名称。

data.endpoint_type

Integer

端类型。0 为客户端层,1 为服务端层。

data.domain_list

Array

域组下的互斥域列表。

data.domain_list[].id

Integer

互斥域 ID。

data.domain_list[].name

String

互斥域名称。

data.domain_list[].traffic

Float

互斥域流量比例。

data.domain_list[].layer_ids

Array

该域下绑定的互斥层 ID 列表。

data.domain_list[].domain_group_ids

Array

该域下绑定的子互斥域组 ID 列表。

响应示例

{
  "code": 200,
  "message": "success",
  "data": {
    "id": 123,
    "name": "服务端域组",
    "endpoint_type": 1,
    "domain_list": [
      {
        "id": 456,
        "name": "域 A",
        "traffic": 0.5,
        "layer_ids": [1001],
        "domain_group_ids": []
      }
    ]
  }
}

编辑互斥域组

说明:编辑指定互斥域组的名称、互斥域列表、绑定的互斥层等信息。

注意

编辑使用全量替换语义:传入的 domain_list 是完整域列表;某个域传空 layer_ids 或 domain_group_ids 表示解绑对应对象。

路径:/openapi/v3/apps/{app_id}/domain-groups/{domain_group_id}
请求方法:PUT
请求参数

参数名

位置

类型

是否必填

说明

app_id

Path

Integer

是

应用 ID。

domain_group_id

Path

Integer

是

互斥域组 ID。

name

Body

String

是

互斥域组名称。

domain_list

Body

Array

是

完整互斥域列表,至少包含两个互斥域。

domain_list[].id

Body

Integer

否

已有互斥域 ID。新增域不传。

domain_list[].name

Body

String

是

互斥域名称。

domain_list[].traffic

Body

Float

是

互斥域流量比例。

domain_list[].layer_ids

Body

Array

是

该域绑定的互斥层 ID 列表。

domain_list[].domain_group_ids

Body

Array

是

该域绑定的子互斥域组 ID 列表。

注意

请求参数仅支持以上字段,不支持传入其他字段。

响应参数

参数名

类型

说明

data

Integer

编辑成功后的互斥域组 ID。

请求示例

{
  "name": "服务端域组-v2",
  "domain_list": [
    {
      "id": 456,
      "name": "域 A",
      "traffic": 0.4,
      "layer_ids": [1001],
      "domain_group_ids": []
    },
    {
      "name": "域 C",
      "traffic": 0.6,
      "layer_ids": [],
      "domain_group_ids": [2001]
    }
  ]
}

响应示例

{
  "code": 200,
  "message": "success",
  "data": 123
}

删除互斥域组

说明:删除指定互斥域组。删除后不可恢复,请谨慎操作。
路径:/openapi/v3/apps/{app_id}/domain-groups/{domain_group_id}
请求方法:DELETE
请求参数

参数名

位置

类型

是否必填

说明

app_id

Path

Integer

是

应用 ID。

domain_group_id

Path

Integer

是

互斥域组 ID。

响应参数

参数名

类型

说明

data

Integer

成功被删除的互斥域组 ID。

响应示例

{
  "code": 200,
  "message": "success",
  "data": 123
}

获取可绑定子互斥域组列表

说明:用于编辑互斥域时选择可绑定到某个互斥域下的子互斥域组。接口会排除自身、已形成非法嵌套链路的域组,并可按端类型过滤。
路径:/openapi/v3/apps/{app_id}/domain-groups/bind-list
请求方法:GET
请求参数

参数名

位置

类型

是否必填

说明

app_id

Path

Integer

是

应用 ID。

endpoint_type

Query

Integer

否

端类型。0 为客户端层,1 为服务端层。

domain_group_id

Query

Integer

否

当前正在编辑的互斥域组 ID。传入后会排除自身和非法父子链路。

响应参数

参数名

类型

说明

data

Array

可绑定的互斥域组列表。

data[].id

Integer

互斥域组 ID。

data[].name

String

互斥域组名称。

data[].endpoint_type

Integer

端类型。

data[].total_layer_count

Integer

域组下绑定的互斥层总数。

data[].total_domain_count

Integer

域组下互斥域数量。

响应示例

{
  "code": 200,
  "message": "success",
  "data": [
    {
      "id": 2001,
      "name": "可绑定子域组",
      "endpoint_type": 1,
      "total_layer_count": 0,
      "total_domain_count": 2
    }
  ]
}

解绑子互斥域组

说明:解绑子互斥域组。
路径:/openapi/v3/apps/{app_id}/domain-groups/unbind
请求方法:POST
请求参数

参数名

位置

类型

是否必填

说明

app_id

Path

Integer

是

应用 ID。

domain_group_id

Body

Integer

是

待解绑的子互斥域组 ID。

请求示例

{
  "domain_group_id": 2001
}

响应示例

{
  "code": 200,
  "message": "success",
  "data": null
}

五. 业务错误码说明

返回消息体里的code详细的定义

错误码

含义

200

成功

403

对请求的资源(app、实验等)无权限

404

请求的资源不存在,如查询了不存在的实验ID或指标ID

410

请求的资源已被删除

40000

缺少必填参数

40001

参数值错误

40003

对请求的接口无访问权限

40010

调用过于频繁(超过每秒调用次数限制)

40011

超过每天调用次数限制

60001

DSL格式错误

60002

指标有已关联实验,无法删除

60010

流量不足,无法创建实验

60011

实验的endpoint_type与所属互斥组不一致

60012

测试中实验无法被结束

60013

草稿态实验不可被openAPI查询或修改

最近更新时间:2026.06.17 16:46:23
这个页面对您有帮助吗?
有用
有用
无用
无用