Magento 2的webapi异常处理

最近,我一直在通过使用webapi功能引入新的API端点来对Magento 2进行一些自定义。随后引发了关于Magento如何实际处理Webapi中不同响应代码的讨论。我怎样才能触发400、401、500的附加费?因此,我深入了解了更多。

TL; DR; 事实证明,这完全取决于您的代码引发的Exception类型。

在我深入研究异常做什么之前,让我们快速研究一下此逻辑的位置以及如何找到它。

为了追踪这一点,我已经知道所有api调用都要通过/rest/[your-endpoint],所以这意味着有一个Controller!该控制器在这里:https : //github.com/magento/magento2/blob/2.3-develop/app/code/Magento/Webapi/Controller/Rest.php

dispatch方法内部,您将看到以下try / catch块:

try {
    $processor = $this->requestProcessorPool->getProcessor($this->_request);
    $processor->process($this->_request);
} catch (\Exception $e) {
    $maskedException = $this->_errorProcessor->maskException($e);
    $this->_response->setException($maskedException);
}

这里的关键行是catch语句中的两行。这是$maskedException已处理的背后究竟会在状态码方面,消息到用户的响应返回所有的逻辑。

现在让我们进入错误处理器。可以在这里找到:https : //github.com/magento/magento2/blob/2.3-develop/lib/internal/Magento/Framework/Webapi/ErrorProcessor.php

maskException方法包含很多逻辑,可以弄清楚要使用的状态码,以及是否可以向最终用户隐藏原始异常。

本质上可以归结为:

  • 如果它是Magento\Framework\Webapi\Exception(别名为WebapiException)的实例,则返回该实例。此Exception类要求您定义要返回的状态码以及其他参数。
  • 的实例的Magento\Framework\Exception\LocalizedException处理方式略有不同。
  • NoSuchEntityException 将返回404(不存在)
  • AuthorizationException否则AuthenticationException将返回401
  • a的其他任何实例都是LocalizedException400。
  • 任何其他异常都将被屏蔽,并向最终用户隐藏。

有了这些信息,您可以看到我们有相当多的灵活性。例如,如果由a的实例返回的错误代码LocalizedException不符合您的要求,则只需要抛出Magento\Framework\Webapi\Exception带有所需的所需响应代码的a 。

版权属于: sbboke版权所有。

转载时必须以链接形式注明作者和原始出处及本声明。

张贴在magento2教程标签:

相关文章

0 0 投票数
文章评分
订阅评论
提醒
0 评论
内联反馈
查看所有评论