Застарілий спосіб авторизації: Користувач мав змогу авторизуватись в аукціоні по прямому URL-посиланню з можливістю ввести його в адресний рядок браузеру, де вказані його персональні авторизаційні дані. Наприклад:
https://auction.prozorro.sale/ХХХХХ-UA-ХХХХХХХХХХХ?bidder_id=ХХХХХХХХХХ&acc_token=ХХХХХХХХХХ
Де:
- ХХХХХ-UA-ХХХХХХХХХХХ - auction_id - людиночитаємий ідентифікатор аукціону, в якому бере участь користувач;
- bidder_id - унікальний Ідентифікатор учасника, який він отримує в API після того як його закрита цінова пропозиція активована;
- acc_token - авторизаційний токен, який надає йому змогу користувачу авторизуватись в аукціону як Учасник та робити ставки.
Єдиний інтерфейс - це інструмент, за допомогою якого майданчики мали змогу створювати власний інтерфейс аукціону з відображенням інформації по ньому та робити ставки, не використовуючи внутрішній модуль аукціонів. Його відмінністю було те, що Єдиний Інтерфейс надавав змогу відображати інформацію одразу по декільком аукціонам, в яких на протязі 24 годин брав участь конкретний користувач, за допомогою створення спеціальних рум (room), де він міг робити ставки одночасно в декільках аукціонах. Руми використовувались для відображення приватної інформації з правами бідера. Сервер майданчика формує рум та дозволяє робити ставки, а браузер клієнта в свою чергу звертається до фіда (далі - feed).
Цільовим призначенням даного інтерфейсу було його використання в процедурах деревини (TIE), де він слугував обов’язковою вимогою для майданчиків по даному напрямку (на разі, дану вимогу скасовано).
Додатково даний функціонал міг надавати майданчикам (за їх власним бажанням) функціональну перевагу в проходженні торгів учасників - за допомогою створення ботів, що мали змогу самостійно робити ставки замість учасників. Та інші додаткові сервіси для клієнтів.
Візуальний приклад реалізації Єдиного Інтерфейсу майданчиком:
https://drive.google.com/file/d/16Muips6syexWIJdZx2qDkPsvLg2-_MgA/view?usp=sharing
Відео з демо роботи єдиного інтерфейсу на одному з майданчиків:
https://drive.google.com/file/d/1-KGSI5yyioW121GWyj9ExMdfwy34kedr/view?usp=sharing
Ендпойти Єдиного інтерфейсу, які вилучені з системи:
1. [POST] /api/auctions/room - Створення руму:
- Дозволяє створити “кімнату” для учасника, який одночасно бере участь в декількох аукціонах.
- В тілі запиту даного ендпойнту вказується перелік аукціонів, в яких бере участь користувач, з їх параметрами: auction_id, bidder_id та acc_token.
- Кожен з аукціонів вказується у вигляді окремого об’єкту, кількість яких необмежена.
- Після створення руму йому присвоюється окремий ідентифікатор - “room_id” зі значенням, до прикладу “cb8d206af0f9467ebd59993fe4c752af”, що отримується в респонсі даного ендпойтну. Зі статусом 201 Room created.
- Рум створюється в день аукціонів на один день (24 години).
- Реалізація була такою, що додавати аукціони вже в створений рум не було можливості, так як в анлійських аукціонах день в день подавати заявки на участь учасники не можуть, та всі аукціони стартують одночасно.
Приклад запиту даного ендпойнту:
{
"TE001-UA-20191104-54321": {
"bidder_id": "a1f44e85-96ec-4898-9c42-86cb42f5beb1",
"acc_token": "51c13c45-fb24-46c2-a3ac-adf64c05d791",
"tz": "UTC"
},
"TE001-UA-20191104-12345": {
"bidder_id": "a1f44e85-96ec-4898-9c42-86cb42f5beb1",
"acc_token": "51c55c45-fb24-46c2-a3ac-adf64c05d792"
}
}
- [GET] /api/auctions/rooms/{room_id}/feed - Підключення до руму (кімнати):
- Надає можливість підключення до вебсокету, який для створеної кімнати віддає поточний стан для множини аукціонів у випадку їх зміни.
- Стани аукціону, зміни по яким надає можливість отримувати даний ендпойнт: власні ставки,ставки інших учасників, зміна раунду, час початку/завершення ходу учасника, та інше. А після завершення аукціону - також деанонімізація учасників аукціону з їх ставками.
- Частота оновлень інформації в вебсокеті: сокет при підключенні до нього віддає актуальний стан всіх аукціонів. Після чого він надає автоматично оновлення лише в момент фактичного оновлення інформації по будь якому з об’єктів в базі даних.
- До прикладу, якщо в румі з трьох аукціонів оновилась інформація по будь якому 1-му з них, то оновлюється інформація одразу по 3-х аукціонах.
- Даний ендпойнт дає змогу лише читати (readonly) інформацію по аукціонах, та не вносити зміни по ним.
- Фактично ендпойнт повторює інформацію, що можна отримати з JSON по кожному аукціону.
Приклад: wss://auction-staging.prozorro.sale/api/auctions/rooms/0057e70c7d8347debf1cb06c45cb15bd/feed
Інструмент для перегляду: https://websocketking.com/
- [GET] /api/{auction_id}/feed - Підключення до одного об’єкту аукціону:
- Даний ендпойт повторює логіку попереднього /api/auctions/rooms/{room_id}/feed з відмінністю, що надає інформацію лише по одному об’єкту аукціону, а не їх масиву
- Може використовуватись для створення майданчиком інтерфейсу аукціону, по аналогії модулю аукціону.
- Не дає можливості змінювати стани аукціону
- Також відмінністю від румів є те, що частота оновлень в ньому відбувалась раз в одну секунду, та не залежала від фактичних змін об’єкту аукціону.
- [POST] /api/auctions/{auction_id}/bid - Подача ставки:
- За допомогою даного ендпойнту Учасник міг змінювати власну ставку в аукціоні, як в рамках румів, так і одинарного об’єкту аукціону.
- Можливість змінювати ставку обмежена виключно під час власної черги Учасника.
- У випадку спроби подачі ставки в інший проміжок часу - відображалась помилка 400 - Bad request, cannot post bid in current state
- Якщо вказані не вірні авторизаційні дані учасника - 403 Permission error
- Якщо не вірно auction_id - 404 Auction not found
- Приклад тіла запиту ендпойту:
{
"bid": 3000.01
}
- POST] /api/auctions/{auction_id}/bid/cancel - Відміна ставки:
- Аналогічно попередньому ендпойнту - Учасник міг відміняти останні зміни своєї ставки під час конкретного раунду та власної черги.
- Відміна ставки заборонялась у час, відмінний віл власної черги.
- У випадку успішної зміни - 200 Bid was cancelled
- У випадку спроби зміни ставки в інший час - 400 Bad request, cannot cancel bid in current state
- Саме два останні ендпойнти давали можливість взаємодіяти Користувачу з аукціоном та впливати на його стан.
Причини відмови від застарілої авторизації та ендпойнтів Єдиного інтерфейсу:
- Безпека: це створювало не захищене з’єднання, що могло служити витіком приватної інформації, скомпрометувати торги, заволодіти даними учасника, діяти від його імені та ін.
- Навантаження: руми перенавантажували систему та ресурси.Якщо відкривати в нових вкладках браузера, кожна рахується як окрема операція.
Альтернативний спосіб взаємодії з аукціоном без залучення діючого інтерфейсу модулю аукціонів:
- Якщо майданчик програмно перейде за допомогою посилання оновленої авторизації через auth сервер (https://procedure.prozorro.sale/api/auth/auction?token=...)
- То зможе отримати cookies даних користувача
За допомогою останніх є можливість реалізувати власне підключення до аукціону та взаємодіяти з ним