2017-03-09 63 views
0

我的REST API格式:REST URL格式正確

http://example.com/api/v1.0/products - get all products 
http://example.com/api/v1.0/products/3 - get product with id=3 

此外,產品可以orginized成產品組。

什麼是正確的方法,根據REST最佳實踐來獲取所有產品組:

http://example.com/api/v1.0/products/groups 

http://example.com/api/v1.0/productgroups 

...

另一種選擇?

回答

1

我不能RISHABH瑞裏同意,因爲http://example.com/api/v1.0/products/groups可能導致歧義。

我會把我的錢放在http://example.com/api/v1.0/productgroups甚至更​​好http://example.com/api/v1.0/product_groups(更好的可讀性)。

我有過類似的討論在這裏:Updating RESTful resources against aggregate roots only

問:關於/產品/功能/或產品功能的東西, 有這個達成共識?你知道有什麼好的來源來確保 這不僅僅是品味的問題嗎?

答:我認爲這是誤導。 我期望在所有產品中獲得所有功能 ,而不是獲得所有可能的功能。但是,要 說實話,很難找到任何源,直接談論這個 問題,但有一堆物品,人們不要嘗試 創建嵌套的資源,如/產品/功能,但這樣做 separately

所以,我們不能肯定http://example.com/api/v1.0/products/groups將返回所有可能的組或只是與所有現有產品相關的所有組(怎麼樣尚未與該產品尚未連接一組?)。

爲避免這種歧義,您可以在文檔中添加一些註釋。但你可以準備http://example.com/api/v1.0/product_groups,一切都很清楚。

+0

有沒有一般的規則,但看看這兩個微軟azure休息api網址,一直到op.- https://management.azure.com/subscriptions/$subs/resourceGroups/$resGrp/providers/Microsoft.Compute/virtualMachines/rishabhvm/start?api-version = 2015-05-01 https://management.azure.com/subscriptions/$subs/resourceGroups/$res_grp/providers/Microsoft.Compute/virtualMachines/rishabhvm?api-version=2015 -05-01 又如另一個例子,想想以後他是否想要獲取關於「產品」實體中某個其他項目的信息。由此他必須爲同一類別中的不同項目建立不同的關鍵字。 –

+0

@RishabhSoni情況並非如此。來自Azure的示例顯示模式'/ resources/$ id/sub_resource/$ subresource_id/...'問題是關於'/ resources/subresources'。要獲取有關一個子資源的信息:'/ products/$ id/product_group'。另:'/ products/$ id/price'等等。 'Product_groups'是一個字典。你能解釋併發症嗎?我不確定我們是否在談論同一點。 –

+0

@RishabhSoni'Product_groups'是一本字典。 '/ products/$ id/product_group'可能會鏈接到'product_groups/$ id'。資源之間的關係,這是休息的本質。 –

1

如果您正在爲您的客戶開發Rest API,則不應該依賴id。而是建立一個有意義的縮寫並將它們映射到服務器端的實際ID。

如果這不可行,而不是使用 http://example.com/api/v1.0/products/3您可以使用http://example.com/api/v1.0/products?product_id=3,然後您可以在文檔中提供「product_id」說明。基本上告訴客戶使用product_id的方法。 在短網址必須是有意義的,遵循pattern.The可變部分必須通過URL查詢

有了這個(部分?或者POST有效載荷之後)發送方法來查詢服務器也很重要。如果客戶端正在嘗試向服務器獲取某些內容,則應使用「GET」http請求,如果它正在上傳新信息,則使用類似POST http請求;如果正在更新或創建新資源,則使用「PUT」請求。

所以通過這個類比http://example.com/api/v1.0/products/groups更合適,因爲它遵循一個模式(產品中的組),而productgroups更像是一個沒有模式的關鍵字。

類似於模式的目錄更容易理解。就像在文件系統(C:\ Program Files \ WinRAR)中一樣,每個部分都讓我們更加普遍化。

您還可以自定義這個特定基團 - http://example.com/api/v1.0/products/groups?id=3

+0

感謝您的回答,但我的問題主要是關於'/ products/groups'和'/ productgroups'模式和規則如何確定。 – alexanoid

+0

@alexanoid,看看編輯是否解決你的查詢。 –