Al crear un sistema basado en Java que necesita identificadores únicos en la URL, ¿es UUID.randomUUID()
o SecureRandom
una mejor opción?
Más específicamente, una llamada a POST /items
devolverá un 201 Created
con una ubicación al /items/{id}
recién creado, donde {id}
es una cadena aleatoria y la URL está destinada a ser utilizada por solicitudes HTTP anónimas para un ventana de tiempo limitado.
Este código devuelve una cadena de 22 caracteres (por ejemplo, B-KEPLFdWNZ4JTUnnEq3Og
) con 128 bits de aleatoriedad.
SecureRandom random = new SecureRandom();
byte bytes[] = new byte[16];
random.nextBytes(bytes);
Encoder encoder = Base64.getUrlEncoder().withoutPadding();
String token = encoder.encodeToString(bytes);
System.out.println(token);
UUID.randomUUID () es una "Fábrica estática para recuperar un UUID tipo 4 (pseudoaleatorio). El UUID se genera utilizando un generador criptográficamente fuerte de números pseudoaleatorios". Este código devuelve una cadena de 36 caracteres (por ejemplo, f0803ce7-8e3d-421a-8126-e5a0bd0a865f
) con 122 bits de aleatoriedad.
UUID randomUUID = UUID.randomUUID();
System.out.println(randomUUID);
Estos identificadores también se conservarán en una base de datos relacional como un tipo CHAR
de longitud fija.