paint-brush
FastAPI でユーザーとテーブルの個別のスロットルを設計する方法@kaizenthecreator
2,186 測定値
2,186 測定値

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 (およびその残りのフレームワーク) であることを知っているでしょう。また、その方向性とデザイン パターンに感謝しています。


子供の頃から、ポップスは私の心が疑問に思っていることを知っていました。何かを作りたいと思っていました。


私はかつて、DRF を使用してスロットル/レート制限されたアプリケーションまたはエンドポイントに取り組んだことがありますが、それは驚くべきことでした。新しいことを学び、興味をそそられました (キャリアの早い段階で)。この場合のスロットルは、それを適用したエンドポイントに影響を与えました。最近、FastAPI で同様のことを行うことに興味があり、最初に簡単なルート (google for the win) を取り、スロットル アクションを実行するパッケージが存在することを確認しました。 .


個人的には、Django を使用していたときと同じ快適さと親しみやすさが得られると感じました。彼らは私が望んでいた柔軟性を提供していませんでした (または、オーバーライドを行うのが面倒だったのかもしれません)。それでは、コードを見てみましょう。


免責事項: FastAPI の使用を開始するための情報は提供しません。FastAPI の使用を開始するための最適なリソース (ドキュメント チュートリアル) を確認できない場合は、これを行うことができると思います。

デモ アプリケーション: Tranzact 一部の Fintechy (ベア ボーン) アプリ。

多くの可動部分は、サーバーのエントリ ポイントによって保持されます。


それでは、Tranzact データ レコードの作成に使用できる Tranzact というテーブルを作成してみましょう。API キーが生成され、個別の Tranzact レコードを識別できるようになります。


このテーブルとアプリケーションは SQLAlchemy を利用しているため、ドキュメントを確認してください。


tranzact テーブル、これは理想的には models.py ファイルに存在します。


こちらがルーターです。

tranzact のルートが存在する API ルーター。理想的には、router.py ファイルに存在します。


ルーターで CRUDy 操作を実行できます (アプリケーションが奇妙に見える場合は、ここでリポジトリ デザイン パターンと呼ばれるデザイン パターンに関する別の記事を作成します)。


これは、API キーが通信するエンドポイントです。この API キーは、いくつかのアクションを実行するための認証として機能します。トランザクション レコードを指す依存関係があることがわかります。


通信にAPIキーが必要なルート。


tranzact_header の依存関係を調べて、呼び出しを確認してみましょう。

リクエスト ヘッダーとして送信された API キーをチェックし、単一の tranzact レコードを返す関数。


これは API_Key を認識し、api_key に関連付けられた tranzact レコードを返します。

そのため、個別のスロットリングの課題を解決するために、tranzact テーブルのレコードを作成する際に解決しました。 tranzact.id を使用してレコードを作成し、デフォルトで 0 のカウントを tranzact レート制限のテーブルに作成します。これが下の表です。



Rate Limit テーブルのスニペットと tranzact モデル。


したがって、このソリューションでは、レート制限レコードを追跡する方法が必要でした。API_KEY を使用すると、各呼び出しに基づいてカウントを増分し、tranzact レコードが持つフリーミアム ロールに基づいて調整できます。関数の外観は次のとおりです。



したがって、この関数を使用すると、フラグとカウントに基づいて QA とチェックを行うことができます。これは api_header 関数に依存します。次に、スロットル API レート制限関数を使用して、API 呼び出しエンドポイントの依存関係を交換します。どちらも同じ Tranzact レコードを返すため、これを行うことができます。依存関係と FastAPI を使用したそれらの呼び出しについて詳しく理解するには、ドキュメントのこのポイントを確認してください。


これが私の郵便配達員のテストケースです。


郵便配達員でコレクションの API_KEY を設定します。

コレクション レベルで postman のアイデア API キーを設定します。


以下は、制限された数に達したリクエスト コールの調整された応答です。つまり、別の api_key が別の方法で応答し、必要な応答をあきらめます。さらに、tranzact レコードがプレミアムの場合、調整チェックをバイパスします。


API 呼び出しの調整された API 応答。


これが私が特異な DB レコード スロットルを作成した方法です。私の実装の最終段階には、セロリ ビート ジョブ (スケジュールされたジョブ/タスク) を使用して、すべてのトランザクション レート制限レコード カウントを正時にゼロに戻すことが含まれます。これは、他の人が実行できる個人的な実装です。


結論として、以下の私の言葉を軽い熱意で受け止めてください。しかし、それは私の真実です。


私たちが構築できるその複雑さに関係なく、あなたが見たり、想像したり、概念化したりすることができる製品/機能は、FastAPI がそれを実現するのに役立ちます。


こちらにも掲載。