我遇到了一個問題,我無法找到關於在REST風格的Web服務中執行CRUD操作的常用標準或實踐的信息,這些信息的主鍵是其他主鍵資源ID。我們使用MVC WebApi來創建控制器。例如,我們有三個表:複合關鍵資源REST服務
Product
:PK =產品編號Part
:PK = PARTIDProductPartAssoc
:PK =(產品編號,PARTID)
的產品可以有許多零件和零件可以是許多產品的組成部分。關聯表還包含與關聯本身相關的其他信息,而不需要進行編輯。
我們有ProductsController
和PartsController
類,處理一般的GET/PUT/POST/DELETE使用路由模板操作定義爲:{controller}/{id}/{action}
使得下面的IRI的工作:
- GET,POST
/api/Products
- 返回所有產品,創建新的產品 - GET,PUT,DELETE
/api/Products/1
- 檢索/更新/刪除產品1 - GET,POST
/api/Parts
- 返回各地,創建一個新的部分 - GET,PUT,DELETE
/api/Parts/2
- 檢索/更新/刪除部分2 - GET
/api/Products/1/Parts
- 獲取產品1 - GET
/api/Parts/2/Products
所有部分 - 得到所有產品的哪個部分2是一個組件
在哪裏我遇到麻煩的是如何爲ProductPartAssoc資源定義路由模板。路線模板和IRI應該如何獲取關聯數據? 秉承慣例,我希望是這樣的:
- GET,POST
/api/ProductPartAssoc
- 返回所有協會,創建一個協會 - GET,PUT,DELETE
/api/ProductPartAssoc/[1,2]
- 檢索/更新/刪除產品1和部分之間的關聯2
我的同事們發現儘管這不美觀,並認爲它會更好,沒有ProductPartAssocController
類所有,而是添加其他方法到ProductsController
管理協會的數據:
- GET,PUT,DELETE
/api/Products/1/Parts/2
- 獲取數據的產品1和第2部分,而不是數據之間的關聯對於部分2作爲第1部分的成員,這將通常是基於諸如/Book/5/Chapter/3
其他實施例的情況我在其他地方見過。 - POST這裏沒有線索,他們期望IRI看起來像。不幸的是,他們是決策者。
在一天結束時,我想我所尋求的是驗證,或者我可以指出的方向,並且說:「看,這是別人的做法。」
處理由複合鍵標識的資源的典型做法是什麼?
對於鏈接實體,您可以建模您的uri空間,如OData協議爲Odata服務指定的那樣。我並不是建議實施OData服務,但它值得關注,因爲它提供了有用的見解,並且更接近您的問題。在這裏尋找管理實體之間的鏈接:http://www.odata。org/documentation/odata-v2-documentation/operations /#29_Manipulating_Links – 2013-04-23 23:21:01
ProductPartAssoc的外觀如何?而且,它支持哪些CRUD操作? – 2013-04-24 01:55:04
該示例是任意的,但ProductPartAssoc類可能看起來像(對於簡潔性 - 這裏是有限的空間感到抱歉):class ProductPartAssoc {int ProductId; int PartId; int amountUsed;十進制assemblyCost; int installerId; }並需要支持所有四個CRUD操作 - 創建,檢索,更新,刪除。 – Mitselplik 2013-04-24 15:17:32