uuid 1) почти везде есть на уровне нативного типа 2) энтропия в расчете на байт гораздо выше (длинна алфавита vs 256 ) 3) выглядит солиднее :)
эти внешние id всегда нужны в обе стороны. их же недостаточно просто отдать за пределы системы. этот же id тебе пришлют обратно. а значит, тебе нужно иметь индекс по этому "хешу". а значит он у тебя должен хранится в базе целиком (либо как функциональный индекс, либо как индекс по посчитанному хешу).
hashids: 1) не понимает большие числа (нужно разбивать) 2) принимает только инты 3) восьмибайтное число (разбитое на два) приобразует в 15 символов
сделать "секьюрную" "криптографию" которая будет превращать int-ы в короткие (!) красивые (!) url-френдли (!) строчки практически невозможно. Просто информационная емкость "секьюрной криптографии" такая, что в короткую-красивую строчку она тупо не влезет.
Я стараюсь, чтобы айдишники имели прикладной смысл. Если есть уникальный и неизменный логин, email, DNS-хост - использую их. Если надо генерить - использую или MongoDB ID, или буквенную строку, как у YouTube.