使用 Composer 搭建适合自己项目的微框架
Micro Framework
介绍
公司重调组织架构后,我们小组被规划为<基础服务组>,主要工作内容是提供独立的微服务供别人调用。诸如,发送短信服务、垃圾过滤服务、心跳监测服务、异常捕获服务等。这些微服务提供少量接口,有些甚至不需要数据层和缓存层。这时候使用Lumen
都显得臃肿更别提Laravel
了。而且线上环境强制使用composer
国外源,一次简单升级就要耗费一上午时间。看过一些轻量级框架,对比选择后,还是觉得Slim用起来顺手点。有关Slim
各种吹逼的介绍及特性在这里就不细说了,毕竟,每个框架都说自己是最牛逼的。鲁迅说,没有最好的框架,只有最适合业务场景的框架(老子没说过这句话.jpg)。微框架使用Slim
核心组件并配合其它包组合而成,使用过程中可以自由组合自己熟悉的composer包。
Composer包
安装
1. git clone -b master git@github.com:moext/moant.git
2. cd moant/
3. composer install -vvv
4. composer dump-autoload -o
5. cp .env.example .env
使用
路由
所有路由都定义在route
目录下的api.php
文件里。示例:
use App\Controllers\TestController;
$app->any('/', TestController::class . ':test');
如上,定义路由用到控制器的时候,需要先把控制器类引入。
配置
在.env
文件中配置连接mysql和redis。新建test
数据库,在库中新建users
表,插入几条测试数据。
# 新建数据库
create database test;
# 新建表
use test;
CREATE TABLE `users` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`username` varchar(255) DEFAULT NULL,
`password` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
# 插入数据
INSERT INTO `users` (`id`, `username`, `password`)
VALUES
(1, '张三', '123'),
(2, '李四', '456');
示例
<?php
namespace App\Controllers;
use App\Services\DB;
use Slim\Http\Request;
use App\Services\Redis;
use Slim\Http\Response;
use App\Services\Logger;
class TestController
{
public function test(Request $request, Response $response)
{
$db = DB::getInstance();
$arrUser = $db->select('users', ['username']);
$redis = Redis::getInstance();
$redis->setex('redis_key', 3600, json_encode($arrUser));
Logger::add('name', [$request->getUri(), $request->getMethod(), $response->withJson('logger record success!')]);
echo '<h1 style="text-align: center; margin-top: 200px">';
echo 'Micro Framework';
echo '</h1>';
}
}
进入moant\public
目录,执行php -S localhost:8080
,在浏览器访问localhost:8080
,页面会显示Micro Framework
。同时,将DB查询出的数据保存到redis并把这次请求的输入输出在日志文件记录。
通用方法
support
目录下的helper.php
文件里定义一些通用函数。
ab压测对比(仅供参考)
最近把小框架完善了下,并用它和Lumen做了次压测对比。压测数据不具说服力,仅供参考。使用同样的方式,通过路由找到控制器然后在方法里输出一串字符。
电脑配置
Lumen压测图如下:
Slim-Framework压测图如下:
欢迎Star、提Issue
本作品采用《CC 协议》,转载必须注明作者和本文链接
既然是微框架,那么目的也就是为了写接口,建议用上Swagger自动输出文档http://phpboot.org/zh/latest/advanced/docgen.html#swagger
不错
没理解为什么强制使用外国源,外国源香吗。。。
@白纸 好的 我研究一下。
@839891627 因为我们的项目用到很多自己开发的composer包,如果composer包出现bug,修改之后发布到packagist上面,使用国内源有一个缓存时间,不能及时修复问题。
@moext 原来如此