nexus-rest-api / nexus
轻量级且快速的PHP框架,用于构建RESTful API。
Requires
- php: ^7.4 || ^8.0
README
Nexus php 是一个轻量级且快速的PHP框架,用于构建RESTful API。
安装
通过Composer轻松安装
composer require nexus-rest-api/nexus
入门
APP
Nexus rest api 使用一个app装饰器来处理所有功能。创建app时,还可以传递配置。配置中值的顺序不重要,但键名重要。
<?php use Nexus\App; $config = [ 'prefix' => 'api', 'db_connection' => [ 'host' => 'localhost', 'user' => 'root', 'password' => '', 'database' => 'nexus' 'port' => 3306 // optional (default 3306) ], 'CORS' =>[ 'allowedOrigins' => ['https://', 'https://*.example.com'], 'allowedHeaders' => ['x-allowed-header', 'x-other-allowed-header'], 'allowedMethods' => ['DELETE', 'GET', 'POST', 'PUT'], 'exposedHeaders' => ['Content-Encoding'], 'maxAge' => 0 ] ] $app = new App($config);
环境
该框架允许两个不同的环境,即development
和production
。区别在于,在开发中如果发生错误,将显示堆栈跟踪。环境是app配置的一部分。默认情况下,开发环境被设置为env。
<?php $config =[ "ENV" => "production" ]
.htaccess
需要.htaccess文件才能使路由器工作。
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [L]
服务APP
如果您使用Composer,则以下脚本在composer.json
文件中,当在终端中输入命令composer start
时,将在9000端口启动app。
"scripts": { "start": [ "Composer\\Config::disableProcessTimeout", "php -S localhost:9000 -t ./" ] }
路由器和请求
所有请求都由路由器处理,请求使用字符串作为名称,使用回调作为请求的逻辑。路由器以json格式返回数据。请求中参数的顺序和格式不重要。本框架支持以下请求
- GET
- POST
- PUT
- DELETE
示例
<?php // Get request $app->get('/ping', function(Request $request) { return [ 'code' => 'OK', 'message' => 'pong' ]; }); // Post request $app->post('/blog', function(Request $request) { return $request->body(); }); // Put request $app->put('/blog/:id', function(Request $request) { $param = $request->params()['id']; // do something with $param }); // Delete request $app->delete('/blog/:id', function(Request $request) { $param = $request->params()['id']; // do something with $param });
重要请求对象参数
路由器组
路由器可以将路由分组并设置该组中所有路由的前缀。注意,目前不支持嵌套组。
示例
- 请求 /api/health/ping
- 请求 /api/health/status
<?php $app->group(['prefix' => '/health'], $app->get('/ping', function(Request $request) { return [ 'code' => 'OK', 'message' => 'pong' ]; }) ,$app->get('/status', function(Request $request) { return [ 'code' => 'OK', 'message' => 'pong' ]; }) );
中间件
中间件是一个传递给请求的额外函数,在处理请求之前执行。中间件还可以通过不调用$next()
函数来阻止路由执行。
示例
<?php $middleware = function(Request $request, Closure $next) { echo "this is a middleware function"; $next(); }; // The order of the parameters is not important $app->get('/ping', $middleware, function(Request $request) { return [ 'code' => 'OK', 'message' => 'pong' ]; });
数据库连接
在app的配置中,您可以配置app使用的数据库。app允许您使用dbConnect()
和dbDisconnect()
函数按需打开和关闭连接。以下示例使用预处理语句来防止SQL注入。也可以使用普通语句。
<?php $findUser = function(App $app, String $id){ $app::dbConnect(); // Opens the connection with the database // Prepared statement $statement = $app()::db()->prepare( 'SELECT * FROM user WHERE id = ?' ); $statement->bind_param('ss', $id); $statement->execute(); $result = $statement->get_result()->fetch_all(MYSQLI_ASSOC); $app::dbExit(); // Closes the connection with te database return $result; };
模块
如果您想向app添加额外功能,例如日志记录器。这可以通过使用append模块方法完成。这需要一个键(字符串)和一个值(对象或闭包)。
// Appending the module $app::appendModule('logger', new Logger()); // Accessing the appended module $logger = $app:requireModule('logger'); $logger::logAction('...');
错误处理
路由器内置了错误处理,此框架提供了一些可以在应用程序中抛出的异常。这些异常将由路由器捕获,并将错误消息发送给最终用户。
不同的异常
<?php // Use case $app->get("/users", function(Request $request) { if(!validateToken($request->httpAuthorization)) throw new UnauthorizedException("User is not logged in"); });
优化应用程序
完成应用程序开发后,您可以将此脚本和配置选项添加到您的composer.json文件中,以优化Composer自动加载器。**注意:在开发期间使用构建命令可能会导致问题**!
"scripts": { "start": [ "Composer\\Config::disableProcessTimeout", "php -S localhost:9000 -t ./" ], "build": [ "composer update --optimize-autoloader", "composer dump-autoload --optimize" ] }, "config": { "optimize-autoloader": true }
建议与该框架一起使用的包
- firebase/php-jwt
- symfony/dotenv
- ramsey/uuid