80 votes

Devrais-je utiliser des UUID pour des ressources dans mon API publique?

Je suis en train de construire une application SaaS et souhaitez exposer Id pour des ressources qui ne sont pas liées à mon actuel de stockage de données de mise en œuvre (Postgres auto-incrément IDs). Ces Débordement de Pile postes (un des deux) suggèrent que le fait de créer localement des Identifiants uniques est dur et que je pourrais aussi bien utiliser les Uuid, qui sont bien sûr facilement et en toute sécurité générés dans à peu près n'importe quelle langue.

Je suis heureux avec cette approche, mais je me demande pourquoi je ne peux pas trouver n'importe quel Api de gros SaaS/a accueilli les joueurs qui font la même chose? Par exemple:

Donc, fondamentalement, personne ne semble utiliser des Uuid. Est-il une raison à cela - pas-inventé-ici, plus intelligents interne l'ID d'algorithmes ou autre chose? Et dans mon cas, en l'absence de tout algorithme interne, est-il plus judicieux d'aller avec des Uuid?

40voto

Brian Kelly Points 9433

Il est possible que ceux d'autres fournisseurs que vous avez énumérés ont leurs propres ID ou le hachage régime afin de leur permettre d'exposer un plus petit nombre tout en utilisant quelque chose de plus semblable à un UUID en interne. Mais en fin de compte, la question doit être posée: tant que votre Uri sont destinés à être consommés par le code de l'API (clients) plutôt que les humains, pourquoi serait-il question?

Ne soyez pas trop effrayés par ce que ces fournisseurs ont fait. Il n'y a pas de garantie que (a) ils sont en train de faire la "bonne" chose et (b) que leurs besoins sont les mêmes que les vôtres.

Aller de l'avant et à l'utilisation des Uuid.

14voto

Je pense que vous pourriez envisager de les quatre principales options ici:

  1. utiliser l'UUID de votre base de données de Clés Primaires, mais il pourrait être plus gourmand en ressources que l'utilisation à Long

  2. créer un UUID de cartographie de la couche, de cette façon, vous pouvez publier votre REPOS, de ressources, mais de maintenir propre structure de base de données à l'aide de Longues PK

  3. créer une autre colonne de la Clé dans les tables de base de données, afin de maintenir de l'UUID de valeurs.

  4. au lieu d'utiliser l'UUID vous pourriez avoir cryptographiques Id, généré à la volée en utilisant une mesure de semences pour chaque client et d'origine PK. Cette approche impose de plus l'exécution de frais généraux, mais pourrait être intéressant dans certains scénarios. Le client devrait toujours utiliser des données chiffrées, car ils n'auront jamais accès à la semence ou de l'algorithme.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X