Use of UUIDs, (commonly v4 or variations thereof) is a common way of preventing enumeration attacks in APIs or URL schemes that are exposed externally. They are however quite long, human unfriendly and tricky to work with as a developer compared to things like monotonically increasing integers or timestamps.
NanoID #
NanoID have been around for a bit and are basically a better UUID v4 because they don't have an artificial alphabet restriction and were designed to be a collision avoidant random number generator rather than being a sub-case of a wider spec.
I've sometimes seen coders use pure random number generation (at a capped size) to generate UUID v4. This works but isn't what the spec says. NanoID seems like a much better compromise if you want something similar but simpler that UUID v4.
ULID #
ULID is perhaps the closest to UUID but has the important property of being lexically sortable by time of creation which is quite an interesting property compared to the completely random nature of UUIDs.
The creation timestamp can also be extracted from the resulting id. This amount of additional information is helpful in debugging issues but does also represent information you are potentially sharing with the world.
Sqids #
These are a new one on me, I haven't used them. The projet page advertises their use in things like temporary login codes rather than primary key encoding but they are guaranteed to be url safe. I've definitely had use cases for this before and used UUIDs instead so the next time I'm looking at this problem I'm going to give them a go.