使用 Composer 搭建適合自己專案的微框架

皮格魯斯發表於2017-09-30

介紹

公司重調組織架構後,我們小組被規劃為<基礎服務組>,主要工作內容是提供獨立的微服務供別人呼叫。諸如,傳送簡訊服務、垃圾過濾服務、心跳監測服務、異常捕獲服務等。這些微服務提供少量介面,有些甚至不需要資料層和快取層。這時候使用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做了次壓測對比。壓測資料不具說服力,僅供參考。使用同樣的方式,透過路由找到控制器然後在方法裡輸出一串字元。

電腦配置
file

Lumen壓測圖如下:
file

Slim-Framework壓測圖如下:
file

歡迎Star、提Issue

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章