對於一個作爲資源的內部標識符(如person_id
)的系統,是否可以在不同的唯一值上調用直接API訪問權限(如licensee_id
)?如何定義(RESTful)API的ID?
那麼這樣的API設計是否合理?
GET /people/{:licensee_id}
和:
PUT /people/{:licensee_id}
{
"name": "John"
}
對於一個作爲資源的內部標識符(如person_id
)的系統,是否可以在不同的唯一值上調用直接API訪問權限(如licensee_id
)?如何定義(RESTful)API的ID?
那麼這樣的API設計是否合理?
GET /people/{:licensee_id}
和:
PUT /people/{:licensee_id}
{
"name": "John"
}
這意味着,你在談論的資源沒有一個唯一的標識符,但 有兩個。
如果我做,我會從兩個不同的URL暴露在相同的資源,像這樣:
/licensee/:licensee_id
/people/:person_id
因此,如果您的API中的代碼的一部分用戶打交道的人(即可輕鬆訪問person_id
而無需其他呼叫)呼叫第二個,否則他可以呼叫第一個。
其中一個原因,除了它對您的API的消費者更容易的事實之外,是您實施起來更容易,您不必瞭解傳遞給您的是licensee_id
或a person_id
這樣做是有道理的。你並沒有真正放棄任何重要的信息,這會讓別人很難做出SQL注入攻擊(因爲引用id的其他表中的所有外鍵都會有不同的名字)。
如果不是直接訪問id字段,那麼需要一個不同的列,這個列的索引類似於從獨特的用戶字段創建的uuid或md5。我認爲這樣做的唯一好處是有人不能使用API來「漫遊」用戶或其他對象。
我現在走的是'/ people?licensee_id = {:licensee_id}'。我想我最終可能會得到'/ by-by-license','/ people-by-blah',因爲我的上下文中的一些獨特屬性只是屬性,而沒有定義其他類型的人員。最後,我確實喜歡你的建議的清晰度。 – eoinoc 2013-05-16 09:33:34
很高興幫助^^ – 2013-05-16 09:36:12