solovyov.net

Автоінкремент — відстій

Будь ласка, припинить виставляти автоінкрементні ідентифікатори назовні. В урлах, в API, будь-де. З ними погано все:

То що ж робити?

Про числа. Всі фронтендери поділяються на два типи: тих, кому пофіг на типізацію (жс), і тих, хто робить життя людей нестерпним (всі інші). Уявімо, що ви писали першу реалізацію якомога швидше і всюди повидавали айдішники. А потім захотіли з них переїхати на що завгодно: на префікси, на base64, на UUID. Але не можете, бо всі клієнтські апки ваші айдішники розбирають як число і строку туди не підкласти ніколи. Для міграції залишається дві опції — від'ємні числа і якась хитра арифметика (додайте трильйон і сподівайтеся що ваші клієнти розумініші за int32 🤣).

Тому ніколи — чуєте, ніколи — не віддавайте ідентифікатори як число. Зробіть {"id": str(id)}, тоді у вас будуть шанси у майбутньому. Тим паче якщо ви віддасте їх як число, якийсь дуже розумний™ фронтендер десь помітить закономірність і щось оптимізує. Чи то швиденько пагінацію свою намутить (до речі, використовуйте курсори), чи ще якоюсь арифметикою займеться (деякі події зі свого життя я навіть не хочу розповідати 😅).

Найголовніше. Який би ти айдішник не згенерував, обов'язково запиши його в базу. Не треба оцих муток "я в апі розберу hashid назад у цифру і зроблю запит по ній", це, по-перше, довше, а, по-друге, ти задовбешся шукати руками в базі, логах та обмінах повідомленнями. Просто консистентно ідентифікуй всюди цю сутність її айдішником. Може і FK на цей айдішник варто робити, тут вже я не певен. :)

(@ tg)