Ограничение на количество новых соединений
«Дадата» использует систему защиты от сетевых атак. В числе прочих мер, она запрещает создавать более 60 новых сетевых соединений в минуту.
Что это вообще значит
Когда ваша программа обращается к «Дадате», она создаёт сетевое соединение. Обычно программы не создают всё новые и новые соединения, а используют ограниченное количество уже созданных. У этого подхода есть разные названия — HTTP persistent connection, keepalive, «пул соединений» — но суть одна и та же: программа переиспользует сетевые соединения, а не создаёт новые на каждый запрос.
Создание большого количества сетевых соединений — типичное поведение злоумышленников, которые атакуют облачные сервисы. Поэтому система защиты «Дадаты» следит, чтобы количество новых соединений с каждого IP-адреса не превышало 60 в минуту.
Ограничение никак не связано с количеством запросов в секунду. Представим две ситуации:
- Программа выполняет 20 запросов в секунду, используя всего одно соединение.
- Программа выполняет 100 запросов в минуту, создавая новое соединение на каждый запрос.
У первой программы не возникнет проблем с новым ограничением, несмотря на большое количество запросов. А у второй — возникнет.
Как это отразится на вас
Если вы не используете API «Дадаты» и не проксируете запросы к «Дадате» через свой сервер — никак не отразится, дальше можно не читать.
Если ваша программа переиспользует сетевые соединения — тоже никак не отразится. Повторное использование сетевых соединений считается хорошим тоном среди разработчиков. Большинство платформ (Java, .NET, Python) используют его по умолчанию. С большой вероятностью, ваша интеграция работает так же, поэтому ничего делать не придётся.
Но если ваша программа создаёт отдельное сетевое соединение на каждый запрос (чаще всего этим «грешат» программы на PHP), и вы делаете более 60 запросов в минуту — интеграция не будет нормально работать.
Как изменить программу, чтобы она не создавала новые соединения
Если используете PHP — возьмите нашу библиотеку, создайте один раз объект DadataClient и переиспользуйте его — так новые соединения не будут создаваться. Если это невозможно — проксируйте запросы через nginx, настроив его для повторного использования соединений.
Если работаете с другим языком программирования — почитайте документацию библиотеки, которую используете для работы с HTTP. Там точно это есть.
Сервис поддержки клиентов работает на платформе UserEcho