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

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

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 14
chowjiawei

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

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

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

1年前 评论
半人间 1年前

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

1年前 评论

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

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

1年前 评论

业务不要做预置优化。

1年前 评论

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

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

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

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

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

1年前 评论

视图你不用就行了, 可以去掉一些必须要的中间件,修改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
1年前 评论

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

1年前 评论

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

1年前 评论

在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);
}
1年前 评论

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

1年前 评论

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

Laravel

Laravel

Laravel

1年前 评论

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