使用支持多種超媒體類型和認證的REST框架。我不確定如何處理的一件事是資源中的敏感值。例如,如果我要在API中包含用戶管理,我需要一種向客戶端公開有密碼字段但未顯示實際密碼哈希的方式。與信用卡相同的東西。如果我不這樣做,它會違反超媒體約束,因爲這些字段的知識會超出範圍,並且會破壞我的HATEOAS。如何處理RESTful API中的敏感屬性(例如密碼,信用卡等)
下面是我遇到的實際使用情況:
該項目的人的一個目錄,展示他們讓其他人可以聘請他們。有兩種類型的用戶:具有配置文件的用戶和沒有用戶的用戶。圍繞資源的設計將是/users/{userid}
爲用戶和/users/{userid}/profile
或/profile/{profileid}
這將包括一個鏈接回到用戶,使客戶端可以得到的東西,如用戶的名字等。此外,用戶將能夠存儲信用卡在/users/{userid}/creditcards/{creditcardid}
。
要顯示用戶的配置文件,還需要用戶資源才能訪問名稱和內容。我們不想要的是在用戶資源或信用卡鏈接上公開用戶的密碼。我想我可以隱藏信用卡鏈接,沒有任何問題,但我不確定密碼字段。我應該只將它公開給授權用戶,而不公開給其他用戶模型?我應該提到,只有GET
被允許在用戶身上,除非經過認證和授權。
一個會強調這一點的奇怪邊緣案例將是您可以部分訪問更改的對象。假設您是低級別的管理員,可以訪問更改用戶的姓名和地址,但不是密碼。由於您無權訪問,因此無法公開密碼字段。我如何才能將PUT
添加到我沒有所有字段的資源?在這些情況下,我應該只使用PATCH
嗎?
TL; DR:我如何正確地隱藏/暴露REST API中的字段並遵循超媒體約束?