Необходимо реализовать rate-limiter (алгоритм fixed window) для web api в .net core приложении.
Настройки:
- количество одновременных запросов
- период времени
задаются глобально для всего приложения, при этом есть возможность:
- переопределить параметры на методах в контроллере;
- задать индивидуальные настройки для потребителей.
Клиенты идентифицируются по IP. В случае превышения лимита, клиент должен получить HTTP ошибку 429.
*** Настройки лимитов желательно хранить не в памяти сервиса, а в отдельном внешнем хранилище (например, в БД). В случае внешнего хранения не забыть про то, что внешние системы бывают недоступны и это не повод для сервиса работать совсем без каких-либо лимитов.
Реализация задания со звёздочкой *** - возможность получить синий кристалл. Обязательное условие - приложение не нужно перезагружать, чтобы применились новые настройки лимитов. Cрок сдачи ДЗ - четверг, 16 июня, 16:00
Алгоритм rate-limiting fixed window (реализован в RateLimitMiddleware).
В файле appsettings.json проекта Route256.RateLimiter.Demo указаны тестовые ограничения - общие и индивидуальные по IP.
Проект Route256.RateLimiter.Tests содержит Unit тесты для проверки ограничений, в том числе заданных в контроллере.