能否在WSO2 API-Manager中为API配置工作日/时段调用限制?
在WSO2 API-Manager中实现API工作日/时段调用限制
完全可以实现这类调用限制,主要有两种常用方案:
方案一:使用内置时间范围节流策略
WSO2 APIM自带的节流机制支持按时间窗口和星期几设置调用规则,操作步骤如下:
- 登录API Publisher,打开目标API的「Manage」标签页,进入「Throttling Policies」栏目
- 新建自定义节流策略,在配置项中找到时间范围设置:
- 指定允许调用的时段(比如9:00-18:00)
- 勾选允许调用的星期(周一至周五)
- 将该策略绑定到整个API或特定API资源上,非指定时间/日期的请求会被自动拦截并返回节流错误。
方案二:自定义调解脚本实现复杂规则
如果需要更灵活的控制(比如排除节假日、设置特殊时段例外),可以编写Synapse调解脚本,在请求进入API前做时间校验:
- 进入API Publisher的「Runtime Configurations」->「Mediation Policies」,添加自定义入流调解脚本
- 脚本核心逻辑是获取当前系统时间,判断是否在允许的时段和工作日内,不符合则返回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
相关产品推荐
相关产品推荐

