前書き
この一連の記事を確認して、ASP.NET CoreでAPIゲートウェイを構築する方法について説明しました。
この記事では、Ocelotのルーティング制限テンプレートについて説明します。
一連の記事をご覧になりたい場合は、次のリンクにアクセスしてください。
-
[パート1] Ocelotを使用してASP.NET Core-BasicでAPIゲートウェイを構築する
-
[パート2] Ocelotを使用してASP.NET Core-AuthenticationでAPIゲートウェイを構築する
-
[パート3] Ocelotを使用してASP.NET Core-LoggingでAPIゲートウェイを構築する
レート制限とは何ですか?
Wikipediaによると、ルーティング制限は、ネットワークインターフェイスコントローラーがトラフィックを送受信する速度を制御し、DoS攻撃を防ぐために使用されます。
ほとんどのAPIは、サーバーを過負荷から保護し、多くのクライアントに高品質のサービスを維持するために、1秒(または1分、または別の短い期間)に実行できる呼び出しの数によって制限されます。
ここで、Ocelotを使用してルーティング制限を実装する方法を見てみましょう。
Ocelotバージョン3.1.5を使用して例を作成します。
準備
2つのプロジェクトを作成し、それらが正常に実行できることを確認する必要があります。
通常どおり、最初に2つのプロジェクトを作成します。
プロジェクト名 | プロジェクトの種類 | 説明文 |
APIGateway | ASP.NETコアが空です | これがこのデモのエントリーです。 |
APIServices | ASP.NET Core Web API | これは、いくつかのサービスを提供するAPIサービスです。 |
基本構成の .jsonファイルをAPIGatewayプロジェクトに追加します。
- {
- 「リルート」:[
- {
- "ダウンストリームパステンプレート ": "/ api / values"、
- "ダウンストリームスキーマ": "http"、
- "DownstreamHostAndPorts":[
- {
- "ホスト": "ローカルホスト"、
- 「ポート」:9001
- }
- ]、
- "UpstreamPathTemplate": "/ customers"、
- "UpstreamHttpMethod":[ "Get"]
- }、
- {
- "ダウンストリームパステンプレート ": "/ api / values / {id}"、
- "ダウンストリームスキーマ": "http"、
- "DownstreamHostAndPorts":[
- {
- "ホスト": "ローカルホスト"、
- 「ポート」:9001
- }
- ]、
- "UpstreamPathTemplate": "/ customers / {id}"、
- "UpstreamHttpMethod":[ "Get"]
- }
- ]、
- "GlobalConfiguration":{
- "RequestIdKey": "OcRequestId"、
- "AdministrationPath": "/ administration"
- }
- }
注意
ノードの下のDownstreamHostAndPortsに注意してください。以前のバージョンのOcelotでは、このノードはDownstreamHostおよびDownstreamPortに置き換えられました。
これら2つのプロジェクトを実行すると、次の結果が得られる場合があります。
これで準備は完了です。ここで、http:// localhost:9000 / Customersにルーティング制限構成を追加します。
レート制限をconfiguration.jsonに追加
RateLimitOptionsという名前のノードを追加するだけです。次のコードは、基本構成を示しています。
- {
- "ダウンストリームパステンプレート ": "/ api / values"、
- "ダウンストリームスキーマ": "http"、
- "DownstreamHostAndPorts":[
- {
- "ホスト": "ローカルホスト"、
- 「ポート」:9001
- }
- ]、
- "UpstreamPathTemplate": "/ customers"、
- "UpstreamHttpMethod":[ "Get"]、
- "RateLimitOptions":{
- "ClientWhitelist":[]、
- "EnableRateLimiting": true、
- "期間": "1秒"、
- "PeriodTimespan":1、
- 「制限」:1
- }
- }
- //その他.....
RateLimitOptionsノードの説明を見てみましょう。
- ClientWhitelist
これは、クライアントのホワイトリストを含む配列です。つまり、このアレイ内のクライアントはルーティングの制限の影響を受けません。
- EnableRateLimiting
がルーティング制限を有効にするかどうか。
- 期間
は、1秒、5分、1時間、1日などの期間を指定します。
- PeriodTimespan
は、特定の秒数後に再試行できることを指定します。
- Limit
は、定義された期間内にクライアントが実行できるリクエストの最大数を指定します。
上記の構成では、毎秒1回しかアクセスできません。
ルーティング制限を追加した後の結果を見てみましょう:
ご覧のとおり、API呼び出しの割り当てを超えていることがわかります!許可される最大値は1 1秒です。次のスクリーンショットもご覧ください。
応答ステータスコードは429です(リクエストが多すぎます)。応答ヘッダーには、再試行後が含まれています。つまり、1秒後に再試行する必要があります。
その他の設定
前のステップのルーティング制限を完了しました。
ただし、3つの問題がある場合があります。
- デフォルトのプロンプトを置き換えることはできますか?
- レート制限された応答ヘッダーを削除できますか?
- 応答ステータスコードを変更できますか?
これらすべての質問に対する答えはイエスです。
これらの設定を変更する場合は、グローバル構成を追加する必要があります。
- "GlobalConfiguration":{
- "RequestIdKey": "OcRequestId"、
- "AdministrationPath": "/ administration"、
- "RateLimitOptions":{
- "DisableRateLimitHeaders": false、
- "QuotaExceededMessage": "ヒントをカスタマイズ!"、
- 「HttpStatusCode」:999
- }
- }
GlobalConfigurationのRateLimitOptionsノードを見てみましょう!
- DisableRateLimitHeaders
は、戻りヘッダーを制限するかどうかを指定します。
- QuotaExceededMessage
は、ルーティングが制限されている場合の返信メッセージプロンプトを指定します。
- HttpStatusCode
は、ルーティング制限が発生したときに返されるHTTPステータスコードを指定します。
これらの構成を追加すると、次の結果が得られます。
概要
この記事では、Ocelotでレート制限モジュールを使用する方法について説明します。
お役に立てれば幸いです。
元のアドレス:https : //www.c-sharpcorner.com/article/building-api-gateway-using-ocelot-in-asp-net-core-rate-limited-part-four