加入收藏 | 设为首页 | 会员中心 | 我要投稿 武陵站长网 (https://www.50888.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

使用php轻框架-lumen搭建api服务

发布时间:2022-10-17 05:32:11 所属栏目:PHP教程 来源:网络
导读: 一. 源起
之前负责为一个出行类的app构建micro-service架构的后端服务。其中负责php框架技术选型的一些问题。当时的背景如下:
【坑多】第一条业务线使用ci框架,发现会中很多坑,并且后续

一. 源起

之前负责为一个出行类的app构建micro-service架构的后端服务。其中负责php框架技术选型的一些问题。当时的背景如下:

【坑多】第一条业务线使用ci框架,发现会中很多坑,并且后续不容易维护(变量的作用范围)。 【性能不好】php作为主要的逻辑后端,性能上希望也有较高的保证。 【耦合重,不易扩展】当时调研了silex,slim,laravel等等,最终为了实现效率还是基于自己开发的轻量级框架完成了第一版。总结回忆当时的痛点 1)配置线上和线下多个版本的维护(需要来回切换,出现过上线后由于配置没有check到导致问题回滚的情况)2)mysql,memcache,log,redis的轮子都是自己造的,实际使用发现程序的健壮性不足 二. 遇见Laravel和Lumen

可能是由于c++后端的背景,之前在腾讯也是使用c++实现cgi来完成web服务。我理解上实现app后端API服务较好的框架应该是这样的

可以裁剪模块,以提升效率 更好的第三方软件的管理,类似于npm对于nodejs,pip对于python

Laravel在国外的市场份额是第一,文档全面细致,但是在中国不太流行。

php 框架排名_php轻框架_php 论坛框架

Lumen是Laravel的裁剪版本,为了获得性能上更好的收益。

php 框架排名_php 论坛框架_php轻框架

lumen VS silex VS slim

lumen VS laravel

并且,有了基于composer的laravel和lumen,我们就可以定制自己的第三方工具以来,比如:

swoole, C扩展实现的PHP异步并行网络通信框架,可以重新定义PHP。过去PHP只能做Web项目,现在有了Swoole。任意服务器端程序都可以用PHP来写。swoole_framework,基于swoole扩展开发的一个开发框架php-webim,基于swoole实现的Web即时聊天工具,支持websocket+http comet长链接推送php轻框架,可以发送文字内容和图片workerman,类似swoole,不过是纯PHP实现的,官网有很多示例项目。底层功能比swoole少一些,但相对简单,应用层面的功能比swoole丰富。zephir,这个有点厉害,可以用近似PHP的一种中间代码写程序,然后自动转为C++,并作为扩展来运行。可以解决PHP语言密集计算性能差的问题。redis-async,基于swoole扩展写的异步redis客户端,压测起来性能跟Go语言之类的差不多

php好的轮子们

三. 主要模块使用说明

配置管理 lumen使用了.env文件来维护全局的最高优先级变量。变量取值.env中的优先级最高。() ,这个配置一般存放online的配置,在app/conf文件夹存放offline配置。并且,将.env添加到gitingore可以避免online正式环境的配置信息存放在代码中导致的安全风险

示例:读取$dotenv = new Dotenv\Dotenv(DIR);$dotenv->load();$s3_bucket = getenv('S3_BUCKET');$s3_bucket = $_ENV['S3_BUCKET'];$s3_bucket = $_SERVER['S3_BUCKET'];

数据库为了获得更好的执行效率,lumen默认使用了QueryBuilder而不是基于ORM的Eloquent来与数据库通讯。其原理是提供了构建sql语句的高级语法,类似的工具如:medoo 文件系统操作lumen支持本地文件和云存储的读写,通过配置即可切换。

php 框架排名_php轻框架_php 论坛框架

lumen文件系统支持

cachelumen支持内存,文件,memcached,redis多种kv存储。

php 框架排名_php轻框架_php 论坛框架

lumen cache服务

队列和计划任务一个很常见的需求就是:首次注册,希望一天后发一个提醒的消息来提升用户重复登录的行为。这个需求通过lumen可以很好的实现1)注册请求拼装好必要的job信息,填写delay时间(如:24小时)放入任务队列beanstalkd

php轻框架_php 框架排名_php 论坛框架

put job入队列

2)当job到达预定时间会进入ready队列,这时通过每分钟运行的计划任务可以执行对应的job任务(也可以使用linux自带的crontab实现)

计划任务

使用新的composer管理的第三方组件

php轻框架_php 框架排名_php 论坛框架

lumen使用到的可选的组件列表

注意:在上线之前需要优化composer的autoloader

composer dump-autoload --optimize不加这一选项,你可能会发现20%到25%的性能损失。

四. 参考资料

Laravel中文官网 Laravel英文官网 电子书《Easy Laravel 5》 互联网micro service架构 使用beanstalk搭建队列服务

(编辑:武陵站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!