Basé sur ce que dit ce type: http://toddfredrich.com/ids-in-rest-api.html
Supposons qu'il ait raison d'utiliser UUID pour identifier les ressources de l'API. Ensuite, je rencontre des problèmes pour essayer de l'implémenter de cette façon, c'est:
class FooEntity {
final String id = null; //auto-generated by my backend (mongodb), not shared
final UUID uid = UUID.randomUUID(); //the resource id
}
(Entre le client et le serveur, sont envoyés et reçus des DTO, pas des entités de base de données.)
Le problème est que ce id
n'est pas utile car je ne l'utilise plus. Le client fait les demandes uid
alors pourquoi est-ce que je me donne la peine de gérer 2 identifiants? Ensuite, nous revenons à la même question du début. Si j'ai défini UUID comme clé primaire ( _id
), j'expose l'ID du backend au public.
À côté de cela, il y a le sujet de l'efficacité. J'ai lu que l'indexation par ObjectId est beaucoup plus efficace que UUID.
la source
Non, en ce qui concerne la base de données, rien sur la structure interne n'est exposé à l'API externe. Les pièces d'identité n'ont aucune intelligence. Ils ne sont même pas uniques dans le monde réel. ID: 47 est partout. Il y a des entités auxquelles vous avez accès et que vous pouvez éventuellement manipuler les données, mais que cette base de données stocke tout dans une table ou dix, utilise un ID incrémentiel comme PK et se rapporte à un FK, vous ne le saurez jamais.
Si vous le pouvez, GetUserAccountByID (12345) demande simplement à quelqu'un d'essayer GetUserAccountByID (12346). Même si cela ne fonctionnera pas en raison d'autres mesures de sécurité, n'essayez même pas et n'essayez pas de pirater la société en demandant des informations sur le compte: 12346. À moins d'appeler le DBA et d'être prêt à attendre 2 semaines pour un réponse;)
Créez donc les GUID comme bon vous semble ou toute autre clé naturelle comme un numéro de téléphone ou une adresse e-mail. Mettez une contrainte unique sur le champ dans la table pour éviter une tentative de copier-coller obscure lors d'une tentative de fusion de données.
Ce n'est pas redondant. Les deux domaines ont des objectifs différents.
la source
À propos de l'efficacité ID vs UUID, sauf si vous avez plusieurs jointures impliquant plusieurs tables ayant chacune des millions d'enregistrements, cela ne fera pas beaucoup de différence. L'utilisation de l'UUID rend votre application beaucoup plus difficile à éliminer si vous ne cochez pas / n'appliquez pas directement du côté du serveur.
C'est très facile lorsque vous utilisez ID, si vous utilisez plutôt UUID, c'est une option de moins pour un scrapper.
L'ID peut être considéré comme quelque chose d'internes à l'instance de base de données de votre application. Il y a trois mots importants dans cette phrase:
Sur une préférence personnelle: je préfère avoir un identifiant simple et un identifiant professionnel unique (mail, login, ...). Donc, si je dois échanger des données, j'utiliserai l'ID d'entreprise, car le système cible peut ne pas gérer l'UUID, mais il va très probablement (ne jamais dire jamais ...) gérer correctement une clé d'entreprise unique.
la source