2

私は、.NET Web サービスでのバージョン管理のソリューションについて読んでいます。

http(s)://example.com/API/WebServices/v1.0.0/Customer.asmx
http(s)://example.com/API/WebServices/v1.1.0/Customer.asmx
http(s)://example.com/API/WebServices/v1.2.0/Customer.asmx

等々; そして、(どの Microsoft Framework においても) 完璧な答えはまだないようです。URL を変更するのがよいという意見がたくさんあります。REST環境で言う他の人は、HTTPヘッダー/コンテンツヘッダー/受け入れヘッダーなどを使用して、バージョンと受け入れる出力を定義します。

.NET の世界では、WSDL から参照を生成し、インテリセンスを取得することでそれが実現します。多くの「リフティング」を抽象化し、メソッドを呼び出すことができます。

しかし、追加バージョンの維持とリリース、API の更新、Web サービスの拡張の世界では、それが難しくなっています。

以下で説明する解決策が提案されているのを見たことがありません。テストリグでは問題なく動作するようです。しかし、それはばかげたアイデアであるため、または現在のかゆみを掻く単なるハイブリッドアイデアであるため、誰もそれを提案していませんか?

メインの Web アプリの新しいバージョン、バグ修正、新機能、および機能拡張をおそらく月に 1 回リリースするので、メンテナンスが簡単なものを探していますが、Web サービスの消費者は、必要になるまで (理由の範囲内で) アップグレードについて心配する必要はありません。 ) バージョン/URL ごとに既存の Web サービスの完全なコピーを作成するわけではありません。

基本的に提案は次のとおりです。

カスタマー サービス はバージョン 1.0 で登場し、URL は /API/WebServices/V1.0/Customer.asmx です。

アプリのバージョン 1.1 がリリースされましたが、カスタマー Web サービスは変更されていません。そのため、/API/WebServices/V1.1/Customer.asmx の URL を /API/WebServices/V1.0/Customer.asmx に書き換えます。

アプリのバージョン 1.2 がリリースされましたが、カスタマー Web サービスは変更されていません。そのため、/API/WebServices/V1.2/Customer.asmx の URL を /API/WebServices/V1.0/Customer.asmx に書き換えます。

等々....

それで

バージョン 1.3 では、別のメソッドを追加したいと考えています。これは素晴らしいことです (別のメソッドを追加しても、「現在の」メソッドを変更しなくても、v1.0 で実行されているリモート アプリが壊れることはないため)、追加のメソッドを追加するだけです (自分でテストして、ばかげたミスはしていません)、/API/WebServices/V1.3/Customer.asmx でリリースします。今回は「新しい」Web サービスですが、基本的に私はこのビットが好きではありません - 何か良いアイデアはありますか? 新しいメソッドが追加された 1.0 の webservice ファイルのコピーです。Web サービス ファイル自体は、すべてのロジックと、他のクラス/コア ファイルで可能なすべてのものを可能な限り最小限に抑えているため、実際のロジックはありません (実質的にはエンドポイント インターフェイス)。

V1.4、V1.5 、 V1.6 はすべて V1.3 サービスへの書き直しです。

後方互換性を破る ここで、何かを変更したり、その動作を変更したりする必要があるため、V1.7 用の新しい Web サービスを作成します - V1.3 コードをコピーし、完了するまで変更を開始します。

このアイデアにより、リモートで消費するアプリが必要なときにアップグレードできるようになると思います。私たちのタスクは、古いバージョンのサポートを正式に停止するまで古いサービスが機能し続けることを保証し、アーリーアダプターが最新の機能を取得できるようにし、新しいバージョンを発行し続けることを可能にすることです。毎月、そして誰かが「カスタマー サービスの URL は?」と言ったときはいつでも。簡単に答えることができます:

http(s)://example.com/API/WebServices/**versionNumber**/Customer.asmx

そしてそれは常に機能します。(非常に古い場合を除き、削除しました)。

これはばかげた考えですか?合理的なアイデアですか、それとも間違ったキーワードでグーグル検索していて、これはすでにクラックされていますか?

4

0 に答える 0