2011-08-18 12 views
60

Estoy construyendo una aplicación SaaS y quiero exponer identificaciones para recursos que no están vinculados a mi implementación actual de almacenamiento de datos (ID de autoaumento de Postgres). Estas publicaciones de Desbordamiento de pila (onetwo) sugieren que la creación de identificadores locales únicos es difícil y que también podría usar UUID, que por supuesto se generan de forma fácil y segura en prácticamente cualquier idioma.¿Debo usar UUID para recursos en mi API pública?

Estoy satisfecho con este enfoque, pero me pregunto por qué no puedo encontrar ninguna API de grandes reproductores SaaS/hosted que hagan lo mismo. Por ejemplo:

Así que, básicamente, nadie parece usar UUID. ¿Hay alguna razón para esto, algoritmos internos de ID no inventados, más ingeniosos o algo más? Y en mi caso, en ausencia de cualquier algoritmo interno, ¿tiene más sentido ir con UUID?

+1

¡Vámonos por una gran pregunta! ¿Cómo fueron los resultados? ¿Los almacenaste en una columna separada? –

+2

Hola David, sí, al final utilicé los UUID y los almacené en una columna separada. –

+0

Estoy haciendo exactamente lo mismo –

Respuesta

31

Es posible que esos otros proveedores que enumeró tengan su propia identificación o esquema de hash para permitirles exponer un número más pequeño mientras usan algo más parecido a un UUID internamente. Pero al final, la pregunta debe hacerse: siempre y cuando sus URIs estén destinados a ser consumidos por el código (clientes API) en lugar de los humanos, ¿por qué sería importante?

No demasiado aterrada por lo que los vendedores han hecho. No hay garantía de que (a) estén haciendo lo "correcto" y (b) que sus necesidades sean las mismas que las suyas.

seguir adelante y utilizar UUID.

+1

Gracias Brian, sí, voy a seguir adelante con los UUID –

7

creo que podría considerar las cuatro opciones principales aquí:

  1. utiliza el UUID como su base de datos de claves principales, pero podría ser más computationally expensive than using Long

  2. crear un UUID a la capa de mapeo de largo, De esta manera puede publicar sus recursos REST, pero mantener una estructura de base de datos limpia utilizando PK largo

  3. crear una columna clave alternativa en las tablas de la base de datos para mantener los valores de UUID.

  4. en lugar de usar UUID puede tener identificadores criptográficos, generados sobre la marcha utilizando una semilla personalizada para cada cliente y PK original. Este enfoque impone una mayor sobrecarga de ejecución, pero podría ser interesante en algunos escenarios. El cliente debería usar siempre datos encriptados, ya que nunca tendrán acceso a la semilla o al algoritmo.

+1

Gracias Alessandro! Terminé yendo con la opción 3. –

Cuestiones relacionadas