paint-brush
如何在 FastAPI 中为用户和表构建单独的限制经过@kaizenthecreator
2,190 讀數
2,190 讀數

如何在 FastAPI 中为用户和表构建单独的限制

经过 Philip Ireoluwa Okiokio4m2023/02/07
Read on Terminal Reader

太長; 讀書

FastAPI:为用户和表构建单独的节流阀。这是我概括的前提。如果你读过我以前的任何作品,你就会知道我的后端起源是 Django(及其休息框架)我很感谢它的方向和设计模式,他们允许我修改轮子以适应我的用例。
featured image - 如何在 FastAPI 中为用户和表构建单独的限制
Philip Ireoluwa Okiokio HackerNoon profile picture
0-item


软件工程比我们想象的要容易,因为有时答案很简单,而且很多时候就在我们眼前。


FastAPI 对我理解后端工程和思考流程以及东西如何工作以及应该如何工作很有帮助。它是一种智能工具,但是,它完全取决于您的创造力和想象力。这是我概括的前提。


如果你读过我以前的任何作品,你就会知道我的后端来源是 Django(及其 rest 框架),我很感谢它的方向和设计模式,它们允许我修改轮子以适应我的用例。


在我的爸爸妈妈的成长过程中,我知道我的想法很奇怪,我想创造一些东西,而我的爸爸妈妈总是告诉我,你不能重新发明轮子,只能修改它。


我曾经使用 DRF 开发一个受限/速率限制的应用程序或端点,这太棒了,我学到了一些新东西而且我很感兴趣(在我职业生涯的早期)。在这种情况下,油门影响了我应用它的端点,最近我有兴趣在 FastAPI 中做类似的事情,我首先选择了简单的路线(谷歌获胜)并看到存在执行油门操作的包.


我个人觉得它们提供了与我使用 Django 时相同的舒适感和熟悉感。他们没有提供我想要的灵活性(或者我懒得做一些覆盖),所以我坐下来设计了一个解决方案。因此,让我们研究一下代码。


免责声明:我不会提供有关 FastAPI 入门的信息,也不会做很多事情来加快速度,如果您无法查看有关 FastAPI 入门的最佳资源(文档教程),我假设您可以做到这一点

演示应用程序:Tranzact 一些 Fintechy(基本)应用程序。

许多活动部件由服务器的入口点控制。


因此,让我们创建一个名为 Tranzact 的表,该表可用于创建 Tranzact 数据记录,并且将生成一个 API 密钥以能够识别不同的 Tranzact 记录。


此表和应用程序利用 SQLAlchemy,因此请查看文档。


tranzact 表,理想情况下它位于 models.py 文件中。


这是路由器。

用于 tranzact 的路由所在的 API 路由器。理想情况下存在于您的 router.py 文件中。


我们可以在路由器中执行 CRUDy 操作,(如果应用程序看起来很奇怪,我将在这里发布另一篇关于设计模式的帖子,称为 Repository Design pattern)。


这是 API 密钥与之通信的端点,此 API 密钥用作执行某些操作的身份验证。我们可以看到有一个指向交易记录的依赖项。


需要 API 密钥进行通信的路由。


让我们检查 tranzact_header 依赖项并检查调用。

检查作为请求标头发送的 API 密钥并返回单个 tranzact 记录的函数。


这会识别 API_Key 并返回与 api_key 关联的 tranzact 记录。

因此,为了解决个性化节流的挑战,我在为 tranzact 表创建记录时解决了这个问题。我使用 tranzact.id 创建一条记录,并在 tranzact 速率限制表中创建一个默认值为 0 的计数。这是下表。



速率限制表的片段和 tranzact 模型。


因此,对于这个解决方案,我需要一种方法来跟踪速率限制记录,使用 API_KEY 我们可以根据每次调用增加计数增量,并根据 tranzact 记录具有的免费增值角色进行限制。这是函数的样子。



因此,使用此功能,我们可以根据标志和计数进行一些 QA 和检查。这取决于 api_header 函数。然后,我们使用 throttle API 速率限制函数交换 API 调用端点中的依赖项。我们可以这样做,因为它们都返回相同的 Tranzact 记录。要了解有关依赖项及其与 FastAPI 的调用的更多信息,请查看文档的这一点。


这是我的邮递员中的一个测试用例。


在邮递员中为我的收藏设置 API_KEY。

在集合级别的邮递员中设置想法 API 密钥。


以下是已达到上限数量的请求调用的节流响应,这意味着另一个 api_key 将以不同的方式响应放弃所需的响应,此外,如果 tranzact 记录是高级的,它会绕过节流检查。


限制 API 调用的 API 响应。


所以这就是我创建单个 DB 记录节流阀的方式,我实施的最后阶段包括使用 celery beat 作业(计划的作业/任务)将所有 tranzact 速率限制记录计数在小时内恢复为零。这是其他人可以完成的个人实现。


最后,请带着淡淡的热心接受我下面的话,但这是我的真相。


您可以看到、想象或概念化的任何产品/功能,无论其复杂性如何,我们都可以构建,一旦我们看到它,FastAPI 就可以帮助我们将其变为现实。


也发布在这里。