2013-05-10 70 views
0

對於一個作爲資源的內部標識符(如person_id)的系統,是否可以在不同的唯一值上調用直接API訪問權限(如licensee_id)?如何定義(RESTful)API的ID?

那麼這樣的API設計是否合理?

GET /people/{:licensee_id} 

和:

PUT /people/{:licensee_id} 
{ 
    "name": "John" 
} 

回答

2

這意味着,你在談論的資源沒有一個唯一的標識符,但 有兩個。

如果我做,我會從兩個不同的URL暴露在相同的資源,像這樣:

/licensee/:licensee_id 
/people/:person_id 

因此,如果您的API中的代碼的一部分用戶打交道的人(即可輕鬆訪問person_id而無需其他呼叫)呼叫第二個,否則他可以呼叫第一個。

其中一個原因,除了它對您的API的消費者更容易的事實之外,是您實施起來更容易,您不必瞭解傳遞給您的是licensee_id或a person_id

+0

我現在走的是'/ people?licensee_id = {:licensee_id}'。我想我最終可能會得到'/ by-by-license','/ people-by-blah',因爲我的上下文中的一些獨特屬性只是屬性,而沒有定義其他類型的人員。最後,我確實喜歡你的建議的清晰度。 – eoinoc 2013-05-16 09:33:34

+0

很高興幫助^^ – 2013-05-16 09:36:12

0

這樣做是有道理的。你並沒有真正放棄任何重要的信息,這會讓別人很難做出SQL注入攻擊(因爲引用id的其他表中的所有外鍵都會有不同的名字)。

如果不是直接訪問id字段,那麼需要一個不同的列,這個列的索引類似於從獨特的用戶字段創建的uuid或md5。我認爲這樣做的唯一好處是有人不能使用API​​來「漫遊」用戶或其他對象。