2017-07-25 41 views
3

我們有股票網站,我們幫助買家連接賣家。我們正在創建API來讓買家推送他​​們的聯繫信息並找回賣家的詳細信息。這是交易並登錄到我們的數據庫中。我們已經創建了以下API:REST:如果API發送回兩種類型的響應,它會被認爲是安靜的嗎?

請求是POST,網址是這樣的:

/api/leads 

請求正文是這樣的:

{ 
    "buyermobile": "9999999999", 
    "stockid": "123" 
} 

的迴應是這樣的:

{ 
    "sellermobile" : "8888888888", 
    "selleraddress": "123 avenue park" 
} 

我們有一個新的要求,即我們需要發回PDF URL(而不是「sellermobile」&「selleraddress」)。此PDF網址將包含賣家詳細信息,以防其來自我們的客戶之一。

我們已經修改了相同的API,現在請求主體的樣子:

{ 
    "buyermobile": "9999999999", 
    "stockid": "123", 
    "ispdf": true 
} 

的迴應是這樣的:

{ 
    "sellerdetailspdf" : "https://example.com/sellerdetails-1.pdf", 
} 

是否RESTFUL做到這一點?或者我們應該創建單獨的API來獲得PDF格式的響應?

回答

0

這對我來說很好 - 同一類型的輸入應該給同型反應,但在你的情況你有兩種不同類型的輸入 - 一個與「ispdf」標誌和一個沒有。因此,使用兩種不同類型的響應進行響應是一致的,一種使用PDF鏈接,另一種使用不帶響應。

這仍然是你會想文檔,但基本上它是一個正確實施。

+0

任何休息指南/ url鏈接,暗示對於不同的輸入,你可以返回不同的迴應? – maverick

4

我不會這樣接近它。當你需要添加XLS時會發生什麼?您是否也在請求中添加「isxls」?

事情我會考慮:

使用內容協商一個MIME類型。發佈相同的請求,並在Accept標題中指定您希望返回的內容--JSON,PDF等。然後,您實際上獲取報告而不是指向報告的鏈接,這可能會或可能不會更好。

- 或 -

在典型的潛在客戶響應中包含一個鏈接。

{ 
    "sellermobile" : "8888888888", 
    "selleraddress": "123 avenue park", 
    "_links": { 
     "seller-details-pdf": "https://example.com/sellerdetails-1.pdf" 
    } 
} 

- 或 -

支持,用於指定響應類型的查詢參數。

- 或 -

都有指定類型的反應,而不是一個布爾的一個屬性。當您添加新的響應類型時,可以更加清晰地擴展。

前兩個選項都有,你不要求客戶處理多響應類型的單個請求獎金。這不是任何規範所禁止的,但這對客戶來說很煩人。儘量不要惹惱你想要付給你的人。 :)

+0

「MIME類型的內容協商」它將如何工作,我需要在應用程序上使用此api(android和ios)?任何例子? – maverick

+0

@sahil Android和iOS都支持在HTTP POST請求中設置標頭。 HTTP規範中記錄了Accept頭的預期用法:https://tools.ietf.org/html/rfc7231#section-5.3.2。 –

+0

只是好奇,在這種情況下,服務器會爲客戶端下載pdf併發回下載的PDF文件作爲迴應? – maverick

1

再次實施對我來說很好,但是你可能看打破了PDF的URL返回到另一端點可能像api/lead/pdf這樣,你的請求體是同爲api/lead和隨後的所有端點/lead下。允許您的路由和其他代碼處理小部分任務,而不是處理多個標誌和多個代碼路由的路由。

相關問題