getinstance/api_util

核心 getinstance API 代码


README

基于 Slim(前几版主要基于 Silex 和 Symfony 组件)构建的 Web 和 REST 工具

初始安装

composer require getinstance/api_util

生成骨架

您不需要这样做,但这可以节省时间。

骨架:服务器模式

待办事项 - 创建仅包含核心的生成。

api_util 包含一些骨架生成工具。这个工具生成核心组件和一个 API 端点

$ php ./vendor/getinstance/api_util/bin/tools.php genendpoint dashserver getops\\dashboard\\server hello world,universe
  • genendpoint 是子命令
  • dashserver 是应用名称。它应该仅包含字母数字字符,不允许使用符号、标点符号或空格。
  • myorg\\dashserver 是包名(需要双反斜杠:包将作为 myorg\dashserver 在命名空间和 use 语句中使用呈现)
  • hello 是端点名称 -- 因此我们将调用 GET /helloPOST /hello
  • world,universe 是与端点相关的字段。字段之间不应该有任何内容,只有逗号。

此命令将生成控制器、命令、模型类、映射器。它将为 Mariadb 生成 SQL。这将需要调整,因为它没有添加索引,并且只使用 VARCHAR 数据类型。

您可以多次运行此工具以生成不同的端点,系统将拒绝覆盖现有文件,而是将它们写入本地的 tmp/ 目录。然后您可以剪切和粘贴生成的内容。

待办事项 - 改进工具以支持多个端点的描述符。允许将新端点注入现有系统(可能使用源中的注释标记)。

在上面的例子中 genendpoint 写了

  • /scripts/* -- 模式和小脚本
    • 特别是这里看看 create-db.sqlcreate-schema.sql。第一个创建数据库实例和相关数据库用户。第二个是第一个脚本生成的数据库模式定义。
  • web/index.php -- 系统的入口点。
  • src/controller/Controller.php -- 实现路由的 InitWareInterface 组件。在主要的 index.php 中,向 api_util FrontController 组件中添加了这个实例,该组件处理应用程序的生命周期。
  • src/command/*.php 类用于实现获取、PUT、POST、DELETE 端点以操作 Hello 数据。
  • src/model/Hello.php -- 封装端点数据的模型类。
  • src/model/HelloMapper.php -- 将 Hello 数据写入和从数据库检索
  • dockerbuild/docker-compose.yaml -- 运行项目在 Docker 容器中的文件

骨架:Web 模式

api_util 起初是作为生成微服务 API 的快速方式编写的。然而,它也被证明作为 Web 微框架也很有用。因此,它已经发展到支持许多与 Web-UI 相关的工具。

以下是生成 Web UI 骨架的方法

php ./vendor/getinstance/api_util/bin/tools.php genweb dashfe getops\\dashboard\\fe

此命令生成与 genendpoint 命令相同的核心元素。不过,它创建了一个单独的控制器命令文件:src/command/Main.php。它还生成一个 Twig 模板。

以下是生成文件的概述

  • /scripts/* -- 模式和小脚本
  • web/index.php -- 系统的入口点。
  • src/controller/Controller.php -- 实现路由的 InitWareInterface 组件。在主要的 index.php 中,向 api_util FrontController 组件中添加了这个实例,该组件处理应用程序的生命周期。
  • src/command/Main.php -- 一个中央控制器类,可以根据需要扩展新的控制器方法。
  • dockerbuild/docker-compose.yaml -- 运行项目在 Docker 容器中的文件

在 Docker 中运行骨架

无论您是生成了一个API项目还是Web项目,如果您已安装Docker,则应能够以相同的方式运行一个测试实例。

docker compose up

这将生成一个运行在PHP内置服务器上并在localhost端口8080可访问的实例。如果我们经常这样做,您可能希望创建一个API实例和一个Web实例,它们可以协同工作。我们建议您将它们的docker-compose.yaml文件合并为一个单一实例,该实例位于您的所有存储库之上。在这种情况下,您可能需要调整公共端口,以避免冲突。

待办事项 - 从Web生成模板中移除MariaDB容器

InitWare:路由和配置

主要控制器将调用实现getinstance\api_util\controller\InitWareInterface的任何类。以下是这个接口

namespace getinstance\api_util\controller;

use DI\ContainerBuilder;
use Slim\App;


interface InitWareInterface
{
    public function handleConfiguration(ContainerBuilder $builder, Conf $conf): void;
    public function handleRouting(App $app): void;
}

您可能只需为路由创建一个实现类。您可以通过调用FrontController::addInitWare()将其添加到系统中,在index.php中完成此操作。

require_once __DIR__.'/../vendor/autoload.php';

use getinstance\api_util\controller\FrontController;
use sulis\admonkey\controller\Controller;

$controller = new FrontController();
$controller->addInitWare(new Controller());
$controller->init(['confpath'=>__DIR__."/../conf/", 'confname'=>'myapp']);
$response = $controller->execute();