patricksavalle/slim-rest-api

适用于PHP SLIM的工业级REST-API App类,已在https://zaplog.pro(https://api.zaplog.pro/v1)上生产使用

v1.7 2022-11-04 09:18 UTC

This package is auto-updated.

Last update: 2024-09-13 22:44:09 UTC


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。