2013-12-10 157 views
0

我在我的域模型中有一個特定的案例,現在我有一些難以以其他方式設計這種情況。REST API - 將資源設計爲主要和子資源

我有我的域名3個實體:訂單,賣家和公司

公司就像是屬於小公司另一家公司(大),喜歡的品牌。例如:Zappos是亞馬遜的品牌。

賣方是一個公司,可以賣品牌門戶網站/產品,例如:市場。

最後,訂單可以屬於一個品牌(例如:亞馬遜或Zappos)或賣家。

我認爲在訂單實體作爲我的API的主要資源:

GET order?status=NEW 
GET order/{id} 

的問題是:我該怎麼設計我的API,例如,檢索品牌或者一個所有打開的訂單賣家?

我不能以這種方式(如下圖)創建,因爲我有兩個子資源被稱爲「秩序」兩型動物主要資源:

GET seller/{id}/order?status=NEW 
GET company/{id}/order?status=NEW 

如果我以這種方式(如下圖)創建我無法檢索訂單由銷售者或某公司過濾:

GET order?status=NEW 

這種方法的另一個問題是,由於訂單一直屬於資源(公司或賣家),所以它似乎很奇怪獨此資源存在,作爲主資源。

什麼是解決這個問題的最好方法?

回答

1

考慮關係的方式分離數據,以便你可以做:

GET /orders 
GET /sellers 
GET /companies 

和:

GET /orders/{id} 
GET /sellers/{id} 
GET /companies/{id} 

每個將返回定義要行的默認號碼是什麼,以默認的排序順序,或者如果指定了id,那個特定的行。

當你需要建立關係查詢,你可以這樣做:

GET /orders/?status=new&brand=zappos 
GET /sellers/?status=new&company=amazon 
GET /sellers/?status=closed&company=amazon&limit=10 

另外,如果你需要一個更先進的關係查詢,你可以設計你的後端處理簡單的查詢:

進行urlencode這樣的:status==new,date_created>1386652468

GET /orders/?ql=status%3D%3Dnew%2Cdate_created%3E1386652468 

不知道你的常量我不一定建議這是最好的/唯一的方法,但分離這樣的數據是API的最佳實踐。您可以根據登錄的人來控制哪些品牌可見。如果您需要某人管理多個品牌,會發生什麼情況?