設計RPC框架時,客戶端調用出錯是直接拋出異常好,還是返回errcode好?

我的理解:
errcode簡單性能好,多語言支持方便,但是code很多的時候,客戶端需要分別處理,容易遺漏,問題可能會被埋藏起來發現不了。

exception對客戶端更友好,代碼可以少寫很多if ... else ... 有預期外的錯誤可以及時發現。

大家怎麼看這個問題?跨語言的情形和不跨語言是否有不同?


反正在協議裡面你只有返回error和error附帶的所有信息,然後針對不同的語言可以有不同的做法,譬如說C語言你只能error然後寫一個GetRPCError函數讀詳細內容,C++和C#你就可以封裝成不同的exception類,Haskell直接就寫成CoMonad了,etc


如果你的RPC客戶端是同步的,那麼可以拋異常,用戶代碼能catch。
如果是非同步的,把結果通過回調告訴用戶代碼,那怎麼拋?誰來接?


還是 ErrorCode 吧,參考 rockeet/nark-rpc · GitHub 就是用 Error Code


盡量屏蔽C/S和本地調用兩種情景下客戶代碼的差異性吧
可能拋出異常更合適一些?


推薦閱讀:

我國的 IT 培訓機構是否坑?
程序員所積累的編程知識在十年後將有多少變得沒用?
為什麼程序語言會存在解釋型或編譯型的限制?
零基礎如何迅速學習前端?
怎麼反駁大學老師說做軟體很簡單的觀點?

TAG:Web開發 | API | 編程 | 遠程過程調用協議RPCRemoteProcedureCallProtocol |