2017-01-30 173 views
1

所以...我知道這個問題可能會危險地接近意見。我希望不是,而且REST標準清楚了我要問什麼,但如果不是,我會關閉它。「Right」REST URL獲取所有資源中的所有資源?

我有一個網站(Django的,與數據存儲在Postgres的)與Product(-s)和Category(-ies)每個category可以包含多個product(-s)。

所以,問題是:什麼是「正確的」端點(如果有的話)以獲得所有類別中的所有產品?

我相信這將清楚得到一個特定類別的所有產品。例如,如果類別ID是24,爲了得到它的所有產品,我會寫:

http://myserver.com/api/categories/24/products

但所有類別的所有產品在每個如何?

會是http://myserver.com/api/categories/products

會是http://myserver.com/api/categories/all/products

使用某種參數比如http://myserver.com/api/categories?mode=all_products會更好嗎?

這個想法是有這樣的(JSON格式)的響應

{ 
    "25": [{ 
     "id": 1, 
     "name": "Product 1 in category 25", 
     "price": 100 
    }, { 
     "id": 2, 
     "name": "Product 2 in category 25", 
     "price": 200 
    }], 
    "26": [{ 
     "id": 3, 
     "name": "Product 1 in category 26", 
     "price": 300 
    }, { 
     "id": 4, 
     "name": "Product 2 in category 26", 
     "price": 400 
    }] 
} 

預先感謝您。

+1

它可能只是http://myserver.com/api/products。由於URL的含義是完整的可用產品集合,並且結果的格式不考慮類別。例如:http://www.restapitutorial.com/lessons/restfulresourcenaming.html – 4xy

+0

感謝您的評論,@ 4xy :-)具有特定網址的東西是我已經擁有它來獲取所有產品的列表,無論的(或者不按其分類)。 – BorrajaX

+0

'REST標準'? REST只是一種建築風格,不是標準!接下來,REST並不關心你的URI設計,只是你尊重支持協議(在你的情況下是HTTP),並且這些URI是他們聲稱的唯一的。像http://someserver.com/foo/bar/adjfajdöaj/sajdkaj就像您提交的URI之一一樣(好或壞是基於意見的) –

回答

2

就REST而言,如果您是唯一代表網址中的資源以便它是cacheable(並且遵守HATEOAS但讓我們跳過該部分),則關於如何構建您的網址並不重要。隨着在我看來說,既然你想獲得的所有產品,您的網址應該是這樣

GET /products   # to return all products with their associated categories 
GET /category/24/products # to return all products belonging to a particular category 

注: - 雖然網址結構不REST的完全是一個組成部分,但在一個方面設計的網址實體/資源和標識符確實可以更容易地創建RESTful API。結構良好的網址也使它們更容易被客戶使用。

+0

雖然對於人來說,結構良好的URI可能更容易解釋,並非所有的客戶都可以這樣做。有人可能會爭辯說,指定一個懷孕的資源命名方案可能會干擾[Roy Fielding給出的規則](http://roy.gbiv。com/untangled/2008/rest-apis-must-be-hypertext-driven),因爲這可能導致實現者依賴這些路徑,因此將他們的客戶端緊密地耦合到API,而不是使用響應中找到的URI和關係。 –

+0

我的意思是它使開發人員能夠更輕鬆地開發與API交互的客戶端。其次,如果有人要硬編碼的網址,url是否可讀或不重要。遵循一個最不可思議的約定和原則是沒有錯的 – hspandher

+1

是的,這就是我正在尋找的......一個_sensible_URL模式......我知道它們只是URL,因此,我可以使用任何我感覺到的就像...我只想提供一些關於如何製作「合理」網址的建議。謝謝 :) – BorrajaX