scalpel / api-engin
A simple http api server base on php-fpm
dev-master
2019-04-24 06:01 UTC
Requires
- php: >=5.4.0
- scalpel/core: *
This package is auto-updated.
Last update: 2025-02-24 22:16:41 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)返回数据
Example
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
/**
* 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 doc
@see example/doc