什么时候应该抛出异常而不是在PHP中返回错误?

时间:2011-05-18 15:03:32

标签: api exception-handling error-handling php

我正在开发一个API包装器类,这是我做的第一个。 在大多数情况下,它并不太难。 达到我需要处理API返回的错误可能性的程度,但是我应该如何处理这些错误。

外部文件将调用API类,即findVenueByLocationID($locationID); 然后,此函数将构造API调用的URL和方法(POST,GET,DELETE等),并将其传递给名为makeCall的函数。

MakeCall构造完成的URL,将请求发送到服务并传回生成的XML。如果API返回错误,则它在返回的XML中。使用函数file_get_contents()调用URL。 API具有一定数量的错误代码,它将在XML中返回。

据我了解,我应该在函数makeCall中执行以下操作:

  • 在返回XML之前,检查它是否包含错误代码,如果是,则将其传递给错误处理类以处理错误。 (记录并返回客户端版本错误消息)
  • 在file_get_contents()函数周围添加一个try catch来捕获任何连接错误,即无法访问服务器?

这被认为是最好的做事方式吗? 我应该在调用makeCall时添加try catch而不是在file_get_contents内部吗? 我是否应该为XML返回的每个错误抛出异常并使用错误类处理它们?

我正在寻找的那种答案还应该包含一个资源的链接,该链接解释了一些围绕使用API​​包装器或类似事件进行错误处理的最佳实践。

提前感谢您的时间和回复。


编辑: 在与我们的CTO交谈之后,当前版本的PHP中的错误是异常,我应该抛出异常并将异常处理留给调用者。请记住,我正在为API实现一个包装类。想法?

1 个答案:

答案 0 :(得分:3)

您应该首先了解异常和错误之间的区别:错误发生,异常是例外。

例如,输入错误密码(无法登录)的用户会收到错误消息。当检查密码时数据库不可用时,您将获得异常(并且希望能够正常处理该异常)。

因此,如果您从第三方获取XML,您可能会认为它是有效的。但可能会有错误。如果API给你一个错误(找不到位置),那么你也可能会出错。只有在特殊情况下(你已经硬编码了一个你知道肯定会永远存在的位置)这可能是一个例外。

最简单的例外是连接错误:那肯定是错误的。另一个简单的事情是您可以期待的API中的错误,例如“没有新信息”(仅作为示例):这是内部错误。在某个地方你必须画一条线,但在大多数情况下,有点清楚什么是例外,什么只是可能发生的错误。