Laravel 内部调用 API

在Laravel项目中,有时候在某个API请求周期中需要去内部调用项目的其他API,而Laravel似乎并没有提供类似DingoAPI内部调用的功能。我这里通过二次调用Laravel的请求周期来实现:

  • 模拟在控制器方法中请求passport发放令牌接口并返回
namespace App\Http\Controllers;

use App\Http\Kernel;
use Illuminate\Http\Request;

public function login(Request $request)
{
    // 通过\Illuminate\Http\Request的create方法创建一个请求对象
    $request = Request::create(route('passport.token'), 'POST', [
        'username' => $request->get('email'),
        'password' => $request->get('password'),
        'grant_type' => 'password',
        'client_id' => 'client-id',
        'client_secret' => 'client-secret',
        'scope' => '*'
    ]);

    // 将请求二次传递给Laravel请求周期,返回响应
    return app(Kernel::class)->handle($request);
}

其实这种方式就是又完整的走了一次Laravel的请求周期,不会二次经过nginx代理服务,不知道这种方式有没有什么缺点或者有更好的方式,欢迎指正

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 2

我之前是用 GuzzleHttp 去请求,Laravel 本身有引入这个库

3年前 评论
oneSmile (楼主) 3年前
  • 答案是肯定的,会走 nginx
  • 两个独立项目之间调用这么干,一个项目这么干,从维护角度是噩梦,根本无从知道原来这里也用到了 ** 接口,不建议这么干。建议,把公用代码抽离出来公用,通过复用解决该问题
3年前 评论

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