tnapf / api-skeleton
此软件包已被放弃且不再维护。未建议替代软件包。
API 框架
v0.5.2
2023-06-19 03:41 UTC
Requires
- php: ^8.1
- commandstring/utils: ^1.7
- tnapf/env: ^v1.1.1
- tnapf/router: ^v6.0.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.16
- phpunit/phpunit: ^10.1
- xheaven/composer-git-hooks: ^3.0
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 tests
或 composer tests:coverage
生成覆盖率报告。