减少对外部 API 的身份验证调用(Laravel 5.6)

Posted

技术标签:

【中文标题】减少对外部 API 的身份验证调用(Laravel 5.6)【英文标题】:Reducing authentication calls on external API (Laravel 5.6) 【发布时间】:2019-01-17 11:18:10 【问题描述】:

我的应用需要从外部 API 收集数据。

我正在使用 Guzzle。 我的 API 方法被写入存储在库文件夹中的单独类中。 我有一个模型和控制器用于将我的应用程序连接到 API 并将信息拉回我的数据库中。

API 需要进行身份验证调用才能在每次调用时检索令牌。这有效期为 72 小时,但目前我每次都打这个电话。

有什么方法可以在不将令牌保存到数据库的情况下减少所需的调用次数?

我看过有关为 API 创建服务提供者的教程。这对我的问题有帮助吗?如果一个类只是在单个模型/控制器中使用并且几乎没有依赖关系,是否需要创建服务提供者?

谁能提供一些关于在 Larval 5 中为外部服务布局 REST api 的最佳实践的建议?

【问题讨论】:

您确实应该将令牌保存在某处。我会设置前端来进行 API 调用,而不是后端。这样您就可以将令牌存储在 cookie 或本地存储中。 服务提供商不会帮助您,因为它更多的是关于技术而不是结构和设计的问题。请不要将 api 密钥存储在 cookie 或本地存储中。您的付费队伍很容易被实际用户或第三方插件窃取。 【参考方案1】:

您可以采取多种选择。我认为我的偏好是将令牌存储在Laravel's cache 中。使用此选项,您可以为其提供到期时间,而无需自己创建任何物理文件。

所以你可以做类似的事情;

$minutes = 10; // minutes until it expires 
$value = Cache::remember('myToken', $minutes, function () 
    $token = some code to obtain the token ...
    return $token;
);

如果 'myToken' 不存在,它会调用闭包,否则它会返回你已经存储的内容。

您始终可以将令牌保存到本地文件,但这很可能比缓存要慢,尤其是在您使用诸如 redis 驱动程序之类的东西进行缓存时。

【讨论】:

太棒了,好主意!

以上是关于减少对外部 API 的身份验证调用(Laravel 5.6)的主要内容,如果未能解决你的问题,请参考以下文章

Laravel - 通过外部 API 进行身份验证

使用外部 Laravel 护照流明 api 进行 Laravel 客户端身份验证

来自 laravel 会话登录的经过身份验证的 api 调用。可能吗?

创建通过外部 API 进行身份验证的自定义身份验证提供程序?

Laravel Passport API:检索经过身份验证的令牌

通过 laravel API 使用 firebase 令牌身份验证