c# - 您希望 API 如何公开错误处理?

标签 c# api exception

这个标题需要更多解释。

基本上,我正在使用一个 API,将 Web 服务包装在一个很好的分层模型中。该模型以以下形式公开内容:

var obj = MyRemoteResource.GetForId(1234, SourceEnum.ThatSource);
ApiConsumerMethod(obj.SomeProperty);  //SomeProperty is lazily loaded, and often exposes such lazily loaded properties itself
... etc ...

其中有许多不同的 RemoteResources*(每个都存在许多属性)。确实存在积极的缓存,并请求限制以防止无意中对服务器进行 DOS(并禁止调用者的 IP)。

我已经让所有这些代码正常工作,但目前我在错误处理方面并没有做太多工作。基本上,如果 API 的使用者提供了无效的 ID、Web 服务器关闭、连接超时或任何其他过多的请求层错误发生,则异常只会在访问属性时渗透。

我认为这远不理想。

所以我的问题是,我应该如何包装这些错误,以便该 API 的用户可以方便地管理它们?

我考虑过的一些路线:

  • 只需将所有异常包装在一些 API 定义的异常中,并将它们记录为已抛出。
  • 公开一个静态 ErrorHandler 类,允许用户为特定错误注册通知回调;当没有针对特定错误进行注册时,回退到上述行为。**
  • 出错时为 Null 属性,并设置 LastErrorCode

每种方法都有优点和缺点。我会很感激对他们的意见,以及我没有想到的替代方案。

如果它完全影响讨论,抛出这些异常的平台类是 WebClient .此外,WebClient 的用法非常抽象,如果需要,可以很容易地用其他下载方案替换它。

*也就是说,很多不同的类

**这会……很奇怪。但它映射到失败的全局性质。到目前为止,这是我最不喜欢的想法。

最佳答案

我不会实现花哨的错误技术(例如事件和类似的东西)。判断在何处以及如何使用异常并不容易,但这不是实现其他内容的理由。

当您通过一个不存在的 ID 请求一个对象时,您必须告诉调用者什么?直接返回null,客户端就知道不存在了,没什么好说的。

异常迫使调用者关心它。所以它们应该只用在调用者需要做一些特别的事情的地方。 Exception 可以提供为什么某些东西不起作用的信息。但如果它是用户也可以忽略的“错误”,则异常不是最佳选择。

异常有两种常见的替代方法。

  • 使用返回值来提供有关操作结果的信息。例如,logon 可以返回一个 LogonResult 而不是抛出异常。
  • 编写两个方法,一个抛出异常,一个(Try...)返回一个 bool 值。调用者决定是否要忽略“错误”。

关于c# - 您希望 API 如何公开错误处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1879079/

相关文章:

c# - 电视调谐器程序

c# - 如何修复 TcpClient Ip Header Bad Checksum

c# - 刷新 EntityFramework 中的数据

c# - 在 MVC 中绑定(bind)对象数组

c# - 如何查找运行 WPF 应用程序时抛出的异常?

c++ - 继承和析构函数 - 理论问题 - C++

c++ - 如何在运行时检查 Win API 函数支持?

objective-c - 创建一个 Objective-C API

javascript - 为什么在映射此数组时出现空错误?

python - 如何在 tkinter 中使无声异常变得更响亮?