patricksavalle / slim-rest-api
适用于PHP SLIM的工业级REST-API App类,已在https://zaplog.pro(https://api.zaplog.pro/v1)上生产使用
Requires
- php: >=8.0
- ext-apcu: *
- ext-ctype: *
- ext-json: *
- ext-openssl: *
- ext-pdo: *
- patricksavalle/slim-request-params: *
- pavlakis/slim-cli: ^1.0
- slim/slim: ^3.0
README
使用PHP 7.x语法
将默认的SLIM App类转换为生产级JSON REST-API基类
- 增加(GET、POST和header)参数验证,以增强安全性并实现自文档化
- 增加强大的异常和断言处理/为PHP解释器设置异常处理,以便“正常”错误会抛出异常,您可以捕获它们。
- 将未处理的异常转换为带有正确HTTP-STATUS的“正常”JSON响应
- 将未知路由/URL和方法的转换成“正常”的403和404 JSON响应
- 支持CLI,以接受和保护来自服务器的cronjob调用等
- 中间件用于数据库优化和memcache支持
- 查询缓存(使用APCu)
非常简单易用,只需使用SlimRestApi类代替标准Slim App类即可。
编辑slim-rest-api.ini
以进行正确的(数据库)配置。
示例index.php
<?php
declare(strict_types = 1);
namespace YourApi;
define("BASE_PATH", dirname(__FILE__));
require BASE_PATH . '/vendor/autoload.php';
use SlimRequestParams\BodyParameters;
use SlimRequestParams\QueryParameters;
use SlimRestApi\Middleware\CliRequest;
use SlimRestApi\Middleware\Cacheable;
use SlimRestApi\Middleware\ReadOnly;
use SlimRestApi\SlimRestApi;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
class YourApi extends SlimRestApi
{
public function __construct()
{
// call parent ctor before anything else!
parent::__construct();
// Add a route
$this->get("/echo", function (
ServerRequestInterface $request,
ResponseInterface $response,
\stdClass $args)
: ResponseInterface
{
return $response->withJson(QueryParameters::get());
})
->add(new QueryParameters([
'{string:.{30}},the lazy fox',
'{mandatory_int:\d{1,10}}',
'{char:[[:alnum:]]{1}},a',
'{int:\int},1',
'{bool:\bool},true',]))
->add(new ReadOnly);
}
}
// instantiate and run
(new YourApi)->run();
启动PHP服务器
php -S localhost:8000
在浏览器中打开此URL(看看会发生什么)
https://:8000/echo
https://:8000/echo?mandatory_int=1
https://:8000/echo?mandatory_int=1&bool=false
设置
-
使用Composer安装
-
更新您的composer.json以需要patricksavalle/slim-rest-api。
-
运行composer install以将slim-rest-api添加到您的vendor文件夹。
{ "require": { "patricksavalle/slim-rest-api": "^1.0" } }
-
在您的源中包含。
<?php require './vendor/autoload.php';
-
将
slim-rest-api.ini
文件复制到项目根目录并编辑(输入您的设置)
可用的中间件
此软件包包含最小限度的(可选)助手和中间件。
验证路由的参数
见:https://github.com/patricksavalle/slim-request-params
use SlimRequestParams\BodyParameters;
use SlimRequestParams\QueryParameters;
将路由设置为只读
将路由设置为只读,优化数据库引擎,通过防止对数据库的不当更新来增强稳健性。
use SlimRestApi\Middleware\ReadOnly;
$YourApp->get(...)->add( new ReadOnly );
如果您使用需要写入访问的其他中间件(例如身份验证),请在该方法之后链式调用它们,如下所示
use SlimRestApi\Middleware\ReadOnly;
$YourApp->get(...)
->add( new ReadOnly )
->add( new Authentication )
-> ...
将路由设置为CLI / 命令行专用
非常有用,对于不应通过HTTP公开的功能(例如cronjob回调或配置方法)。例如,请参阅:https://github.com/pavlakis/slim-cli
use SlimRestApi\Middleware\CliRequest;
$YourApp->get(...)->add( new CliRequest );
可用的助手
数据库 / PDO访问
使数据库访问尽可能简单。自动处理预编译语句的使用。添加简单的交易支持。
use SlimRestApi/Db;
$obj = Db::transaction(function(){
$obj = Db::execute("SELECT * FROM yourtable LIMIT 1")->fetch();
$obj->some_field = 'changed';
Db::update($obj);
return $obj;
});
所有PDO语句都可通过Db单例(魔术方法)访问。为了防止警告,请使用
/** @noinspection PhpUndefinedMethodInspection */
简单的查询缓存(使用APCu)。
INI文件 / 配置
使INI尽可能简单。在webroot中查找“slim-rest-api.ini”文件,请参阅项目示例。
Uue SlimeRestApi/Ini;
$value = Ini::get('key');
方法和方法缓存
提供call_user_func_array()的memcached版本。仅用于真正的函数(即没有副作用,结果只取决于函数参数的代码)。
use SlimRestApi/Memcache;
$value = Memcache::call_user_func_array(...);
这些函数实际上使用APCu作为缓存引擎。
贡献
分叉它。
- 创建您的功能分支(git checkout -b my-new-feature)。
- 提交您的更改(git commit -am '添加一些功能')。
- 将更改推送到分支(git push origin my-new-feature)。
- 创建一个新的Pull Request。