この記事は主に、ASP.Net Core WebApi のいくつかのバージョン管理の比較に関する簡単な説明を紹介しています。編集者はそれが非常に優れていると考えたので、参考として共有します。エディターをフォローして見てみましょう
1. バージョン管理の利点:
(1) 既存のシステムに損傷を与えることなく、機能をタイムリーに起動するのに役立ちます。
(2) 選択した顧客に追加機能を提供するのにも役立ちます。
API のバージョン管理は、次のようなさまざまな方法で制御できます:
(1) URL またはクエリ文字列パラメータとしてバージョンを追加します。
(2) カスタム ヘッダーおよび accept ヘッダーを介して
この記事では、複数のバージョンの ASP.NET Core Web API をサポートする方法を見てみましょう。
1. asp.net core webapi プロジェクトを作成し、NuGet パッケージを参照します: Install-Package Microsoft.AspNetCore.Mvc.Versioning -Version 2.0.0
プロジェクトとインストール パッケージの準備ができました。次に、Startup.cs の ConfigureServices メソッドに次のコードを追加する必要があります:
ご覧のとおり、3 つの異なるオプションが構成されています。
ReportAPIVersions: これはオプションです。ただし、true に設定すると、API はサポートされているバージョン情報を応答ヘッダーで返します。
AssumeDefaultVersionWhenUnspecified: このオプションは、バージョンを提供しないリクエストに使用されます。デフォルトでは、想定される API バージョンは 1.0 です。
DefaultApiVersion: このオプションは、リクエストでバージョンが指定されていない場合に使用するデフォルトの API バージョンを指定するために使用されます。これはデフォルトでバージョン 1.0 になります。
これで構成と設定はすべて完了です。次に、API バージョンにアクセスするさまざまな方法を見ていきます。
2. QueryString を使用してバージョン管理を実装します。
次のコードに示すように、コントローラーを開き、それに ApiVersion 機能を追加します。
上記のコードはバージョン 1.0 とみなされます。別の名前空間に同じ名前の別のコントローラー クラスを作成し、API バージョンをバージョン 2.0 に設定することもできます。下の写真に示すように:
以上です。次に、ブラウザに移動してコントローラーにアクセスします。デフォルトに設定されている API バージョン 1.0 コントローラーからの出力が表示されるはずです。 URL に api-version=2 を追加すると、API バージョン 2.0 コントローラーの出力が表示されるはずです。
2. URL パスセグメントを介して実装:
クエリ文字列パラメータは便利ですが、長い URL やその他のクエリ文字列パラメータの場合は苦痛になる可能性があります。代わりに、URL パスにバージョンを追加する方が良い方法です。例:
api/v1/values
api/v2/values
これはまだ上記のプロジェクトですが、次のコードを v1 と v2 コントローラーに追加する必要があります。以下に示すように:
同様に、該当するすべての場所に対してルーティング パラメーターを更新する必要があります。この変更により、API インターフェースにアクセスする際には常にバージョン番号が必要になります。 URL 内のバージョン番号を変更することで、api/v1/values を通じてバージョン 1.0 にアクセスし、api/v2/values を通じてバージョン 2.0 にアクセスできます。シンプルで見た目もすっきり。
テスト結果は次のとおりです:
3. HTTPヘッダーを介してバージョン管理を実装します
上記の2つの方法では、バージョン管理をサポートするためにURLを変更する必要があります。ただし、API の URL をクリーンなままにしたい場合は、HTTP ヘッダーを追加して API バージョン情報を渡すこともできます。これを機能させるには、ApiVersionReader オプションを構成する必要があります。コードは次のとおりです:
強調表示された行は、ヘッダー「api-version」が API バージョン番号の予想される場所であることを示しています。ルートのプロパティにバージョンの詳細が含まれていないことを確認してください。テストした結果は次のとおりです。
「API version」の値として 2.0 を指定すると、バージョン 2.0 コントローラーが呼び出され、出力が返されます。
シンプルでセットアップが簡単。ただし、バージョン管理のためのクエリ文字列パラメーター メソッドは機能しなくなりました。ヘッダーを設定すると、クエリ文字列パラメータを指定できなくなります。両方のケースをサポートしたい場合は、HeaderApiVersionReader の代わりに QueryStringOrHeaderApiVersionReader を使用します。コードは次のとおりです:
したがって、クエリ文字列パラメータとヘッダーがサポートされるようになりました。デフォルトのクエリ文字列パラメーター名は api-version であるため、コンストラクターを空のままにすることができますが、別の名前が必要な場合は、それを指定する必要があります。クエリ文字列パラメータとヘッダーに別の名前を使用することもできます。 ReportApiVersions も true に設定していることに注意してください。これにより、応答ヘッダーでバージョン情報が返されます。以下を参照してください。
それでは、さらにいくつかのオプションを見てみましょう。
MapToApiVersion パラメーターの使用法:
MapToApiVersion プロパティを使用すると、単一の API 操作を任意のバージョンにマッピングできます。つまり、1 つのコントローラーで複数のバージョンをサポートします。コントローラーには、バージョン 3 でサポートされる API アクション メソッドのみが含まれる場合があります。この場合、MapToApiVersion を使用できます。以下のコードを見てください。
上記のコードの意味は、パブリック文字列 Get() メソッドはバージョン 1.0 でのみサポートされ、パブリック文字列 Getv3() メソッドはバージョン 3.0 でのみサポートされることです。
写真と実際の画像があり、非常に柔軟で、とても気に入りました。
非推奨パラメータの使用法:
複数の API バージョンをサポートする場合、一部のバージョンは時間の経過とともに最終的に非推奨になります。 1 つ以上の API バージョンを非推奨としてマークするには、コントローラーを非推奨として修飾するだけです。これは、API バージョンがサポートされていないという意味ではありません。まだそのバージョンを呼び出すことができます。これは、以下のバージョンが将来非推奨になることを API 呼び出しユーザーに認識させるための単なる方法です。
上記の Deprecated を TRUE に設定すると、バージョン 1.0 が将来非推奨になることを意味します。 API インターフェースにアクセスすると、以下の図に示すように、応答ヘッダーに次の情報が表示されます。
ApiVersionNeutral 属性の使用法:
ApiVersionNeutral 属性は、この API がバージョン管理をサポートしなくなったことを定義します。これは、API のバージョン管理をサポートしているか、API のバージョン管理をサポートしていないレガシー API をサポートしているかに関係なく、まったく同じように動作する API に役立ちます。したがって、ApiVersionNeutral プロパティを追加してバージョン管理を終了できます。
バージョン情報を取得する
アクセスされているクライアントのバージョンを知りたい場合は、次のコードを通じてこの関数を実装できます:
要約すると、複数のバージョン管理された API がロールロールに役立ちます。機能を効率的に強化しながら、変更の追跡も容易にします。この記事では、ASP.NET coreWEB API で複数のバージョンのサポートを追加する方法について説明しました。 nuget パッケージは、クエリ文字列パラメーターによるバージョン管理、URL およびヘッダーによるパス セグメントの追加をサポートしています。また、バージョン単一の API 操作とバージョンをオプトアウトする機能も備えています。
サードパーティのパッケージに頼らずに API のバージョン管理を実装することは可能ですか? 早速、読み進めてみましょう。
4. Ultimate バージョン (NuGet パッケージなし) asp.net core Web API バージョン コントロール
新しいコア API プロジェクトを作成します:
VersionControl フォルダーの下に、IApplicationModelConvention インターフェイスを実装する新しいクラス NameSpaceVersionRoutingConvention を作成します。 コードは次のとおりです。
public class NameSpaceVersionRoutingConvention:IApplicationModelConvention { private readonly string apiPrefix; private const string urlTemplate = "{0}/{1}/{2}"; public NameSpaceVersionRoutingConvention(string apiPrefix = "api") { this.apiPrefix = apiPrefix; } public void Apply(ApplicationModel application) { foreach (var controller in application.Controllers) { var hasRouteAttribute = controller.Selectors .Any(x => x.AttributeRouteModel != null); if (!hasRouteAttribute) { continue; } var nameSpaces = controller.ControllerType.Namespace.Split('.'); //获取namespace中版本号部分 var version = nameSpaces.FirstOrDefault(x => Regex.IsMatch(x, @"^v(\d+)$")); if (string.IsNullOrEmpty(version)) { continue; } string template = string.Format(urlTemplate, apiPrefix, version, controller.ControllerName); controller.Selectors[0].AttributeRouteModel = new AttributeRouteModel() { Template = template }; } } }
コードをデバッグすると、このメソッドはプログラムが実行された場合にのみ実行されることがわかりました。初めて実行されるだけで、何度も実行されることはないため、非常に効率的です。
5. 概要:
以上がASP.Net Core の WebApi のいくつかのバージョンの詳細な比較 (画像)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。