scalpel / api-engin
一个基于 php-fpm 的简单 http api 服务器
dev-master
2019-04-24 06:01 UTC
Requires
- php: >=5.4.0
- scalpel/core: *
This package is auto-updated.
Last update: 2024-09-24 21:27:23 UTC
README
一个简单的开发api应用组件,真的非常非常简单,核心执行流程20行代码
# 安装
composer require scalpel/api-engine
特性
- api对象编写简单,只需要实现 ::handle() 方法
- 支持api多版本,通过请求参数apiVersion设定api版本号
- 集成简单灵活的授权验证
- 灵活的api class加载器,逐层向上查询,ns1.ns2.ns3,方便api扩展
- 灵活响应错误,顶层拦截异常处理
- 支持多种请求格式,GET/POST/JSON
- 支持MockData
- 支持多种编码 GKB/utf8/其它,默认utf8
- 简单api文档及测试集成
- 完善的请求及响应日志
执行流程
- 初始化app,设置log,apiNs,mock data path,AccessManager
- 运行app::run(),开始接收请求
- 初始化请求的api,request(json请求来源php://input)
- 通过api加载器创建响应对象(实现::handle方法),并初始化 api::init($req)
- 验证授权,基于app::AccessManager 与 $class::authentication()
- 调用api::handle(request)返回数据
示例
api入口程序
# 入口程序
# index.php
<?php
use j\apiSimple\App;
use j\apiSimple\tool\QiakeSign;
use j\base\Config;
use j\log\File as Log;
use j\tool\Strings;
require __DIR__ . '/../boot.inc.php';
$log = new Log(__DIR__ . "/api.log");
$config = Config::getInstance();
$app = new App();
// 鉴权设置
$accessManager = $app->getAccessManager();
$accessManager->addVoter(function($api, $reqAll) use($accessManager){
$query = $_GET;
$reqParams = array_filter($query);
$key = 'your key';
$sign = new QiakeSign($key);
if($sign->checkSign($reqParams)){
return $accessManager::ACCESS_ABSTAIN;
} else {
return $accessManager::ACCESS_DENIED;
}
});
// 日志
$app->setLogger($log);
// api namespace
$app->setApiNs($config->get('apiNs'));
// mock data path
$app->setMockPath($config->get('apiMockDir'));
$app->run();
Api类
/**
* Class Test
* @package wxapp\api
*/
class Test extends Base{
/**
* @inheritdoc
*/
public function actionDefault($request){
// TODO: Implement handle() method.
return [
'apiName' => 'Test',
'message' => 'This is a test',
];
}
}
请求api
$http = new j\net\http\Client;
$http->setLogger(new Log());
$apiUrl = sprintf($apiGatewayUrl, $api);
$rs = $http->post($apiUrl, $request);
api文档
@see example/doc