You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否在WSO2 API-Manager中为API配置工作日/时段调用限制?

在WSO2 API-Manager中实现API工作日/时段调用限制

完全可以实现这类调用限制,主要有两种常用方案:


方案一:使用内置时间范围节流策略

WSO2 APIM自带的节流机制支持按时间窗口和星期几设置调用规则,操作步骤如下:

  1. 登录API Publisher,打开目标API的「Manage」标签页,进入「Throttling Policies」栏目
  2. 新建自定义节流策略,在配置项中找到时间范围设置:
    • 指定允许调用的时段(比如9:00-18:00)
    • 勾选允许调用的星期(周一至周五)
  3. 将该策略绑定到整个API或特定API资源上,非指定时间/日期的请求会被自动拦截并返回节流错误。

方案二:自定义调解脚本实现复杂规则

如果需要更灵活的控制(比如排除节假日、设置特殊时段例外),可以编写Synapse调解脚本,在请求进入API前做时间校验:

  1. 进入API Publisher的「Runtime Configurations」->「Mediation Policies」,添加自定义入流调解脚本
  2. 脚本核心逻辑是获取当前系统时间,判断是否在允许的时段和工作日内,不符合则返回403禁止访问。

示例脚本片段:

<!-- 获取当前星期和小时 -->
<property name="currentDay" expression="get-property('SYSTEM_DATE', 'E')"/>
<property name="currentHour" expression="get-property('SYSTEM_DATE', 'H')"/>

<!-- 判断是否为工作日 -->
<filter source="$ctx:currentDay" regex="Mon|Tue|Wed|Thu|Fri">
    <then>
        <!-- 判断是否在工作时段(9:00-18:00,小时范围9-17) -->
        <filter source="$ctx:currentHour" regex="([9-17])">
            <then>
                <!-- 允许请求继续流转 -->
            </then>
            <else>
                <!-- 返回时段不允许的错误 -->
                <respond>
                    <payloadFactory media-type="json">
                        <format>{"error":"API仅在工作日9:00-18:00开放调用"}</format>
                    </payloadFactory>
                    <property name="HTTP_SC" value="403"/>
                </respond>
            </else>
        </filter>
    </then>
    <else>
        <!-- 返回非工作日不允许的错误 -->
        <respond>
            <payloadFactory media-type="json">
                <format>{"error":"API仅在工作日开放调用"}</format>
            </payloadFactory>
            <property name="HTTP_SC" value="403"/>
        </respond>
    </else>
</filter>

注意事项

  • 内置节流策略的时间基于APIM服务器的系统时区,需确保服务器时区配置与业务需求一致
  • 自定义调解脚本可根据实际需求扩展,比如添加节假日判断逻辑

内容的提问来源于stack exchange,提问作者Ehsan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 04:10:38