Чи слід використовувати UUID для ресурсів у своєму загальнодоступному API?


76

Я будую додаток SaaS і хочу виставити ідентифікатори ресурсів, які не прив'язані до моєї поточної реалізації сховища даних (ідентифікатори автоматичного збільшення Postgres). Ці повідомлення про переповнення стеку ( один два ) свідчать про те, що створювати унікальні локально ідентифікатори важко, і що я міг би також використовувати UUID, які, звичайно, легко та безпечно генеруються майже будь-якою мовою.

Я задоволений таким підходом, але мені цікаво, чому я не можу знайти API від великих програвачів SaaS / хостингу, які роблять те саме? Наприклад:

Тож, здається, ніхто не використовує UUID. Чи є для цього причина - не вигадані тут, розумніші алгоритми внутрішнього ідентифікатора чи щось інше? І в моєму випадку, за відсутності будь-якого внутрішнього алгоритму, чи є найбільш розумним користуватися UUID?


1
Проголосуйте за чудове питання! Як вийшли результати? Ви зберігали їх в окремій колонці?
David S

3
Привіт, Девід, так, врешті-решт, я використовував UUID і зберігав їх в окремій колонці!
Alex Dean

Я роблю абсолютно те саме
Кейсі Флінн

Посилання AMEE мертве, але тепер його можна знайти тут
Michael Sørensen

Відповіді:


38

Цілком можливо, що інші перелічені вами постачальники мають власні ідентифікатори або схему хешування, щоб дозволити їм виставляти меншу кількість, одночасно використовуючи щось більше схоже на UUID. Але врешті-решт, слід поставити запитання: поки ваші URI призначені для споживання кодом (клієнтами API), а не людьми, чому це має значення?

Не надто збивайтеся з того, що зробили ці продавці. Немає гарантії, що (а) вони роблять "правильно" і (б) що їхні потреби збігаються з вашими.

Вперед і використовуйте UUID.


1
Дякую, Брайане, так, я продовжую використовувати UUID
Алекс Дін,

10

Я думаю, ви можете тут розглянути чотири основні варіанти:

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

  2. створити рівень UUID для відображення Long, таким чином ви можете публікувати свої ресурси REST, але підтримувати чисту структуру бази даних, використовуючи Long PK

  3. створити стовпець Альтернативний ключ у таблицях бази даних, щоб зберігати значення UUID.

  4. замість використання UUID ви можете мати криптографічні ідентифікатори, що генеруються на льоту, використовуючи спеціальне насіння для кожного клієнта та оригінальний ПК. Цей підхід накладає більше накладних витрат, але може бути цікавим у деяких сценаріях. Клієнту доведеться використовувати завжди зашифровані дані, оскільки вони ніколи не матимуть доступу до насіння або алгоритму.


1
Дякую Алессандро! У підсумку я пішов із варіантом 3.
Алекс Дін
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.