使用什么PHP轻框架搭建RESTful API 服务好

一. 起源

前几天在准备为一个项目搭建api服务的时候还在纠结选哪个框架好,因为之前一直使用的是zentaoPHP,但是觉得这个框架用来搭api服务似乎不是特别好,但是由于项目时间比较赶,还是选择这个框架,花了两三天写好了大部分api。
使用完这个框架觉得实在变扭,准备打算换个框架重构一下,在选型上我主要有几点考虑

  1. 不要太过臃肿的框架。
  2. 可以裁剪模块,以提升效率。
  3. 性能要好。

二. 遇上lumen

这两天下班利用空余时间搜索了目前较好搭建api服务的框架,调研了slim、YII2.0、phalapi、lumen等等各有好有坏,但是个人觉得slim、lumen较为适合搭建rest api服务,目前ag使用的框架便是slim,两者有相似之处,两者相比个人觉得lumen更为合适。
Lumen 是一个由 Laravel 组件搭建而成的微框架,Laravel在国外的市场份额是第一,文档全面细致,虽然在国内似乎并不是最受欢迎的。

lumen 可以使用composer安装详情可以查看官网文档 安装lumen

三. 主要模块使用说明

  • 配置文件
    lumen的配置文件为.env
APP_ENV=local
APP_DEBUG=true
APP_KEY=
APP_TIMEZONE=UTC
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=app
DB_USERNAME=root
DB_PASSWORD=xxxxxx
CACHE_DRIVER=memcached
QUEUE_DRIVER=sync
  • 路由配置
$app->get('/hello', function () use ($app){
    return ['welcome to' => 'hello system'];
});
$app->get('/user/getByID', 'UserController@getByID');
$app->delete('/user/delete', 'UserController@delete');
$app->post('/user/create', 'UserController@create');
$app->put('/user/update', 'UserController@update');
  • 数据库操作
    只举例简单示例,更多的使用可以查看 官方文档
  1. select
示例1:单个查询
$result = app('db')->table(TABLE_USER)
            ->where('id',$id)
            ->get();
示例2:列表查询
    public function getList($page,$pageSize,$search = '')
    {
        $users = app('db')->table(COUPON_TO_PROJECT)->select("*");
        if ($search) {
            $users->where('name', 'like', '%' . $search . '%');
        }
        $users->skip(max(0, $pageSize * ($page - 1)));
        $users->take($pageSize);

        $data['page']     = $page;
        $data['pageSize'] = $pageSize;
        $data['total']    = $users->count();
        $data['list']     = $users->get()->all();
        return $data;
    }

在Laravel Eloquent 模型返回的结果集中,我们可能要判断取出的结果集是否为空,但我们发现直接使用 is_null 或 empty 是无法判段它结果集是否为空的。
var_dump 之后我们很容易发现,即使取到的空结果集, Eloquent 仍然会返回 Illuminate\Database\Eloquent\Collection 对象实例。
其实,Eloquent 已经给我们封装几个可以用来判断的方法。

//不为空则
if ($result->first()) { } 
if (!$result->isEmpty()) { }
if ($result->count()) { }
  1. insert
    使用insertGetId()方法可以返回最后插入的ID,若不需返回最后插入的ID insert()即可
        $lastInsertID = app('db')->table(TABLE_USER)->insertGetId([
                'account'  => 'zhangshan',
                "password" => '123456',
            ]);
  1. update
$effect = app('db')->table(TABLE_USER)
            ->where('id', '=', $id)
            ->update($data);
  1. delete
$result = app('db')->table(TABLE_USER)
            ->where('id', '=', $id)
            ->delete();

四. 缓存

  • 这里主要讲redis 常用方法 ,详细方法请参考文档

.env配置文件里配置CACHE_DRIVER=redis,并配置好连接redis的相关信息

  • 写入缓存
app('cache')->put('key','value',过期时间);
  • 查询
app('cache')->get('key');

五. 几个框架的demo github地址

  1. Slim (https://github.com/BGGANF/SLIM_RESTful_API.git)
  2. zentaoPHP (https://github.com/BGGANF/ZT_RESTful_API.git)
  3. Lumen (https://github.com/BGGANF/LUMEN_RESTFul_API.git)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,463评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,868评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,213评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,666评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,759评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,725评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,716评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,484评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,928评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,233评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,393评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,073评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,718评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,308评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,538评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,338评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,260评论 2 352

推荐阅读更多精彩内容

  • 原文链接 必备品 文档:Documentation API:API Reference 视频:Laracasts ...
    layjoy阅读 8,607评论 0 121
  • 必备品文档:DocumentationAPI: API Reference视频:Laracasts速查表:Lara...
    ethanzhang阅读 5,739评论 0 68
  • Awesome PHP 一个PHP资源列表,内容包括:库、框架、模板、安全、代码分析、日志、第三方库、配置工具、W...
    guanguans阅读 5,756评论 0 47
  • 又到了宝宝满月出所的日子,欣生成都总经理说在台湾出会所的头天晚上会给爸爸妈妈上清汤火锅,寓意着一家人团团圆...
    风兮勇者阅读 245评论 1 3