# 动态计费规则说明
# api示例
路径
https://apigate.glodon.com/send/email/priority/{priority}?mode=xxx
request body
{
"to":["xxx","xxx"]
}
2
3
response body
{
"code":"success",
"message":null,
"data":{
"cost":"xxx",
"size":"xxx"
}
}
2
3
4
5
6
7
8
# 请求成功标识说明 (非必填)
如请求成功标识为空, aecore 则默认使用http code 200 作为请求成功标识
若有特殊需求,请以JsonPath方式输入请求成功标识
例:对于上述api示例我们定义如下成功标识
$.code=success
aecore将仅对http code为200且response code为success的请求做计量
2
3
# 计费表达式说明
动态计费区别于固定计费(按调用次数计费),是通过接口调用参数的不同实现动态,因此设置动态计费规则,需要经历一下几个阶段:
# 一、考虑并确定动态计费因素
动态计费的因素多种多样,常见的例如参数的大小、范围、个数、及字符串映射等...。具体因素由各个SP根据业务需求定制
例:对于上述api示例我们从如下几个方面考虑
1、接口访问的优先级
我们希望调用高优先级的接口计费3个点,中优先级的计费2个点,低优先级的计费1个点
2、短信发送模式
我们希望调用接口在模式3下计费3个点,在模式2下计费2个点,在模式1下计费1个点
3、收件人的个数
我们希望根据收件人的个数确定计费点,每个收件人1个点
2
3
4
5
6
7
8
# 二、将计费因素转化成参数设置
参数设置分为以下5个步骤:
1、确定参数的来源:(REQUEST or RESPONSE)
2、确定参数的位置:对于来源于REQUEST的参数,位置可以是QUERY, PATH, HEADER, FORM_BODY, JSON_BODY;对于来源于RESPONSE的参数,位置一定是JSON_BODY
3、填写变量的名称,对于变量位置为非JSON_BODY的变量,直接输入变量名即可,需要注意的是如果变量的位置为JSON_BODY的话,变量的名称需要输入JsonPath表达式,JsonPath表达式的详细示例如下:
给定如下 Json 数据
{
"store": {
"book": [
{
"category": "reference",
"author": "Nigel Rees",
"title": "Sayings of the Century",
"price": 8.95
},
{
"category": "fiction",
"author": "Evelyn Waugh",
"title": "Sword of Honour",
"price": 12.99
},
{
"category": "fiction",
"author": "Herman Melville",
"title": "Moby Dick",
"isbn": "0-553-21311-3",
"price": 8.99
},
{
"category": "fiction",
"author": "J. R. R. Tolkien",
"title": "The Lord of the Rings",
"isbn": "0-395-19395-8",
"price": 22.99
}
],
"bicycle": {
"color": "red",
"price": 19.95
}
},
"expensive": 10
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
JsonPath表达式 | 取值结果 |
---|---|
$.store.book[*].author | 所有书的作者集合 |
$..author | 所有作者集合 |
$.store.* | 所有东西,包括书和自行车 |
$.store..price | 所有东西的价格 |
$..book[2] | 第三本书 |
$..book[-2] | 倒数第二本书 |
$..book[0,1] | 前两本书 |
$..book[:2] | 从数组下标为0(包括0)开始到数组下标为2(不包括2)的书 |
$..book[1:2] | 从数组下标为1(包括1)开始到数组下标为2(不包括2)的书 |
$..book[-2:] | 最后两本书 |
$..book[2:] | 从尾部开始第二本书 |
$..book[?(@.isbn)] | 所有包含ISBN号的书 |
$.store.book[?(@.price < 10)] | 所有价格小于10的书 |
$..book[?(@.price <= $['expensive'])] | 价格小于'expense'的书 |
$..book[?(@.author =~ /.*REES/i)] | 所有符合正在表达式的书 |
$..* | all |
$..book.length() | 书的数量 |
4、选择变量的取值方式:(字面量、映射、数组长度)。如果变量的取值方式为映射的话,还需要自定义映射值
5、给参数取个别名
例:对于上述api示例的参数我们做如下设置
1、对于接口访问的优先级(别名var1)
该参数来源于REQUEST,位于PATH,变量名为priority,而变量请求值可能为(high、medium、low),变量取值方式为映射;所以我们需要自定义映射值为:
{
"high":"3",
"medium":"2",
"low":"1"
}
同时我们设置该参数的别名为var1;
2、对于短信发送模式(别名var2)
该参数来源于REQUEST,位于QUERY,变量名为mode,而变量请求值为int,变量取值方式字面量;同时我们设置该参数的别名为var2;
3、对于收件人的个数(别名var3)
该参数来源于REQUEST,位于JSON_BODY,因此变量名需要符合JsonPath,变量名称定义为($.to)而变量请求值为数组,我们按数组长度计费,变量取值方式为数组长度;同时我们设置该参数的别名为var3;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 三、根据参数的别名构建计费表达式
计费表达式是按参数别名做数学运算
目前支持以下运算符
数学运算符 | 描述 |
---|---|
+ | 加法运算 |
- | 减法运算 |
* | 乘法运算 |
/ | 除法运算 |
% | 取余运算 |
^ | 幂运算 |
布尔运算符 | 描述 |
---|---|
=、== | 是否相等 |
!=、<> | 是否不相等 |
<、<= | 小于等于 |
>、>= | 大于等于 |
&& | 与 |
|| | 或 |
例:对于上述api示例的计费表达式我们定义如下
var1+var2+0.5*var3
在上述计费规则下,对于实际参数情况如下的请求
https://apigate.glodon.com/send/email/priority/high?mode=2
请求体
{
"to":["18918748378","18323389749"]
}
根据动态计费规则,var1=3(高优先 high 对应的映射值是3), var2=2 (取字面量的值为2),var3=2(参数to对应的数组长度为2)
最后计费表达式为 var1+var2+0.5*var3=6,所以,对于此次请求计费6个点!!!
2
3
4
5
6
7
8
9
10
11
← 接入说明 自定义计量DEMO示例 →