![](/img/trans.png)
[英]REST API Design: When should we use association in Uri for the resources?
[英]REST API URI Design for sensitive resources
我有一個由 RESTFul API 支持的應用程序。 該應用程序具有用戶管理部分,管理員用戶可以通過該部分管理其他用戶。 下面是 API 操作端點之一的示例 URI。
更新用戶: POST https://example.com/api/users/user1
這里user1是管理員正在編輯的用戶的用戶名。
安全方面的建議是從 URI 中刪除用戶名,因為它是敏感信息,並且因為它是 url 的一部分,它將被記錄在網絡日志中。 建議的解決方案是在 POST 請求正文中傳遞用戶名數據。
將數據移動到請求正文很好。 但是,如果我從 URI 中刪除用戶名,則 URI 將類似於 "**POST https://example.com/api/users**" 。 這顯然不像一個有效的 REST URI。 而且我的 USER 實體沒有任何其他可以在 URI 中使用的唯一屬性。
在這種情況下,是否有任何推薦的方法來形成正確的 REST URI?
一種方法是使用“id”而不是“username”:
https://example.com/api/users/{id}
其中“id”通常是 UUID https://en.wikipedia.org/wiki/Universally_unique_identifier
POST /api/users
這顯然不像一個有效的 REST URI。
當然可以。
REST 不關心您為資源標識符使用的拼寫,只要拼寫與 RFC 3986 中的生產規則一致。
也就是說,文檔的標識符需要包含敏感信息並沒有什么特別的原因。
有幾種可能的解決方案 - 如果客戶端和服務器都知道敏感數據,那么您可以使用散列值而不是原始值作為標識符的一部分。
這並不理想:我們有機械的方式來傳達接受參數的 URI,但沒有我知道的用於傳達某些值應該首先被散列的標准。
如果按需代碼是一個選項,您可能能夠在發送數據之前設法指示通用客戶端 hash 數據。
否則,我認為您只能在帶外傳達散列 - 想象一個 web 表格,指示人類輸入敏感信息的散列值。
REST 針對其優化的用例進行了優化,這意味着其他一些用例比我們可能想要的更笨拙。 權衡取舍萬歲。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.