首页 文章

使用Azure API Management创建公共API

提问于
浏览
0

我使用Azure API Management来管理Azure中的Web应用程序 .
但是,我想公开我的一些API,并且不希望用户订阅这些API .
未订阅的用户每分钟只能拨打10个电话 .
我创建了一个没有任何密钥的新订阅,并添加了速率限制策略(每分钟10个呼叫),但是,当我在10秒内进行10次调用时,我得到了429个状态代码,这是非常了解的 .
但是在相同的持续时间(一分钟)内,如果我从不同的设备调用相同的API,我仍然会获得429状态代码 .
从第二个设备,用户必须能够访问API,因为它根本没有访问过API .
如何在Azure API Management中实现这一目标 .

1 回答

  • 1

    通过阅读以下文档,我找到了解决方案 .

    https://github.com/MicrosoftDocs/azure-docs/blob/master/articles/api-management/api-management-sample-flexible-throttling.md

    <rate-limit-by-key  calls="10"
              renewal-period="60"
              counter-key="@(context.Request.IpAddress)" />
    
    <quota-by-key calls="1000000"
              bandwidth="10000"
              renewal-period="2629800"
              counter-key="@(context.Request.IpAddress)" />
    

    然而,它发生了奇怪的事情 .
    我在API Management中设置了 renewal-period="60" .
    当我使用第一个设备(通过wifi连接)发出请求(10个请求,大约10秒)时,我得到429状态代码,消息为 "message": "Rate limit is exceeded. Try again in 34 seconds."

    但是,当我使用第二个设备(通过蜂窝网络连接的移动电话)发出请求(大约10秒内有10个请求)时,我应该收到一条消息,指示在50或60秒内重试 .
    我在第二台设备上得到的是以下内容:
    "message": "Rate limit is exceeded. Try again in 24 seconds."
    这有点奇怪,因为时间表示第一个设备的更新时间 .

相关问题