yokel/yapi

适用于Bitrix的类似REST的API库

v1.4 2023-09-17 13:31 UTC

This package is auto-updated.

Last update: 2024-09-17 15:41:29 UTC


README

用于在Bitrix上组织REST-api的库

系统要求

  • PHP 7及以上
  • Bitrix 14+

安装

通过composer

composer require yokel/yapi

使用

默认处理所有类型的http请求:http(s)://yoursite.name/yapi/[controller]/[method].[format]

将调用控制器[controller][method]方法,并返回格式为[format]的结果。

<?php
# /local/php_interface/init.php
\Yapi\Yapi::getInstance()->run($routes, $basePath, $beforeAction);

参数

  • $routes:array - 控制器映射
  • $basePath:string - API请求路径
  • $beforeAction:callable - 每次调用API之前执行的方法

调用示例

<?php
// GET http://yoursite.name/yapi/test/result.html
\Yapi\Yapi::getInstance()->run([
    'test' => '\YourNameSpace\YourController'
]);
<?php
// GET http://yoursite.name/my_api/test/result.html
\Yapi\Yapi::getInstance()->run(
    [
      'test' => '\YourNameSpace\YourController'
    ],
    '/my_api/'
);
<?php
// GET http://yoursite.name/my_api/test/result.json
\Yapi\Yapi::getInstance()->run(
    [
      'test' => '\YourNameSpace\YourController'
    ],
    '/my_api/',
    function() {
        // do some action
    }
);

控制器

所有API控制器都必须实现接口\Yapi\Export\YapiController

<?php
# Export/YapiController.php
interface YapiController {

    /**
     * Возвращает кастомный обработчки результата (для разных форматов)
     * @param string $format
     * @return mixed
     */
    public function getResultHandler(string $format);

}

控制器示例

<?php
namespace YourNameSpace;

use Yapi\Export\YapiController;

class Test implements YapiController {

    public function getResultHandler(string $format) {
        if ($format === 'custom') {
            // Для обработки результатов в формате custom будет использован класс \YourNameSpace\CustomResultHandler
            return '\YourNameSpace\CustomResultHandler';
        } else {
            return null;
        }
    }
    
    public function result($params) {
        return 'some result as text';
    }
    
}

处理结果

默认情况下,结果可以以jsonhtml格式返回。

还可以以任意格式返回结果(见上面示例)。

任意格式结果

为了以任意格式生成结果,需要使用实现接口\Yapi\Export\YapiResultHandler的类。

<?php
namespace YourNameSpace;

use Yapi\Export\YapiResultHandler;

class CustomResultHandler implements YapiResultHandler {
    
    /**
     * Приведём результат в верхний регистр 
     * @param $result - результат, полученный от контроллера
     */
    public function handle($result) {
        echo strtoupper($result);
    }
    
}