远程配置提供了一套基于标准OpenAPI定义的SDK,可将该SDK直接集成至业务代码中,方便调用远程配置的接口和进行单元测试。配置方式如下:
<dependency>
<groupId>com.alibaba.emas</groupId>
<artifactId>emas-openapi-sdk-orange</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
settings.xml
文件中设置
<servers>
<server>
<id>emas-public</id>
<username>username</username> <!-- 请向EMAS管理员获取用户名和密码 -->
<password><![CDATA[password]]></password>
</server>
</servers>
工程的pom.xml
文件中设置
<repositories>
<repository>
<id>emas-public</id>
<url>http://nexus-ce.emas-poc.com/repository/maven-public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
在添加了emas-openapi-sdk-orange
的maven依赖之后,在应用的业务类中就可以使用api了。远程配置OpenAPI的调用都是通过OrangeApi对象进行的。直接在需要引入OpenAPI的代码中构造OrangeApi即可。示例:
private OrangeApi orangeApi = new OrangeApi();
在调用接口前,需构造ApiClient对象,并设置basePath、accessKey、secret的值。其中,bathPath是调用接口的访问路径。accesskey、secret是接口鉴权的必传参数。具体值在调用前向Emas管理员索取。示例:
public ApiClient getApiClient(){
ApiClient apiClient = new ApiClient();
apiClient.setBasePath("http://xxx");
apiClient.setAccessKey("xxx");
apiClient.setSecret("xxx");
return apiClient;
}
新增基础配置
名称 | 类型 | 描述 | 是否必传 |
---|---|---|---|
appKey | String | appKey | 是 |
name | String | 配置名称(由a-z,A-Z,数字,下划线组成,长度为4-64个字符) | 是 |
type | ConfigType | 配置类型(枚举) | 是 |
loadLevel | LoadLevel | 加载级别(枚举) | 是 |
owners | List<String> | 管理员Id(至少2名管理员) | 是 |
creatorId | String | 创建人Id | 是 |
detail | String | 配置描述 | 否 |
{"success":true}
根据创建人Id查询其创建的所有基础配置信息
名称 | 类型 | 描述 | 是否必传 |
---|---|---|---|
creatorId | String | 创建人Id | 是 |
{
"success": true,
"model": {
"appKey": "20000299",
"appName": "unknown",
"configs": [{
"id": "5c078af4f3ea40ef6092b544",
"name": "zhikui_test",
"appKey": "20000299",
"appName": "unknown",
"type": "STANDARD",
"detail": "测试用",
"loadLevel": "DEFAULT",
"owners": [{
"id": "10052",
"realName": "owner1",
"email": "owner1@alibaba-inc.com"
},
{
"id": "10085",
"realName": "owner2",
"email": "owner2@alibaba-inc.com"
}
],
"createTime": "2018-12-05T16:23:16+08:00",
"creator": "10052",
"available": true
}]
}
}
根据appKey查询所有基础配置信息
名称 | 类型 | 描述 | 是否必传 |
---|---|---|---|
appKey | String | appKey | 是 |
{
"success": true,
"model": {
"appKey": "20000299",
"appName": "unknown",
"configs": [{
"id": "5c078af4f3ea40ef6092b544",
"name": "zhikui_test",
"appKey": "20000299",
"appName": "unknown",
"type": "STANDARD",
"detail": "测试用",
"loadLevel": "DEFAULT",
"owners": [{
"id": "10052",
"realName": "owner1",
"email": "owner1@alibaba-inc.com"
},
{
"id": "10085",
"realName": "owner2",
"email": "owner2@alibaba-inc.com"
}
],
"createTime": "2018-12-05T16:23:16+08:00",
"creator": "10052",
"available": true
}]
}
}
编辑基础配置、新增场景、编辑场景、删除场景、场景顺序调整、配置下线
由于所有变更请求都统一调用该方法,为了更好地说明参数是否必传,对所有变更进行编号,例如编辑基础配置编号为01,针对参数是否必传按照变更编号进行描述。
名称 | 类型 | 描述 | 是否必传 |
---|---|---|---|
configId | String | 配置Id | 是 |
creatorId | String | 创建人Id(创建人必须是其中一个管理员) | 是 |
basicChange | ConfigBasicUpdateEntity | 基础配置变更实体 | 01 必传 |
caseChanges | List<CaseChangeEntity> | 场景变更详情 | 02 03 04 05 必传 |
名称 | 类型 | 描述 | 是否必传 |
---|---|---|---|
type | ConfigType | 配置类型(枚举) | 否 |
detail | String | 配置描述 | 否 |
loadLevel | LoadLevel | 加载级别(枚举) | 否 |
owners | List<String> | 管理员Id(至少2名管理员) | 否 |
available | Boolean | 是否下线标识 | 06 必传 |
名称 | 类型 | 描述 | 是否必传 |
---|---|---|---|
caseId | String | 场景Id | 03 04 05必传 |
name | String | 场景名称(不可编辑) | 02 必传 |
action | ChangeActionType | 操作类型(枚举) | 02 03 04 05必传 |
payload | CasePayloadEntity | 场景配置实体 | 02 03 05必传 |
名称 | 类型 | 描述 | 是否必传 |
---|---|---|---|
content | String | 场景下的配置内容,格式为key=value | 02必传 |
condition | List<CaseConditionEntity> | 条件匹配实体列表 | 否 |
gray | Integer | 灰度比例 | 否 (默认值为100,只能传入大于等于1小于等于100的整数) |
条件匹配实体如果传入参数则需要将key、opr、val一起传入,不传则默认匹配所有条件。
名称 | 类型 | 描述 | 是否必传 |
---|---|---|---|
key | String | 条件定key | 否 |
opr | String | 操作 | 否 |
val | String | 条件定义value | 否 |
匹配条件说明:非自定义条件的key与opr的取值请遵循下列规则
key | opr | key描述 | opr描述 |
---|---|---|---|
os_ver | = > < >= <= != | 操作系统版本 | 大于 等于 小于 大于等于 小于等于 不等于 |
app_ver | = > < >= <= != | app版本 | 大于 等于 小于 大于等于 小于等于 不等于 |
m_brand | = != | 厂商 | 等于 不等于 |
m_model | = != | 机型 | 等于 不等于 |
自定义条件的opr取值只能为 =或!=
编辑基础配置
{"success":true,"model":{"status":"NO_REVIEW"}}
新增场景
{"success":true,"model":{"changeId":"5c34950c4b0b7d0009239f22","status":"NO_REVIEW"}}
编辑场景
{"success":true,"model":{"changeId":"5c34950c4b0b7d0009239f22","status":"NO_REVIEW"}}
删除场景
{"success":true,"model":{"changeId":"5c347be04b0b7d0009239f14 ","status":"NO_REVIEW"}}
场景顺序调整
{"success":true,"model":{"changeId":"5c3483214b0b7d0009239f18 ","status":"NO_REVIEW"}}
配置下线
{"success":true,"model":{"changeId":"5c3496c64b0b7d0009239f25","status":"NO_REVIEW"}}
根据基础配置Id查询场景信息
名称 | 类型 | 描述 | 是否必传 |
---|---|---|---|
configId | String | 配置Id | 是 |
{
"success": true,
"model": {
"id": "5c174d109f3fe70009e89f67",
"name": "test44444",
"appKey": "20000328",
"appName": "跨平台测试",
"type": "STANDARD",
"loadLevel": "HIGH",
"owners": [{
"id": "10007",
"realName": "tester1",
"email": "test@alibaba-inc.com"
}, {
"id": "10061",
"realName": "tester2",
"email": "test11@alibaba-inc.com"
}],
"createTime": "2018-12-17T15:15:28+08:00",
"creator": "10007",
"available": true,
"cases": [{
"id": "5c1a24909f3fe70009e89f79",
"name": "scenario1",
"content": "param=222",
"gray": 100,
"condition": [{
"key": "ANY"
}]
}]
}
}
变更配置查询(包括基础配置变更和场景变更)
名称 | 类型 | 描述 | 是否必传 |
---|---|---|---|
appKey | String | appKey | 是 |
configName | String | 配置名称 | 否 |
createFrom | String | 起始时间 | 否 |
createTo | String | 结束时间 | 否 |
pageNum | String | 分页数 | 否 |
pageSize | String | 每页显示个数 | 否 |
status | String | 变更审核状态 | 否 |
{
"success": true,
"model": {
"items": [{
"changeDetail": {
"id": "5c349b924b0b7d0009239f29",
"configId": "5c321dce8bf6e60009b2d393",
"changePayload": {
"configId": "5c321dce8bf6e60009b2d393",
"caseChanges": [{
"caseId": "",
"name": "zhikui_test",
"action": "ADD",
"payload": {
"content": "test=1111",
"condition": [{
"key": "ANY"
}],
"gray": 100
}
}]
},
"createTime": "2019-01-08T20:46:10+08:00",
"reviewTime": "2019-01-08T20:46:10+08:00",
"creator": {
"id": "10007",
"realName": "tester1",
"email": "test@alibaba-inc.com"
},
"operator": {
"id": "10007",
"realName": "tester1",
"email": "test@alibaba-inc.com"
},
"status": "NO_REVIEW"
},
"currentBasic": {
"id": "5c321dce8bf6e60009b2d393",
"name": "zhikui_test",
"appKey": "20000340",
"appName": "测试",
"type": "STANDARD",
"loadLevel": "HIGH",
"owners": [{
"id": "10007",
"realName": "owners1",
"email": "owners1@alibaba-inc.com"
}, {
"id": "10061",
"realName": "owners2",
"email": "owners2@alibaba-inc.com"
}],
"available": true
}
}],
"pageNum": 1,
"pageSize": 10,
"total": 1
}
}
配置类型
STANDARD
(value: "STANDARD"
)CUSTOM
(value: "CUSTOM"
)加载级别
DEFAULT
(value: "DEFAULT"
)HIGH
(value: "HIGH"
)操作类型
UPDATE
(value: "UPDATE"
)DEL
(value: "DEL"
)ADD
(value: "ADD"
)NO_CHANGE
(value: "NO_CHANGE"
)以下DEMO示例以新增基础配置为例
/**
*
*
* 新增基础配置。
*
* @throws ApiException
* if the Api call fails
*/
@Test
public void configsPostTest() throws ApiException {
ConfigBasicAddEntityExt body = new ConfigBasicAddEntityExt();
body.setAppKey("10000201");
body.setLoadLevel(LoadLevel.HIGH);
body.setName("222213sss2323r");
List<String> owners = new ArrayList<>();
owners.add("10007");
owners.add("10061");
body.setOwners(owners);
body.setType(ConfigType.STANDARD);
body.setCreatorId("10061");
api.setApiClient(getApiClient());
WebResult response = api.configsPost(body);
System.out.println(response.getErrorCode()+"_"+response.getMessage()+"_"+ response.isSuccess());
}
public ApiClient getApiClient() {
ApiClient apiClient = new ApiClient();
apiClient.setBasePath("http://xxx");
apiClient.setAccessKey("xxx");
apiClient.setSecret("xxx");
return apiClient;
}
SDK中包含对远程配置OpenAPI调用的单元测试类,如需进行单元测试,直接在应用中构造OrangeApiTest即可。示例:
private OrangeApiTest orangeApiTest = new OrangeApiTest();
在文档使用中是否遇到以下问题
更多建议
匿名提交