# 动态计费规则说明

# api示例

路径

https://apigate.glodon.com/send/email/priority/{priority}?mode=xxx

request body

{
	"to":["xxx","xxx"]
}
1
2
3

response body

{
	"code":"success",
	"message":null,
	"data":{
		"cost":"xxx",
		"size":"xxx"
	}
}
1
2
3
4
5
6
7
8

# 请求成功标识说明 (非必填)

如请求成功标识为空, aecore 则默认使用http code 200 作为请求成功标识

若有特殊需求,请以JsonPath方式输入请求成功标识

例:对于上述api示例我们定义如下成功标识

$.code=success

aecore将仅对http code为200且response code为success的请求做计量
1
2
3

# 计费表达式说明

动态计费区别于固定计费(按调用次数计费),是通过接口调用参数的不同实现动态,因此设置动态计费规则,需要经历一下几个阶段:

# 一、考虑并确定动态计费因素

动态计费的因素多种多样,常见的例如参数的大小、范围、个数、及字符串映射等...。具体因素由各个SP根据业务需求定制

例:对于上述api示例我们从如下几个方面考虑

1、接口访问的优先级
	我们希望调用高优先级的接口计费3个点,中优先级的计费2个点,低优先级的计费1个点
	
2、短信发送模式
	我们希望调用接口在模式3下计费3个点,在模式2下计费2个点,在模式1下计费1个点
	
3、收件人的个数
	我们希望根据收件人的个数确定计费点,每个收件人1个点
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
}                
1
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;
	
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 三、根据参数的别名构建计费表达式

计费表达式是按参数别名做数学运算

目前支持以下运算符

数学运算符 描述
+ 加法运算
- 减法运算
* 乘法运算
/ 除法运算
% 取余运算
^ 幂运算
布尔运算符 描述
=、== 是否相等
!=、<> 是否不相等
<、<= 小于等于
>、>= 大于等于
&&
||

例:对于上述api示例的计费表达式我们定义如下

var1+var2+0.5*var3
1
在上述计费规则下,对于实际参数情况如下的请求
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个点!!!
1
2
3
4
5
6
7
8
9
10
11
Last Updated: 10/30/2020, 3:08:06 AM
  • 在线客服

  • 意见反馈