1. Вказання версії в API-запитах до ЦБД

2. Обробка авторизації та обмежень

2.1. Використання та обробка токену доступу

Майданчик отримує токен доступу, який є сталим протягом усього періоду інтеграції (Токен майданчика не змінюється за виключенням специфічних ситуацій, про які обовʼязково відбувається окрема комунікація).

Права доступу (permissions) для виконання окремих дій визначаються на рівні самого токену та можуть бути змінені у будь-який момент (маючи обгрунтування) зі сторони Prozorro.Sale.

Усі запити до API мають супроводжуватись актуальним токеном, а система майданчика має бути здатна гнучко реагувати на зміну прав доступу без необхідності оновлення самого токену.

2.2. Дотримання обмежень на кількість запитів (Rate Limits)

Майданчик має дотримуватись обмежень на кількість запитів до API, які реалізовано за допомогою механізму rate limiting у NGINX.

У випадку отримання відповіді з кодом 429 Too Many Requests, клієнт має:

Поточні налаштування рейт-лімітів


Що це таке і навіщо?

Обмеження частоти запитів (rate limit) — це один з основних інструментів захисту вебресурсів від DDoS-атак.

У випадку взаємодії з системою, цей механізм також допомагає контролювати навантаження та запобігати збоїв у роботі через помилки або некоректну поведінку клієнтів системи.

Мета використання рейт-лімітів

У зв'язку з постійними змінами у роботі системи та програмного забезпечення майданчиків, можуть виникати ситуації, коли через помилкові дії або збій сторонніх сервісів генерується надмірна кількість запитів до системи.

Щоб запобігти перевантаженню нової системи та мінімізувати можливі наслідки таких помилок, вводиться обмеження на кількість запитів і активних з'єднань з боку однієї IP-адреси.

Поточні налаштування рейт-лімітів

  • Запити на секунду: 100 запитів на секунду.
  • Запити на хвилину: 2000 запитів на хвилину.
  • Активні з'єднання: 300 з'єднань з однієї IP-адреси.

Як працюють рейт-ліміти?

  • Ліміти обчислюються для кожного середовища (домену) окремо. Наприклад, якщо з однієї IP-адреси взаємодіють з декількома середовищами, то кількість запитів розраховується для кожного з них окремо.
  • Блокування IP-адреси також виконується окремо для кожного середовища.

Запобігання блокуванню при раптових стрибках активності

Для того, щоб система не блокувала IP-адресу при короткочасних стрибках активності користувачів, дозволяється тимчасове перевищення ліміту запитів у 5 разів. Це дає змогу системі справлятися з піковими навантаженнями. Однак, якщо активність залишається високою у наступній секунді або хвилині, система почне блокувати запити.

Що відбувається у разі блокування IP-адреси?

Якщо кількість запитів перевищує встановлені ліміти, система повертає відповідь з HTTP кодом 429 ("Too Many Requests").

Як уникати блокування?

Є декілька основних причин чому майданчик може бути заблокованим:

  • Генерування великої кількості однакових запитів майданчиком через помилку на стороні майданчика або неочікувану відповідь від ЦБД.  

Логіка роботи ПЗ майданчика має унеможливлювати надмірну частоту повторів будь яких запитів на нову систему за будь-яких умов.

  • Синхронізація або ресинхронізація великої кількості об'єктів через ендпоінти пошуку, чи процедури а не механізми Mirror.

Mirror використовує постійне з'єднання на основі протоколу WebSocket, що дозволяє отримувати зміни в режимі реального часу.

Це означає, що немає необхідності виконувати повторні підключення або надсилати окремі запити для отримання актуальних даних.

Інформація передається автоматично через це постійне з'єднання, що знижує навантаження на систему та спрощує процес синхронізації.

  • Невикористовувані з'єднання, які залишаються відкритими.

Логіка роботи ПЗ майданчика має унеможливлювати завислі з'єднання які невикористовуються.

Зі свого боку, нова система примусово закриває з'єднання в яких протягом 350 секунд не передавалася інформація.

Дотримання цих рекомендацій допоможе уникнути блокування та забезпечити стабільну роботу з новою системою.

2.3. Обробка помилок клієнтської валідації

Майданчик має забезпечити коректну обробку помилок валідації на стороні API:

2.3.1. Обробка серверних помилок (5xx)

Майданчик зобов’язаний реалізувати механізм повторних запитів із затримкою у разі тимчасових збоїв на стороні ЦБД:

3.  Сумісність з оновленнями API ЦБД

Майданчик має бути сумісним із backward-compatible оновленнями API:

4. Логування запитів до ЦБД

4.1. Загальні вимоги

4.2. Вміст логів

Лог кожного запиту до ЦБД повинен включати:

4.3. Доступ до логів

4.4. Формат і доступ

4.5. Мінімальні можливості фільтрації логів

Майданчик має забезпечити можливість фільтрації логів:

4.6. Зберігання логів

5. Базові вимоги до процедур взаємодії

5.1. Обов’язкове використання Mirror-сервісу

5.2. Генерація мініатюр

6. Використання VPN для захищених запитів

7. Додатково