用 Laravel 开发纯 API 服务,怎么安全的去掉视图层呢?

Lumen 太极端,去掉了很多 Laravel 好用的东西,开发起来不太舒服,并且中文文档和很多 composer 包的支持度不如 Laravel 高。
于是想用 Laravel 开发,但是去掉 API 服务用不到的 视图层 等等。
还有一些 cookie 之类的纯 API用不上的 服务提供者。
在社区找到一位大佬有去掉视图层的简单教程,但是按照这套操作下来,在请求不存在的路由时,日志里会报 视图 不存在的错误。说明有其他服务提供者依赖于视图,但无奈技术有限,没有找到具体是哪个在依赖。
我想社区应该也有很多人有同样的需求吧,精简但不至于太精简的 Laravel,专门用于纯 API 开发。
哪位大佬能指导一下吗?
或者出个付费教程也可以。
提前感谢~!

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 14
chowjiawei

为什么要去掉 你做邮件通知的时候 模板是你服务器写的 到时候不是也要用视图层吗

2年前 评论
tomcath (楼主) 2年前

不去掉就行,性能不够时再加机器

2年前 评论
半人间 2年前

视图你直接不用就完了。视图服务在容器中注册,应该是懒加载的,你不调用它不初始化的。没有什么影响。

2年前 评论

日志里会报 视图 不存在的错误

定义 fallback 路由 路由《Laravel 9 中文文档》

2年前 评论

业务不要做预置优化。

2年前 评论

额。。你不用它不就完了吗?反正你请求的都是 api 中的路由,也不需要你做什么啊?

在请求不存在的路由时,日志里会报 视图 不存在的错误。说明有其他服务提供者依赖于视图

这个原因应该是你的路由默认跳转地址不对,在 api 路由文件中添加一个 fallback 路由,所有请求不到的路由都会走 fallback 兜底。

如果只是做 api ,需要添加在 header 中添加 accept: application/json 参数,这样所有的数据格式都是以 json 返回,就不会出现请求未授权时跳转到 logoin 视图的情况。 这个一般都是在全局中间件中处理。

如果还搞不定的话私信我帮你看下。

2年前 评论

视图你不用就行了, 可以去掉一些必须要的中间件,修改App\Http\Kernel.php

 // 检测是否应用是否进入维护模式
\App\Http\Middleware\CheckForMaintenanceMode::class
// 检测表单请求的数据是否过大
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class
// Cookie 加密解密
\App\Http\Middleware\EncryptCookies::class
// 开启会话
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class
// 将系统的错误数据注入到视图变量 $errors 中
\Illuminate\View\Middleware\ShareErrorsFromSession::class
2年前 评论

建议直接用golang,非常的快,这些东西通通没有,几句话,就是一个api

2年前 评论

可以直接使用 api 的相关路由和中间件就可以
统一处理一下异常和返回值
想优化地址的话就在 nginx 上做一下代理

2年前 评论

在App\Exceptions里的 Handler类的render 异常捕获里面加response响应

/**
 * @author ChenGuangHui
 * @dateTime 2022-01-20
 * @param  [type]     $request
 * @param  \Exception $e
 *
 * @return void
 */
public function render($request, Exception $e)
{
    if ($e instanceof MethodNotAllowedHttpException || $e instanceof NotFoundHttpException) {
        return response()->json([
            'msg' => "请求不存在!",
            'code' => HttpCode::NOT_FOUND
        ]);
    }
    if ($e instanceof UnauthorizedHttpException) {
        return response()->json([
            'code' => HttpCode::UNAUTHORIZED,
            'msg' => '登陆已过期,请重新登陆'
        ]);
    }
    if ($e instanceof \Exception) {
        return response()->json([
            'msg' => $e->getMessage(),
            'code' => HttpCode::BAD_REQUEST
        ]);
    }
    return parent::render($request, $e);
}
2年前 评论

报错提示视图不存在,因为你的请求没有被标识为 ajax,或者需要 json 数据,改一下错误处理就行了

2年前 评论

之前记得有人问过. 我还写了两篇博客, 可以参考一下这个
www.shiguopeng.cn/posts/2021052616...

Laravel

Laravel

Laravel

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!