Je travaille actuellement sur un nouveau projet web avec différents types d'entités. Ce service sera accessible via une API REST, et je pense à extrémités comme:Quel type d'ID utiliser et comment le stocker dans la base de données?
api.example.com/users/{user_id}
Pour cela, je pense qu'un ID automatique supplémentaire pour les utilisateurs sera une mauvaise approche, puisque tout le monde peut hit: api.example.com/users/1
, puis api.example.com/users/2
, api.example.com/users/3
, et ainsi de suite.
Maintenant, je pense à utiliser UUID, mais je ne sais pas si c'est une bonne idée, parce que c'est un VARCHAR(36)
. Pour ces raisons, je fais quelque chose comme ça quand je produis l'ID utilisateur sur la INSERT requête (j'utilise MySQL):
unhex(replace(uuid(),'-',''))
Avec cela, je le casting UUID binaire. Et je stocke un BINARY(16)
sur la base de données à la place.
Et quand je veux récupérer les informations de base de données, je peux utiliser quelque chose comme ça:
SELECT hex(id), name FROM user;
et
SELECT hex(id), name FROM user WHERE hex(id) = '36c5f55620ef11e7b94d6c626d968e15';
Alors, je travaille avec la forme hexadécimaux, mais en le stockant sous forme binaire.
C'est une bonne approche?
Il n'y a rien de mal à utiliser une colonne d'incrémentation automatique pour l'ID utilisateur.Vous devez disposer d'une configuration de gestion de session pour empêcher toute tentative non autorisée d'accès à un point de terminaison REST. Passer à un UUID fait peu de sécurité. –