我目前正在研究一個新的基於網絡的項目與各種類型的實體。該服務將通過REST API訪問,我在想端點,如:要使用哪種ID以及如何將其存儲在數據庫中?
api.example.com/users/{user_id}
對於這一點,我認爲,用戶的自增ID將是一個不錯的辦法,因爲任何人都可以點擊: api.example.com/users/1
,然後api.example.com/users/2
,api.example.com/users/3
,等等。
現在,我正在考慮使用UUID,但我不知道它是否是個好主意,因爲它是VARCHAR(36)
。對於這些原因,我做這樣的事情時,我產生的INSERT查詢的用戶ID(我使用MySQL的):
unhex(replace(uuid(),'-',''))
有了這個,我鑄造的UUID二進制文件。而我在數據庫上存儲BINARY(16)
。
而當我想從數據庫中獲取信息,我可以使用類似的東西:
SELECT hex(id), name FROM user;
和
SELECT hex(id), name FROM user WHERE hex(id) = '36c5f55620ef11e7b94d6c626d968e15';
所以,我用十六進制形式的工作,但是以二進制形式存儲它。
這是一個好方法嗎?
對於用戶標識使用簡單的自動增量列沒有任何問題。您需要進行會話管理設置以防止未經授權嘗試訪問REST端點。切換到UUID在安全性方面幾乎沒有影響。 –