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

Api 在PHP中,什么时候应该抛出异常而不是返回错误?,api,exception-handling,error-handling,php,Api,Exception Handling,Error Handling,Php,我正在开发一个API包装器类,这是我做的第一个。 在大多数情况下,这并不难。 到了我需要处理API返回的潜在错误的地步,尽管我对如何处理这些错误感到困惑 外部文件将调用API类,即,findVenueByLocationID($locationID) 然后,此函数将构造API调用(POST、GET、DELETE等)的URL和方法,并将其传递给名为makeCall的函数 MakeCall构造完成的URL,将请求发送到服务并传回生成的XML。如果API返回错误,则该错误在它返回的XML中。使用函数文

我正在开发一个API包装器类,这是我做的第一个。 在大多数情况下,这并不难。 到了我需要处理API返回的潜在错误的地步,尽管我对如何处理这些错误感到困惑

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

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

据我所知,我应该在函数makeCall期间执行以下操作:

  • 在返回XML之前,检查它是否包含错误代码,如果包含,则将其传递给错误处理类以处理错误。(记录并返回客户端版本错误消息)
  • 在file_get_contents()函数周围添加一个try catch以捕获任何连接错误,即无法访问服务器
这被认为是做事情的最佳方式吗? 我是否应该在调用makeCall时添加try-catch,而不是在其内部添加round-file\u-get\u内容? 我应该为XML返回的每个错误抛出一个异常,并使用错误类处理它们吗

我正在寻找的答案还应该包含一个指向资源的链接,该资源解释了一些关于使用API包装器或诸如此类的错误处理的最佳实践

提前感谢您的时间和回复


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

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

例如,键入错误密码(无法登录)的用户会收到错误。当数据库在检查密码时不可用时,您将得到一个异常(希望能够优雅地处理该异常)

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


最微不足道的例外是连接错误:那肯定是出了什么问题。另一件容易的事情是API中可能出现的错误,比如“无新信息”(仅作为示例):这是一个内部错误。在某些地方,你必须划出一条界限,但在大多数情况下,很明显什么是例外,什么只是可能发生的错误。

file\u get\u contents()
在无法检索或读取资源时会触发警告,因此尝试…捕获对你没有帮助。如果您使用诸如
Zend_Http_Client
之类的类,您将能够更容易地拦截失败。感谢您对这方面的思考。看来我们大学漏掉了一些重要的信息。。。是否可以更好地解释为错误是在数据处理出现问题时,异常是在过程无法完成时?我想这将是一个常用的变体,在这种情况下可能有用,但请记住,没有“真正的”和绝对的解决方案,只有每种情况的指导方针。例如,如果您遇到了一种情况(已知连接错误,甚至可能您正在测试连接),其中一个进程预计不会完成,那么您可以将其称为错误。因此,在这种情况下,您的连接会抛出一个异常(因为对于连接来说,它很奇怪:它不能做它应该做的事情),但您会捕获它并在测试程序中返回一个错误。