Прочитать на английском

Регулирование запросов к API

Завершено

Обычно некоторые пользователи используют API. Иногда API используется в такой степени, что вы несете дополнительные затраты или что скорость реагирования на других пользователей снижается. Для защиты конечных точек API можно использовать регулирование (ограничение скорости), ограничив количество вызовов API в течение указанного периода.

Например, к API Census имеет доступ множество государственных организаций, поэтому количество вызовов API может быть весьма существенным. Применяя политику ограничения скорости, мы можем включить быстрый ответ на все запросы, чтобы один клиент не мог использовать все ресурсы для API переписи.

В этом уроке вы узнаете, как использовать политики Управление API для применения двух типов регулирования.

Регулирование по подписке

Регулирование по подписке позволяет задать ограничения частоты вызовов для определенных операций API. Он не дискриминирует клиента. Все запросы к API или операции регулируются одинаково. Используя пример API переписи, мы можем использовать регулирование подписки, чтобы ограничить количество вызовов api в течение определенного периода. По достижении ограничения клиенты будут получать ошибку 429. Проблема такого регулирования заключается в том, что один клиент может израсходовать все допустимое количество запросов.

Например, следующий код демонстрирует пример конфигурации, которая применяется ко всем операциям API. Ограничение равно трем вызовам за 15 секунд.

XML
<rate-limit calls="3" renewal-period="15" />

Такую конфигурацию можно также применить к определенной операции API:

XML
<rate-limit calls="number" renewal-period="seconds">
    <api name="API name" id="API id" calls="number" renewal-period="seconds" />
        <operation name="operation name" id="operation id" calls="number" renewal-period="seconds" />
    </api>
</rate-limit>

Регулирование по ключу

Регулирование по ключу позволяет задать разные ограничения частоты вызовов по любому значению в запросе клиента. Такое регулирование расширяет возможности управления ограничениями частоты вызовов, так как ограничение применяется к определенному ключу в запросе, которым часто является IP-адрес клиента. Каждый клиент получает одинаковую пропускную способность для вызова API.

XML
<rate-limit-by-key calls="number"
                   renewal-period="seconds"
                   increment-condition="condition"
                   counter-key="key value" />

В следующем примере конфигурация ограничивает ограничение скорости по IP-адресу запроса. Здесь ограничение равно 10 вызовам в 60 секунд:

XML
<rate-limit-by-key calls="10"
              renewal-period="60"
              increment-condition="@(context.Response.StatusCode == 200)"
              counter-key="@(context.Request.IpAddress)"/>

При выборе регулирования по ключу необходимо решить конкретные требования к ограничению скорости. Например, в таблице ниже представлены три основных способа указания counter-key.

значение Описание
context.Request.IpAddress Частота вызовов ограничивается по IP-адресу клиента.
context.Subscription.Id Частота вызовов ограничивается по идентификатору подписки.
context.Request.Headers.GetValue("My-Custom-Header-Value") Частота вызовов ограничивается по определенному значению в заголовке запроса клиента.

Вы можете решить, что для IP-адреса каждого клиента нужно задать собственную пропускную способность. В этом случае следует использовать значение context.Request.IpAddress. Вам также может понадобиться регулировать запросы от доменных имен, так как некоторые домены совершают слишком много вызовов API. В этом случае необходимо задать значение context.Request.Headers.GetValue("host").

Примечание

Политика <rate-limit-by-key> недоступна, если шлюз Управление API находится на уровне потребления. Вместо этого можно использовать <rate-limit>.