2017-07-26 52 views
0

我們有一個網站來連接貨物的買家和賣家。基於請求的body參數,API可以讓restful POST api發回兩個不同的資源嗎?

我們正在設計POST API以捕捉買家對任何賣家產品的興趣。 API Uri和請求正文如下所示:

/api/lead/ 
{ 
    "name":"xyz", 
    "mobile": "00984343", 
    "stockid":4 
} 

API是POST,因爲我們會將此信息保存到數據庫中。

目前,如果「stockid」是屬於我們的優質客戶股票中,API發回賣家細節API響應正文:

{ 
    "sellername":"abc", 
    "sellermobile":"75654647", 
    "selleraddress": "faje street, curl" 
} 

如果「stockid」是屬於我們正常客戶的股票,該API發送該產品的背面完整細節API響應體(和不發送回賣方詳情)

{ 
    "description": "good 2nd hand mobile", 
    "purchasedate": "24 july,2017", 
    "purchaseprice": "10000" 
} 

同一職位的API發回2種不同類型的資源(一個是賣方詳情,另一種是股票的詳細信息)基於股票ID。

以這種方式設計API,即根據某些請求主體參數發送回各種類型的響應的POST API是否安定?

回答

0

這種做法看起來有問題。我個人不會那樣做。

建議1:返回正常客戶的產品詳細信息,產品詳細信息優質銷售詳細信息,作爲豐富迴應的形式。由於這兩個響應大部分是一致的,你仍然有你想要的功能。

編輯:增加了我想到的更多建議。

建議2:由於這些反應基本不同,也許應該由不同的資源返回。在這種情況下,請勿在POST期間返回數據,只需使用ID撥打api/seller/{stockid}api/product/{stockid}即可返回響應,如果id對於特定資源無效,則返回No content。缺點是,您需要撥打很多電話,這使得架構複雜化。

建議3:爲了避免完全不同的響應對象,這是令人困惑的,並且使客戶端更難映射它們,請使用一些包裝對象,它提供了一些「類型」屬性和對象。例如:

{ 
    "type" : "premium", 
    "data" : { 
    "sellername":"abc", 
    "sellermobile":"75654647", 
    "selleraddress": "faje street, curl" 
    } 
} 

不完美,但在我看來比兩個完全不同的反應更好。

+0

「POST應該用於創建對象」 - 請爲此提供參考。 –

+0

不確定什麼可以作爲客觀參考,但資源在這[示例1]上相當一致[http://www.restapitutorial.com/lessons/httpmethods.html] [示例2](http://restcookbook.com/HTTP %20Methods/put-vs-post /) –

+0

從您的第一個參考文獻開始,第二句話:「在某些場合下,使用PUT創建資源或使用POST更新資源是很有可能的,有效的甚至是首選。從您的第二個參考中,在「PUT」下:「但是,PUT也可用於在資源ID由客戶端而不是服務器選擇的情況下創建資源。」 –

相關問題