美好的一天,我實施了一項REST服務。在資源終點的URL中,使用數據庫表的主鍵ID。例如http://host/myapp/items/item/4
。我知道在URL中使用數據庫ID是一種不好的做法,我應該使用UUID代替。另一方面,我知道如果數據庫中有很多記錄,那麼在索引中使用UUID是一個性能問題,因爲它們不是順序的(1,2,3,...)。所以我有一個想法來加密數據庫ID。這是怎麼可能的工作:在Web服務URL中使用加密的數據庫ID而不是UUID是好主意嗎?
1) Client POSTs an item to `http://host/myapp/items`.
2) The back-end creates a new item in the database.
3) Autoincremented ID '4' is generated by the database.
4) The back-end encrypts the ID '4' to 'fa4ce3178a045b2a' using a cipher key and returns encrypted ID of a created resource.
然後:
5) Client sends a request to GET `http://myapp/items/item/fa4ce3178a045b2a`.
6) The back-end decrypts 'fa4ce3178a045b2a' to '4' using an cipher key.
7) The back-end fetches item with primary key '4' and sends it to the client.
什麼是這樣的解決方案的利弊?加密/解密是否會足夠快以至於使用UUID並不會更糟?我應該使用什麼加密算法,以便速度快並且不佔用太多資源?能否有人提供更有經驗的建議或推薦更好的解決方案?先謝謝你。 Vojtech
從API設計角度來看,我覺得這個話題非常有趣。你能否分享你的調查結果和決定? – 2016-08-08 18:24:01