net.christianto/apikit-ci4

CodeIgniter 4 的 API 工具包。帮助API项目代码更整洁。

v0.1.4 2023-04-22 20:53 UTC

This package is auto-updated.

Last update: 2024-09-23 09:58:13 UTC


README

通过允许抛出 ApiException 作为早期退出,帮助代码更整洁。

这个我称之为“工具包”的包,通过允许代码通过抛出 ApiException 早期退出,来提高代码的整洁性。在 CodeIgniter 4.4(截至现在尚未发布)中,用户定义的异常处理程序适用于整个项目,这可能会对处理 API 请求的路由造成问题。

在浏览器中查看时,这些错误以 HTML 格式显示,尽管在 XHTML 请求下它作为 JSON 提供,但我们仍然希望在浏览器中查看时以 JSON 格式显示。另一个问题是,返回的字段与 ResponseTraitsAPI 命名空间不一致。

“工具包”通过提供使用 ApiException 作为早期退出的简单方法,来使代码更整洁,从而改进了 CodeIgniter 4.4 中 API 路由的异常处理,其中用户定义的异常处理程序适用于整个项目。

用法

  1. 通过 Composer 安装它

     composer require net.christianto/apikit-ci4
    
  2. 将过滤器添加到您的 API 路由中。这将捕获您抛出的所有 API 异常。

     // app/Config/Routes.php
    
     $routes->get('/-/ping', 'Api\Pinger::index', ['filter' => 'api_exception_catch']);
    
  3. 在您的控制器中,当您想报告错误时,只需抛出任何 ApiExceptionApiExceptionCatcher 将自动将您的错误与相应的错误消息屏幕正确显示。

     // app/Controllers/Api/Pinger.php
    
     namespace App\Controllers\Api;
    
     use App\Controllers\BaseController;
     use CHEZ14\ApiKit\Exceptions\ApiException;
     use CodeIgniter\API\ResponseTrait;
    
     class Pinger extends BaseController
     {
         use ResponseTrait;
    
         public function index()
         {
             $request = request();
    
             if ($request->getGet('id') != '405') {
                 throw new ApiException("I cannot understand that.", 400);
             }
    
             return $this->respond([
                 "status" => true,
                 "message" => "I'm 99!"
             ], 200);
         }
     }
    

请注意,我们只捕获 ApiException 异常实例。任何其他异常都将抛给框架。

例如,请查看以下片段

public function index()
{
    $request = request();

    if ($request->getGet('id') != '405') {
        throw new InvalidArgumentException("I cannot understand that.", 400);
    }

    return $this->respond([
        "status" => true,
        "message" => "I'm 99!"
    ], 200);
}

InvalidArgumentException 不会被 api_exception_catch 过滤器捕获,因为它不是 ApiException 的实例。因此,它将被直接转发到框架的默认异常处理程序,无论它是什么。

我相信将某些异常视为有效的、有意的 API 结果,应该是可选的。捕获所有异常并将它们重新格式化为 API 结果是不可取的,因为我们无法区分这些错误是否是预期的逻辑,或者 PHP 告诉我们我们在做错事。

许可

MIT.