2010-07-02 77 views
2

我擁有唯一的RESTful資源,它只能在具有兩個屬性的系統中識別。 我想知道的是做這件事的最佳實踐方法是什麼。使用兩個屬性訪問資源的REST最佳實踐

資源標識爲id屬性(不唯一)和名稱屬性(也不是唯一的),但是這兩個屬性的組合是唯一的。

目前我們的URI是這樣的,但是這似乎不正確的:

http://www.domain.com/somepath/myresource?firstid=1&secondid=aname 

我想它會更好,因爲這似乎說明這兩種屬性,如「firstid-aname」結合資源的永久性。例如讓你得到一個URI:

http://www.domain.com/somepath/myresource/firstid-aname 

或者它會更好地做這樣的事情,這是我見過的其他地方:

http://www.domain.com/somepath/myresource;firstid=1;secondid=aname 

任何建議,將不勝感激。 謝謝

回答

3

我認爲你的第一個例子並不是那麼糟糕。這可能是因爲各種非字母數字字符,有些人認爲它不是很乾淨。通常你會看到類似這樣的東西:

http://www.domain.com/somepath/myresource/firstid/1/secondid/aname 

但是由於REST是架構而不是標準,因此您可以隨心所欲地進行操作。就我個人而言,我不認爲URI必須非常漂亮。

編輯有人抱怨之前:當然,如果他們是這樣的話,那也不錯。大多數情況下,它們是由不關心的程序讀取和發出的。漂亮的URI更適合調試。

2

對於RESTx,我們允許在URL中定義'位置參數'。所以,你可以寫這樣的:

http://www.domain.com/somepath/myresource/1/aname 

但你總是要還只是在URL中指定普通的查詢參數的選項,如下所示:

http://www.domain.com/somepath/myresource?firstid=1&secondid=aname 

哪個選項最適合你可能取決於在您編寫的那種客戶端應用程序上。例如,RESTx不會強制您使用其中一個,您可以同時使用它們。

但考慮一下:某些網絡緩存和其他「智能」網絡基礎設施元素在URL中具有參數問題。它們可能會在路徑結束後忽略所有內容(如查詢參數),因此,您的RESTful資源不會被緩存或以其他方式正確處理。這可能不是小型組織中的問題,但是如果您的RESTful資源在Internet上公開,那麼您可能需要考慮這一點。

我喜歡遵循URL路徑應該標識資源本身的原則,而任何參數僅用於修改此請求的輸出。當然,如果您始終使用相同的查詢參數,那麼您可以將它們作爲URL中的位置參數。