仅对 API 使用 Laravel/Dingo

Using Laravel/Dingo for an API only

我们有一个大型 PHP 应用程序,它基本上是用我们自己的框架从头开始编写的。现在对于移动开发,我们需要创建一个 API,但问题是是只使用 rest api 包,还是使用更健壮的东西。从头开始写出自己的休息 api 不再是一种选择。

我查看了包含 Slim framework 的选项。这将很容易实现,但我认为它缺乏一个好的结构。

我看过的另一个选项是 Dingo,它建立在 Laravel 之上。一个很大的优势是它已经有一个庞大的结构和大量的工具可以使用。

这里的问题是,如果我们在同一台服务器上也有自己的框架 运行,那么 Laravel 仅用于 API 会不会开销太大。请注意,我们必须包含我们自己的框架的很大一部分,以保持 运行 顺利进行。所有模型和列表都将来自我们自己的框架。

我不知道 Laravel 是否会在到达 API 部分之前加载很多不必要的项目,或者这是否会像 Slim 框架那样轻量级。

所有框架都在构建便利性和性能之间进行了权衡。

一般来说,除非您的 API 流量很大,否则您使用哪种框架并不重要,您应该使用您最熟悉的框架。瓶颈通常围绕数据库使用,您应该使用分析器来确保您解决实际的性能问题。

I don't know if Laravel will load a lot of unnecessary items before getting to the API part, or if this will be just lightweight as the Slim framework would be.

我很确定这就是为什么 Taylor Otwell(Laravel 的创造者)让 Lumen 去看看它是否适合你。

如果您决定 Laravel,从 5.2 开始,您可以将路由文件中的 API 端点与通常在网页调用中通常加载的组件分开(例如会话、缓存等)通过指定应该使用哪个中间件。

如果您查看路由文件,例如:

Route::group(['middleware' => ['web']], function () {
    //
});

然后看看Http\Kernel.php

中的中间件组
protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\VerifyCsrfToken::class,
    ],

    'api' => [
        'throttle:60,1',
    ],
];

你可以看到它已经为你做了一些设置,不要加载任何不必要的东西。因此,管理您的路由和中间件,您可以很好地控制 API 中加载的内容和未加载的内容。