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 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 2

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

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

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