2017-02-16 86 views
0

我有一個關於在web API中返回錯誤的問題。這個Web API通常是從javascript(一個網站)調用的。 返回錯誤有兩種可能性,一種是將它們作爲字符串返回,另一種將它們作爲整數錯誤代碼返回。返回Web API中的錯誤:錯誤整數代碼或錯誤字符串?

返回錯誤的錯誤代碼的例子JSON:

{ 
    "status" : "Error", 
    "error" : 30 
} 

一個例子JSON返回錯誤作爲錯誤字符串:

{ 
    "status" : "Error", 
    "error" : "ERR_INVALID_FILENAME" 
} 

你認爲什麼是最好的方法?我在想,錯誤字符串選擇比較好,因爲以下幾點:

  • 錯誤字符串選擇改進代碼的可讀性和可維護性,通過誘導自注釋代碼。 由於,而在錯誤代碼的方法時,JavaScript開發這樣寫:

    if (result.error == 30) { do something related to files and invalidness...}

    在錯誤字符串的方法

    ,JavaScript的開發會寫:

    if (result.error == "ERR_INVALID_FILENAME") { do something related to files and invalidness...}

  • 在盛大瀏覽器渲染,HTML DOM操作和AJAX HTTP請求處理,這個小小的錯誤字符串檢查是微不足道的開銷。雖然在C++或C#應用程序中,我們顯然會使用枚舉,但我們在兩個獨立的實體(如web api和網站)中沒有這樣的選擇,並且成本收益似乎是合理的。

感謝您的輸入。

+0

我同意你的意見,但這個問題可能更適合軟件工程社區。 – jorgonor

+0

@Itay你有沒有達到任何解決方案? –

+0

@JoseFrancis只有兩個意見,我希望這個問題有更多的答案。 我最近幾天想到的另一個額外的輸入是在API中,錯誤(即使它們在JSON化時被串化)應該駐留在枚舉中,並且應該強類型化(以便可以檢查它在編譯時)。 –

回答

0
  1. 我你有多個請求相同的錯誤消息也許你可以使用某種structutre錯誤枚舉,字典,甚至列表(如果你需要multilanguge)。
  2. 你可以有某種從錯誤代碼到消息(甚至是類型,級別)的翻譯器。在很多情況下,當你需要更多的消息時:也許你會有一個freindly消息和一個調試消息,也許你需要一些類型來說這是一個阻塞味精,這只是一個警告。

  3. 您可能會向客戶端發送字符串錯誤,並且您的json大小會增加(取決於按摩長度),或者您可以在js中預加載錯誤地圖並將代碼轉換爲消息,如果消息更小再取決於),但你的客戶端將努力做到這一點。當您移動到js時,請注意瀏覽器內存限制。

0

要回答你的「字符串或整數錯誤代碼」,串的選擇是最好和足夠好代碼視角,除此之外處理錯誤,並顯示在JS正確的信息不能被考慮的問題作爲成本或開銷

作爲一種改進,我建議您可以發送適當的HTTP狀態碼,如200 for success and 400 for bad request等,以便在整個應用程序中使用。

如果您希望客戶端應用程序檢測到來自API的特定錯誤,您可以在HttpResponseMessage()的「數據部分」中包含包含錯誤狀態和代碼的模型,以便您不必始終檢查錯誤代碼。