yokel / yapi
适用于Bitrix的类似REST的API库
v1.4
2023-09-17 13:31 UTC
Requires
- php: >=7.0
- bramus/router: ~1.5
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'; } }
处理结果
默认情况下,结果可以以json
或html
格式返回。
还可以以任意格式返回结果(见上面示例)。
任意格式结果
为了以任意格式生成结果,需要使用实现接口\Yapi\Export\YapiResultHandler
的类。
<?php namespace YourNameSpace; use Yapi\Export\YapiResultHandler; class CustomResultHandler implements YapiResultHandler { /** * Приведём результат в верхний регистр * @param $result - результат, полученный от контроллера */ public function handle($result) { echo strtoupper($result); } }