Logo
    立即注册
    开放平台
    产品文档
    插件配置
    最近更新时间:2023-02-02 13:57:59

    ds-limit-count

    描述

    APISIX limit-count 支持在指定的时间范围内,限制总的请求次数,并且在 HTTP 响应头中返回剩余可以请求的次数。

    在此基础上,ds-limit-count 支持:

    1. 配置规则(exclude_match),过滤部分请求(不计入请求次数)
    2. 对同一个 API 路由的多个调用凭证(Consumer)配置不同的时间和请求次数上限

    参数

    名称 类型 必选项 默认值 有效值 描述
    count integer 必须 count > 0 指定时间窗口内的请求数量阈值
    time_window integer 必须 time_window > 0 时间窗口的大小(以秒为单位),超过这个时间就会重置
    consumer_map array 可选 Consumer 列表,配置多个 Consumer 不同的请求次数上限,包含 consumer_name , count , time_window ,如果没有匹配到消费者,则使用默认的"count"
    exclude_match array 可选 不计算请求次数的匹配条件,每个条件包含 keyregexkey 支持 $status 和 response header(eg: content-typeserver或者一些自定义的响应头)
    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-LimitX-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 内容即可

    file

    示例

    {
      "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
    }

    ds-common-adapter

    1. 描述

    本插件用于对请求进行改写,提供 request, response 的默认值设置、字段添加、映射、删除能力。

    请求改写逻辑共包含 3 个阶段:removal,mapping,additions,顺序为:

    1. removal:过滤掉配置的指定字段。
    2. mapping:根据配置的规则进行字段映射。
    3. additions:将自定义配置的 Key 和 Value 添加到转换后的请求中。

    2. 参数

    2.1 requestConfig

    名称 类型 必选项 默认值 有效值 描述
    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
      }

    2.2 responseConfig

    名称 类型 必选项 默认值 有效值 描述
    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 内容即可

    file

    示例

    {
          "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"
            ]
          }
    }

    xdp-ecommerce-adapter

    1. 描述

    本插件基于 ds-common-adapter 提供的 request, response 的默认值设置、字段添加、映射、删除能力,增加支持对 xdp agg(透视表) 格式的适配

    请求改写逻辑同样共包含 3 个阶段:removal,mapping,additions,顺序为:

    1. removal:过滤掉配置的指定字段。
    2. mapping:根据配置的规则进行字段映射。
    3. additions:将自定义配置的 Key 和 Value 添加到转换后的请求中。

    2. 参数

    2.1 requestConfig

    名称 类型 必选项 默认值 有效值 描述
    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'] 这样的第三方接口无法识别的字段,需要进行移除

    2.2 responseConfig

    名称 类型 必选项 默认值 有效值 描述
    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,如果不配置就不清除

    2.2.1 mappingConfig

    配置用于 xdp agg(透视表) 格式的映射相关规则。

    名称 类型 必选项 默认值 有效值 描述
    hiddenKey array 需要隐藏的 key List
    datasetKeys array 用于 agg 格式的列索引
    datasetHeaders array 用于 agg 格式的表头名称,系统会将配置的 datasetKeys 按顺序映射为 datasetHeaders 配置的名称

    2.2.2 pivot

    配置用于 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:按行计算百分比

    3. 使用

    在 API 路由的插件列表启用 xdp-ecommerce-adapter,配置 json 内容即可

    file

    4. 示例

    {
          "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 插件实现对响应结果的缓存

    微信扫描二维码在线咨询