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 协议》,转载必须注明作者和本文链接
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 2

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

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

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