APISIX limit-count 支持在指定的时间范围内,限制总的请求次数,并且在 HTTP 响应头中返回剩余可以请求的次数。
在此基础上,ds-limit-count 支持:
名称 | 类型 | 必选项 | 默认值 | 有效值 | 描述 |
---|---|---|---|---|---|
count | integer | 必须 | count > 0 | 指定时间窗口内的请求数量阈值 | |
time_window | integer | 必须 | time_window > 0 | 时间窗口的大小(以秒为单位),超过这个时间就会重置 | |
consumer_map | array | 可选 | Consumer 列表,配置多个 Consumer 不同的请求次数上限,包含 consumer_name , count , time_window ,如果没有匹配到消费者,则使用默认的"count" |
||
exclude_match | array | 可选 | 不计算请求次数的匹配条件,每个条件包含 key 和 regex , key 支持 $status 和 response header(eg: content-type 、server 或者一些自定义的响应头) |
||
rejected_code | integer | 可选 | 503 | [200,...,599] | 当请求超过阈值被拒绝时,返回的 HTTP 状态码 |
rejected_msg | string | 可选 | 非空 | 当请求超过阈值被拒绝时,返回的响应体。 | |
policy | string | 可选 | "local" | ["local", "redis", "redis-cluster"] | 用于检索和增加限制的速率限制策略。目前仅支持"redis" |
allow_degradation | boolean | 可选 | false | 当限流插件功能临时不可用时(例如,Redis 超时)是否允许请求继续。当值设置为 true 时则自动允许请求继续,默认值是 false。 | |
show_limit_quota_header | boolean | 可选 | true | 是否在响应头中显示 X-RateLimit-Limit 和 X-RateLimit-Remaining (限制的总请求数和剩余还可以发送的请求数),默认值是 true。 |
|
redis_host | string | redis 必须 |
当使用 redis 限速策略时,该属性是 Redis 服务节点的地址。 |
||
redis_port | integer | 可选 | 6379 | [1,...] | 当使用 redis 限速策略时,该属性是 Redis 服务节点的端口 |
redis_database | integer | 可选 | 0 | redis_database >= 0 | 当使用 redis 限速策略时,该属性是 Redis 服务节点中使用的 database,并且只针对非 Redis 集群模式(单实例模式或者提供单入口的 Redis 公有云服务)生效。 |
在 API 路由的插件列表启用 ds-limit-count,配置 json 内容即可
{
"disable": false,
"count": 30,
"time_window":86400,
"consumer_map": [
{
"consumer_name": "aaa",
"count":20,
"time_window":86400
}
],
"exclude_match": [
{
"key": "$status",
"regex": "^404|500|502|503$"
},
{
"key": "content-type",
"regex": "^300$"
}
],
"policy": "redis",
"redis_database":0,
"redis_host": "127.0.0.1",
"redis_port":6379,
"show_limit_quota_header": true
}
本插件用于对请求进行改写,提供 request, response 的默认值设置、字段添加、映射、删除能力。
请求改写逻辑共包含 3 个阶段:removal,mapping,additions,顺序为:
过滤掉配置的指定字段。
根据配置的规则进行字段映射。
将自定义配置的 Key 和 Value 添加到转换后的请求中。
名称 | 类型 | 必选项 | 默认值 | 有效值 | 描述 |
---|---|---|---|---|---|
disable | boolean |
是 | false | 是否禁用 request 重写,默认不禁用 | |
addtions | object |
是 | 自定义配置的 Key 和 Value(Key 支持嵌套),会添加到转换后的 request 中。如果 request 中已经有同名的字段,则不会覆盖;如果没有,则会添加。如果需要指定属性的默认值,也在这里指定" | ||
mappingRule | string |
是 | spec | 配置默认的 mapping 规则,可选值为 all 和 spec。all 表示不在 removal 的都默认进行映射,spec 表示只有在 mappings 里的才进行映射。如果需要在 response 生成对应的 data.meta.parameters 信息,则这个模式只能选 spec;默认为 spec | |
mappings | object |
是 | 字段映射规则,key 是转换前的属性名你,value 是转换后的属性名 | ||
removals | array |
是 | 需要去掉的字段的 key(string) list,如果不配置就不清除 |
如果不需要对 request 进行改写,应配置:
"requestConfig": {
"disable": true
}
名称 | 类型 | 必选项 | 默认值 | 有效值 | 描述 |
---|---|---|---|---|---|
disable | boolean |
是 | false | 是否禁用 response 重写,默认不禁用 | |
addtions | object |
是 | 自定义配置的 Key 和 Value(Key 支持嵌套),会添加到转换后的 response 中。如果 response 中已经有同名的字段,则不会覆盖;如果没有,则会添加。如果需要指定属性的默认值,也在这里指定" | ||
mappingRule | string |
是 | spec | 配置默认的 mapping 规则,可选值为 all 和 spec。all 表示不在 removal 的都默认进行映射,spec 表示只有在 mappings 里的才进行映射。如果需要在 response 生成对应的 data.meta.parameters 信息,则这个模式只能选 spec;默认为 spec | |
mappings | object |
是 | 字段映射规则,key 是转换前的属性名你,value 是转换后的属性名 | ||
removals | array |
是 | 需要去掉的字段的 key(string) list,如果不配置就不清除 |
如果不需要对 response 进行改写,应配置:
"responseConfig": {
"disable": true
}
在 API 路由的插件列表启用 ds-common-adapter,配置 json 内容即可
{
"requestConfig": {
"additions": {
"document.data.Domain": "天美游戏",
"document.language": "EN",
"workflow": [
"TRIPLE_NEW"
]
},
"disable": false,
"mappingRule": "spec",
"mappings": {
"currentPage": "page",
"filter.dimensions": "metrics.dimensions",
"filters.brandId": "filters.brandId",
"filters.brandName": "filters.brandName",
"filters.categoryId": "filters.categoryId",
"filters.categoryIds": "filters.categoryIds",
"pageSize": "pageSize",
"sort": "metrics.sort"
},
"removalLeoExpAll": true
},
"responseConfig": {
"additions": {
"data.meta.datasetType": "list"
},
"disable": false,
"mappingConfig": {},
"mappingRule": "spec",
"mappings": {
"code": "code",
"data.dataset": "data.dataset.list",
"data.dataset.page": "data.dataset.currentPage",
"data.dataset.pageSize": "data.dataset.pageSize",
"data.total": "data.dataset.total",
"success": "success"
},
"removals": [
"data.time",
"openStrategy",
"msg"
]
}
}
本插件基于 ds-common-adapter 提供的 request, response 的默认值设置、字段添加、映射、删除能力,增加支持对 xdp agg(透视表) 格式的适配
请求改写逻辑同样共包含 3 个阶段:removal,mapping,additions,顺序为:
过滤掉配置的指定字段。
根据配置的规则进行字段映射。
将自定义配置的 Key 和 Value 添加到转换后的请求中。
名称 | 类型 | 必选项 | 默认值 | 有效值 | 描述 |
---|---|---|---|---|---|
disable | boolean |
是 | false | 是否禁用 request 重写,默认不禁用 | |
addtions | object |
是 | 自定义配置的 Key 和 Value(Key 支持嵌套),会添加到转换后的 request 中。如果 request 中已经有同名的字段,则不会覆盖;如果没有,则会添加。如果需要指定属性的默认值,也在这里指定" | ||
mappingRule | string |
是 | spec | 配置默认的 mapping 规则,可选值为 all 和 spec。all 表示不在 removal 的都默认进行映射,spec 表示只有在 mappings 里的才进行映射。如果需要在 response 生成对应的 data.meta.parameters 信息,则这个模式只能选 spec;默认为 spec | |
mappings | object |
是 | 字段映射规则,key 是转换前的属性名你,value 是转换后的属性名 | ||
removals | array |
是 | 需要去掉的字段的 key(string) list,如果不配置就不清除 | ||
removalLeoExpAll | boolean |
是 | false | 是否移除 filter 里面值为 ['{EXP}'','ALL'] 的字段。xdp 组件筛选条件里会携带 ['{EXP}'','ALL'] 这样的第三方接口无法识别的字段,需要进行移除 |
名称 | 类型 | 必选项 | 默认值 | 有效值 | 描述 |
---|---|---|---|---|---|
disable | boolean |
是 | false | 是否禁用 response 重写,默认不禁用 | |
addtions | object |
是 | 自定义配置的 Key 和 Value(Key 支持嵌套),会添加到转换后的 response 中。如果 response 中已经有同名的字段,则不会覆盖;如果没有,则会添加。如果需要指定属性的默认值,也在这里指定" | ||
mappingRule | string |
是 | spec | 配置默认的 mapping 规则,可选值为 all 和 spec。all 表示不在 removal 的都默认进行映射,spec 表示只有在 mappings 里的才进行映射。如果需要在 response 生成对应的 data.meta.parameters 信息,则这个模式只能选 spec;默认为 spec | |
mappings | object |
是 | 字段映射规则,key 是转换前的属性名你,value 是转换后的属性名 | ||
removals | array |
是 | 需要去掉的字段的 key(string) list,如果不配置就不清除 |
配置用于 xdp agg(透视表) 格式的映射相关规则。
名称 | 类型 | 必选项 | 默认值 | 有效值 | 描述 |
---|---|---|---|---|---|
hiddenKey | array |
是 | 需要隐藏的 key List | ||
datasetKeys | array |
是 | 用于 agg 格式的列索引 | ||
datasetHeaders | array |
是 | 用于 agg 格式的表头名称,系统会将配置的 datasetKeys 按顺序映射为 datasetHeaders 配置的名称 |
配置用于 xdp agg(透视表) 格式的行、列、值相关规则。
名称 | 类型 | 必选项 | 默认值 | 描述 | |
---|---|---|---|---|---|
rows | key | string | 是 | 字段key。如果 response 使用了 key 映射,那么该 key 是映射后的 key | |
sort | string | 是 | 设置该字段参与排序,ASC:升序,DESC:降序 | ||
rank | integer | 是 | 99 | 设置该字段排序的优先级,多字段排序时按小到大的字段顺序来排序 | |
columns | key | string | 是 | 字段key。如果 response 使用了 key 映射,那么该 key 是映射后的 key | |
sort | string | 是 | 设置该字段参与排序,ASC:升序,DESC:降序 | ||
rank | integer | 是 | 99 | 设置该字段排序的优先级,多字段排序时按小到大的字段顺序来排序 | |
values | key | string | 是 | 字段key。如果 response 使用了 key 映射,那么该 key 是映射后的 key | |
sort | string | 是 | 设置该字段参与排序,ASC:升序,DESC:降序 | ||
rank | integer | 是 | 99 | 设置该字段排序的优先级,多字段排序时按小到大的字段顺序来排序 | |
calc | string | 是 | COUNT | 透视集合的计算方式。COUNT:记录数、DISTINCT:记录数去重、SUM:求和、MAX:最大值、MIN:最小值、AVG:平均值、STD:总体标准差、SD:总体方差 | |
post | string | 是 | 透视数据按行或者列计算百分比。PERCENT_BY_COL:按列计算百分比、PERCENT_BY_ROW:按行计算百分比 |
在 API 路由的插件列表启用 xdp-ecommerce-adapter,配置 json 内容即可
{
"disable": false,
"requestConfig": {
"additions": {
"filters.brandName": "小米",
"filters.publishDate": {
"end": 1656518400000,
"start": 1654012800000
},
"page": 1,
"pageSize": 5
},
"disable": false,
"mappingRule": "spec",
"mappings": {
"currentPage": "page",
"filters.brandId": "filters.brandId",
"filters.brandName": "filters.brandName",
"filters.categoryId": "filters.categoryId",
"filters.categoryName": "filters.categoryName",
"filters.commodityId": "filters.commodityId",
"filters.commodityName": "filters.commodityName",
"filters.date": "filters.publishDate",
"filters.itemId": "filters.itemId",
"filters.keyword": "filters.keyword",
"filters.shopName": "filters.shopName",
"filters.siteId": "filters.siteId",
"filters.siteIds": "filters.siteIds",
"filters.skuId": "filters.skuId",
"filters.spCategoryName": "filters.spCategoryName",
"filters.title": "filters.title",
"filters.trendName": "filters.trendName",
"filters.trendType": "filters.trendType",
"order": "metrics.order",
"pageSize": "pageSize",
"sort": "metrics.sort"
},
"removalLeoExpAll": true
},
"responseConfig": {
"additions": {
"data.meta.datasetType": "list",
"data.meta.dimensions": {
"headers": [
"brandId",
"brandName",
"categoryId",
"categoryName",
"commodityName",
"keyword",
"commentPictures",
"content",
"itemId",
"itemTitle",
"itemUrl",
"keywords",
"publishTimestamp",
"score",
"shopId",
"shopName",
"siteId",
"siteIds",
"siteName",
"skuId",
"userItemId",
"userName",
"trendType",
"trendName",
"order",
"sort"
]
},
"data.meta.fieldsInfo": [
{
"fieldAlias": "品牌ID",
"fieldIsArray": 0,
"fieldName": "brandId",
"fieldType": "string"
},
{
"fieldAlias": "品牌",
"fieldIsArray": 0,
"fieldName": "brandName",
"fieldType": "string"
},
{
"fieldAlias": "品类ID",
"fieldIsArray": 0,
"fieldName": "categoryId",
"fieldType": "string"
},
{
"fieldAlias": "品类名",
"fieldIsArray": 0,
"fieldName": "categoryName",
"fieldType": "string"
},
{
"fieldAlias": "评论图片",
"fieldIsArray": 1,
"fieldName": "commentPictures",
"fieldType": "string"
},
{
"fieldAlias": "评论内容",
"fieldIsArray": 0,
"fieldName": "content",
"fieldType": "string"
},
{
"fieldAlias": "评论itemId",
"fieldIsArray": 0,
"fieldName": "itemId",
"fieldType": "string"
},
{
"fieldAlias": "itemId",
"fieldIsArray": 0,
"fieldName": "itemId",
"fieldType": "string"
},
{
"fieldAlias": "commodityName",
"fieldIsArray": 0,
"fieldName": "commodityName",
"fieldType": "string"
},
{
"fieldAlias": "keyword",
"fieldIsArray": 0,
"fieldName": "keyword",
"fieldType": "string"
},
{
"fieldAlias": "商品标题",
"fieldIsArray": 0,
"fieldName": "itemTitle",
"fieldType": "string"
},
{
"fieldAlias": "商品url",
"fieldIsArray": 0,
"fieldName": "itemUrl",
"fieldType": "string"
},
{
"fieldAlias": "评论内容关键词",
"fieldIsArray": 1,
"fieldName": "keywords",
"fieldType": "string"
},
{
"fieldAlias": "发表时间",
"fieldIsArray": 0,
"fieldName": "publishTimestamp",
"fieldType": "date"
},
{
"fieldAlias": "评分",
"fieldIsArray": 0,
"fieldName": "score",
"fieldType": "string"
},
{
"fieldAlias": "店铺id",
"fieldIsArray": 0,
"fieldName": "shopId",
"fieldType": "string"
},
{
"fieldAlias": "店铺名称",
"fieldIsArray": 0,
"fieldName": "shopName",
"fieldType": "string"
},
{
"fieldAlias": "站点id",
"fieldIsArray": 0,
"fieldName": "siteId",
"fieldType": "string"
},
{
"fieldAlias": "siteIds",
"fieldIsArray": 1,
"fieldName": "siteIds",
"fieldType": "array"
},
{
"fieldAlias": "站点名称",
"fieldIsArray": 0,
"fieldName": "siteName",
"fieldType": "string"
},
{
"fieldAlias": "商品唯一Id",
"fieldIsArray": 0,
"fieldName": "skuId",
"fieldType": "string"
},
{
"fieldAlias": "评论作者itemId",
"fieldIsArray": 0,
"fieldName": "userItemId",
"fieldType": "string"
},
{
"fieldAlias": "评论作者名称",
"fieldIsArray": 0,
"fieldName": "userName",
"fieldType": "string"
},
{
"fieldAlias": "日期",
"fieldIsArray": 0,
"fieldName": "date",
"fieldType": "date"
},
{
"fieldAlias": "trendType",
"fieldIsArray": 0,
"fieldName": "trendType",
"fieldType": "string"
},
{
"fieldAlias": "trendName",
"fieldIsArray": 0,
"fieldName": "trendName",
"fieldType": "string"
}
],
"data.meta.parameters": []
},
"disable": false,
"mappingConfig": {},
"mappingRule": "spec",
"mappings": {
"code": "code",
"data.dataset": "data.dataset.list",
"data.page": "data.dataset.currentPage",
"data.pageSize": "data.dataset.pageSize",
"data.total": "data.dataset.total",
"success": "success"
},
"removals": [
"data.time",
"openStrategy",
"msg"
]
}
}
proxy-cache 不能缓存其他插件对响应的处理结果,例如 ds-common-adapter、xdp-ecommerce-adapter,需要换为使用 ds-proxy-cache 插件实现对响应结果的缓存
产品咨询
020-38061725
微信扫描二维码在线咨询