Cache 是否在 API 路由中工作,我们应该使用它吗?

Does Cache work in an API route and should we use it?

我正在创建一个 API。在此 API 中,我在中间件和控制器中多次从数据库访问(权限)table。我在想,与其多次访问数据库,不如调用一次,多次使用。调用一次后,我可以将其存储在服务提供商的缓存中。但我不确定这是否是一个好方法,因为 API 路由不会加载会话等所有服务。

还有其他方法,例如将数据存储到配置中。或者创建一个 class 并为其创建外观,然后在需要时调用它。但我很好奇缓存是否可以在 API 路由中工作,这是个好主意吗?

好的,根据@lagbox 的建议,我创建了一个非常简单的 class。

namespace App\Helpers;

use App\Permission;

class Provide
{
    public $permissions = [];

    function __construct() {
        $this->permissions = Permission::whereNotNull('route_name')->get();
    }
}

这可能会有所不同,它只是一个 class 将在其中保留一些收集数据。我将其命名为 provide 以保持其通用性,以防将来我可能需要除许可之外的其他数据。当然这个 class 可以更详细,但仅用于存储和返回权限就足够了。

然后我在我的 AppServiceProvider 中将它作为单例绑定到 运行 它只绑定一次。

public function register()
{
    $this->app->singleton('App\Helpers\Provide', function ($app) {
        return new \App\Helpers\Provide();
    });
}

当我需要它时,我会这样称呼它

$provide->permissions->toArray() 

合集所有功能从头到尾无处不在。是的,这可能看起来有点矫枉过正或滥用 IoC,但这种超级简单的方法对我来说是一个极好的解决方案。