Avoir utilisé ObjectId
s dans les API RESTful plusieurs fois, le plus gros inconvénient est vraiment qu'elles sont très bruyantes en termes d'avoir une URL propre. Soit vous le laissez sous forme de nombre HEX, soit vous le convertissez en un très grand nombre entier, les deux créant une URL peu conviviale :
/rest/resource/52435dbecb970072ec3a780f
/rest/resource/25459211534898951476729247759
J'ai ajouté un "titre" à l'URL (comme le fait StackOverflow) pour les rendre un peu plus conviviales :
/rest/resource/52435dbecb970072ec3a780f/FriendlyResourceName
Bien sûr, le "titre" est ignoré dans le logiciel, mais l'utilisateur le voit et peut mentalement ignorer le segment d'ID fou.
Il y a très peu de choses utiles qui pourraient être apprises de l'infrastructure en les exposant :
- Horodatage
- Identifiant de l'ordinateur
- ID de processus
- Valeur d'incrémentation aléatoire
Autre que la collecte potentielle d'ID de machine (qui indiquerait généralement le nombre de clients créant ObjectId
s), il n'y a pas grand-chose.
ObjectId
s ne sont pas aléatoires, vous ne pouvez donc pas les utiliser pour des raisons de sécurité. Vous aurez toujours besoin de sécuriser les données. Bien qu'ils ne puissent pas augmenter de manière évidente, il serait facile de trouver d'autres ressources par la force brute. Cependant, si vous utilisiez auparavant des ID à incrémentation automatique, ce n'est pas un problème nouveau pour vous.
Si vous savez que vous ne créez pas beaucoup de nouveaux documents à un moment donné, il peut être utile d'utiliser l'un des modèles ici pour créer un ID plus simple. Dans une application que j'ai écrite, j'ai utilisé une technique d'auto-inc pour certains des ID de document qui étaient affichés dans les URL, et pour ceux qui étaient uniquement Ajax, j'ai utilisé ObjectId
s. Je voulais vraiment que certaines URL soient facilement "tapées". Aucune forme d'un ObjectId
est facilement saisi par un utilisateur final. C'est l'une des forces de MongoDB - que vous pouvez utiliser n'importe quel _id
format que vous souhaitez. :)