tnapf/api-skeleton

此软件包已被放弃且不再维护。未建议替代软件包。

API 框架

安装: 19

依赖项: 0

建议者: 0

安全: 0

星标: 0

关注者: 1

分支: 1

开放问题: 0

类型:项目

v0.5.2 2023-06-19 03:41 UTC

This package is auto-updated.

Last update: 2024-05-20 05:44:01 UTC


README

设置

composer create-project tnapf/api-skeleton

初始化

Bootstrap 目录内创建一个新文件,然后在 Bootstrap/requires.php 中引用它。

路由

创建端点

首先在 App\Controllers 目录内创建一个继承自 Tnapf\Router\Interfaces\ControllerInterface 的类,并将 #[Route] 属性添加到该类中。

默认情况下,每个 URI 都以 /api 前缀,因此下面的路由可以通过 /api/ping 访问。您可以通过在 Bootstrap/environment.php 中设置 API_PREFIX 常量来更改此前缀。

<?php

namespace App\Controllers;

use Core\ApiResponse;
use Core\Routing\Route;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Tnapf\Router\Interfaces\ControllerInterface;
use Tnapf\Router\Routing\RouteRunner;

#[Route('/ping', ['GET'])]
class Ping implements ControllerInterface
{
    public function handle(
        ServerRequestInterface $request,
        ResponseInterface $response,
        RouteRunner $route
    ): ResponseInterface {
        return ApiResponse::success();
    }
}

注意:您可以通过设置路由的优先级来决定路由加载的顺序。默认优先级为 0。

捕获异常

首先在 App\Catchers 目录内创建一个继承自 Tnapf\Router\Interfaces\ControllerInterface 的类,并将 #[Catcher] 属性添加到该类中。

<?php

namespace App\Catchers;

use Core\ApiResponse;
use Core\Routing\Catcher;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Tnapf\Router\Exceptions\HttpNotFound;
use Tnapf\Router\Interfaces\ControllerInterface;
use Tnapf\Router\Routing\RouteRunner;

#[Catcher(HttpNotFound::class)]
class E404 implements ControllerInterface
{
    public function handle(
        ServerRequestInterface $request,
        ResponseInterface $response,
        RouteRunner $route
    ): ResponseInterface {
        return ApiResponse::error('Endpoint Not Found', 404);
    }
}

注意:您可以通过设置捕获器的优先级来决定捕获器加载的顺序。默认优先级为 0。

创建响应

有一个名为 ApiResponse 的辅助类,可以用于创建响应。

use Core\ApiResponse;ApiResponse;

ApiResponse::success(200);
/**
 * {
 *   "success": true
 * }
 */

ApiResponse::successWithData(['foo' => 'bar']);
/**
 * {
 *   "success": true,
 *   "data": {
 *     "foo": "bar"
 *   }
 * } 
 */

ApiResponse::error('life is pain', 500);
/**
 * {
 *   "success": false,
 *   "message": "life is pain",
 *   "code": 500
 * } 
 */

ApiResponse::errorWithData('life is pain', ['foo' => 'bar'], 500);
/**
 * {
 *    "success": false,
 *    "message": "life is pain",
 *    "code": 500,
 *    "data": {
 *      "foo": "bar"
 *    } 
 * }
 */

单元测试

创建测试

App\Tests 目录内创建一个继承自 Tests\ApiTestCase 的类。这将启动应用程序到测试环境,以便您可以对端点进行测试。您还将获得一些额外的辅助方法。请参阅 Tests\PingTest.php 以获取示例。

运行测试

使用 composer testscomposer tests:coverage 生成覆盖率报告。

依赖项

开发依赖