Laramen 一套让 Laravel 与 Lumen 在同一个项目中共存的解决方案
11

我当前的项目 (Eyewitness.io) 是用laravel做的前端服务, 调用的API是用Lumen框架构建。

每分钟有上百台被监控的服务器建立上千个连接,最开始的时候我就知道需要用Lumen 构建API。快速的响应时间,低消耗服务器资源。开销小,这个意义重大。
但是,如果你曾经在一个项目中使用过Laravel 和 Lumen,你可能习惯在两边复制代码,或者把相同的代码打包(像Eloquent Models命令行,业务逻辑等) ,为了在两边使用。

这样做使得项目更复杂了。

最近我有个想法或者说是一个希望,在一个应用中,我既想有Laravel的全部功能,又想有Lumen的速度,不建共享的包,也不复制代码,就是一个项目有两个好处,代码在一个地方,就可以做到这样的能力。

功能如何最大化取决于 Taylor 如何将 Laravel 和 Lumen 粘合在一起,为了实现这个,我有了一些灵感,以便于这两者可以很容易共存并且根本不需要相互独立。

Laramen 的想法横空出世。

Laramen 是一种理论,允许你在一个项目中融合 Laravel 和 Lumen。这个想法很简单 -- 任何类似 /api/* 这样的路由由 Lumen 驱动,其他的都交给 Laravel。

好处在哪里?简单 -- 所有代码都在一个地方。他们是相同的应用 -- 所以你应该像这样来处理。

这是一个动态展示:

file

你可以在这里体验上面的动态案例: https://laramen.xyz

Github地址: https://github.com/laurencei/laramen

以下功能运作良好:

  • 性能:这个解决方案其实并没有其它开销。 你的 /api/*路由只由Lumen驱动,其它就由Laravel,所以与单独使用任一解决方案相比,性能不变。
  • 测试:你可以明确的选择是使用Laravel还是Lumen去测试你的测试类,在Github代码中你可以看到这点是怎样处理的
  • 日志:你的 "Laravel" 日志输出在 "laravel.log",而如有任何关于API的错误日志则输出在"lumen.log",如果希望把他们错误日志都输出到同一个地方的话很容易实现,但我认为分开输出是比较有意义的。
  • 控制台:artisan命令还是由Laravel去控制,所以你可以使用全部的脚手架工具了。
  • 错误异常:Laravel应用使用 laravel.php 错误异常处理, 而你的API 就使用 api.php 错误异常处理,这可以让你分开处理web和API的异常。
  • 代码:你的所有代码都在同一个项目里,所有的模型,命令等等--它们都在同一个地方。

将要做的:

  • Config:我还没尝试过,但我认为我们可以用Lumen去使用 config:cache 的选项 (虽然现在还没实现),我认为这应该提升共存的兼容性,使得它没有任何性能损失。
  • Packages:我还没有试过这样会影响哪些包,特别是那些专门针对Laravel或者Lumen的包(但我认为这应该是可行的)。

请记住,这只是一个想法的证明,我还没有完全测试它,它还可能有一些问题我是没有考虑到的,一些代码可以很容易地被重构或以一种稍微不同的方式去完成。

但我希望这是一个很好的起步。

运行Laravel应用? Eyewitness.io 是专门为Laravel构建的监控和应用分析解决方案。它可以让你知道你的Laravel应用的性能。 监控运行时间、队列、计划任务、邮件、日志、安全性、SSL、DNS等等,而且它安装超级简单---只需要90秒就能安装完成并运行起来。


Practice makes perfect.

原文地址:https://medium.com/@laurencei/lumen-vs-l...

译文地址:https://laravel-china.org/topics/7897/la...

本帖已被设为精华帖!
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 6

自个儿翻译不好,就坐等大神喽

8个月前
Artisan

很期待这篇

8个月前

哦吼,没人翻译了

8个月前

@科大大 翻译很厉害,说个鸡蛋里面挑骨头的,建议看下 翻译规范

8个月前

@Kevinvinvin 看过了,有些全角的忘记转换了。。。

8个月前

实际用起来可能还是有点出入

8个月前

  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,使用方法请见 Emoji 自动补全来咯,可用的 Emoji 请见 :metal: :point_right: Emoji 列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
  请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!