2011-01-18 40 views
0

編寫純API似乎帶來了一些挑戰。例如,我習慣於編寫winforms/asp.net應用程序,如果輸入的內容無效,我可以通過編程方式調出一個對話框/網頁。如何將控制權返回給客戶端應用程序,並再次從我的API請求輸入?

但是,API並不知道它可能執行的GUI應用程序。如果我有一個名爲TakeString(String s)將方法和字符串(S)不能超過5個字母,我將如何控制返回給客戶端,如果它是這樣的嗎?一個異常看起來像矯枉過正?如果我在方法中返回某個內容,則簡單返回將不起作用。

謝謝

+1

這聽起來可能有點過分,但我會傾向於說這是預期的行爲引發異常在這種情況下。無論事情看起來多麼微不足道,原則都是可擴展的。 – 2011-01-18 21:11:24

回答

3

一個例外是完全應該做的事情。您記錄您將只接受一個字符串作爲輸入,如果是5個字母或更少,並拋出ArgumentException否則。爲什麼會這樣矯枉過正?

在這種情況下,如果客戶端無法檢測到它們傳遞給您的內容的有效性,那麼您甚至不需要擔心替代機制:如果調用代碼對他們要發送的參數有任何疑問要通過你,它並不完全超出人類的智慧讓他們自己去檢查它。

試圖讓API對無效輸入寬容是一種災難。在合理範圍內儘可能嚴格驗證輸入。如果您強制客戶表現良好,那麼您稍後會遇到更少的問題。

2

異常是處理這種情況的最佳方法。

根據定義,如果用戶提供無效數據,這是一個例外。 客戶端應用程序需要負責處理異常並在必要時提示用戶重新輸入。你的API(正如你已經指出的)應該對客戶端應用程序一無所知,包括它是什麼類型的應用程序,所以你的API所要做的就是說:「嘿,那是無效的!」並讓客戶端應用程序的開發人員弄清楚如何處理它。

舉個簡單的例子,如果你嘗試的C#代碼下面一行:

int myInt = Convert.ToInt32("SSDS"); 

.NET框架不會嘗試向用戶重新提示。它只是拋出一個異常。

+0

很好的例子。但我想在一個WinForms應用程序中,最好再問一次,而不是拋出一個異常(異常是昂貴的等)。 – dotnetdev 2011-01-18 21:15:46

相關問題