将API错误代码转换为异常

geo*_*org 4 php api exception

我正在研究一些API的PHP接口,它可以返回许多(最多100个)不同的错误代码.当遇到这样的代码时,我的接口应该抛出异常.我的PHP有点生疏,因此我不确定什么是最适合当今php程序员的选项:

  • MyApiThisAndThatError每个错误代码都有一个单独的类?
  • 或者有一个泛型类MyApiError并提供API错误代码作为参数?

我也愿意接受其他建议.

bub*_*bba 7

TLDR: 使用包含API错误代码的通用MyApiException类.

Ralph Schindler在http://ralphschindler.com/2010/09/15/exception-best-practices-in-php-5-3上写了一篇关于一般主题的好文章

如果您阅读了整个内容,您将看到一个示例库代码中的最佳实践部分(我已经为此上下文修改了他的示例):

// usage of bracket syntax for brevity
namespace MyCompany\Component {

    interface Exception
    {}

    class MyApiException 
        extends \RuntimeException 
        implements Exception
    {}

    class Component
    {
        public static function doSomething()
        {
            $myApiCall->doSomthing();
            if ($myApiCall->hasError) {
                throw new MyApiException($myApiCall->getMessage(), $myApiCall->getErrorCode);
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

假设上面的代码,如果要执行MyCompany\Component\Component :: doSomething(),那么从doSomething()方法发出的异常可以被以下任何类型捕获:PHP的异常,SPL的RuntimeException组件的MyCompany\Component\MyApiException,或组件的MyCompany\Component\Exception.这为调用者提供了许多机会来捕获从库中给定组件发出的异常,这是由返回的API错误引发的.此外,通过分析构成异常的类型,可以为刚刚发生的异常情况赋予更多的语义含义.