2016-08-19 40 views
3

我想實現一個rest服務,它接收一個對象並在對象有資格使用某些參數進行處理時返回。問題是取決於對象是否合格,響應的結構是非常不同的。作爲對象應該被處理的例子,它與處理類型和優先級相關聯。當它不符合條件時,返回原因。哪一個是最簡單的方法來爲相同的請求返回不同的結構。有三種選擇我可以想到,但隨時可以添加其他選項。爲同一請求返回不同結構的最簡單的方法

選項A:
與字段包含返回數據作爲包絡線,其被構造

{ 
    "eligible": bool, 
    "data": { 
     // Data depending on whether elbile or not 
    } 
} 

選項B:
使用不同的HTTP狀態代碼和結構相應JSON。這是不清楚的,因爲它不是請求中的錯誤,而是有效的迴應。

選項C:
在符合條件或不符合條件的情況下對數據發送使用不同的字段,並讓一個字段爲空。

{ 
    "eligible": bool, 
    "dataEligible": { 
     "processingType": "", 
     "priority": 0 
    } 
    "dataNonEligible": { 
     "reason": "", 
    } 
} 

回答

1

我認爲這對於422 Status Code會是很好的用例。它還不是官方的ISO,但很多公司(即Twitter)正在使用它。

基本上它是發生在你身上的 - 資源無法處理,儘管服務器理解請求並且它是正確的語法。


選項C也看起來合理,因此使用最適合您需要的選項。我不會推薦A,因爲對於使用靜態類型語言(即Java)的消費者而言,針對相同請求的不同格式是個大問題。

+0

感謝您的回答。如果我錯了,我認爲422也是正確的。但這並不意味着發送請求有語義錯誤? – PKuhn

+0

不,422沒有任何錯誤,但服務器由於客戶未知的原因仍然無法處理 – libik

相關問題