9

異なる API バージョンを公開する場合、構造が異なる可能性のあるデータの保存と取得をどのように処理しますか?

2 つの API バージョンがあるとします。V1 と V2。V1 と V2 の両方に、' https://api.com/message ' に POST エンドポイントがあり、次のような渡されたデータに基づいてデータベースにメッセージを作成します。

{
    DOB: '2014-12-01'
}

V1 では、必要なデータが V2 とは異なります。V2 では、DOB を「YYYY-MM-DD」形式の文字列から整数のタイムスタンプ (例: 1284723728323) に変更することにしたためです。

この場合、V2 API を使用して呼び出しからデータを保存すると、DOB フィールドは整数になりますが、V1 への呼び出しから保存すると、非常に異なる形式の文字列になります。

API を反復するたびに、基礎となるデータの多くの側面を変更する可能性があります。古いバージョンの API を呼び出すと、保存されたデータが他のバージョンの API に対して正しくなくなります。

さまざまな形式/構造のデータを必要とするさまざまな API バージョンを処理するエレガントな方法はありますか?

4

2 に答える 2

6

私が最初に行うことは、Web 向けの各 API が実際interfaceのプログラミング言語 (Java など) の実際の API に対応していることを確認することです。

したがって、問題はプログラミング言語 API のバージョン管理の問題になり、Web サービスに固有の考慮事項から解放されます。

次に、MyWebServiceInterfaceV1 のように、インターフェイスの名前にバージョン番号を含めます。

インターフェイスのバージョンが外部の世界にリリースされると (いわば「それは自由です」)、そのインターフェイスを含むソース コード フォルダーはソース コード リポジトリにロックされ、誰もそれを再度変更することはできなくなります。 、 これまで。次に、インターフェイスのコピーを作成し、そのバージョン番号を増やします。その瞬間から、新しい作業はすべて新しいバージョンで行われます。

そのため、現在 MyWebServiceInterfaceV2 に取り組んでいます。

導入するインターフェイスの新しいバージョンごとに、古いインターフェイスを実装して新しいインターフェイスにマップするコンバーター クラスも作成し、新しいインターフェイスもロックされるまでそのクラスを維持し続けます。

したがって、V1 から V2 へのコンバーター クラスは、文字列日付を整数日付に変換できなければならず、場合によっては逆の整数日付から文字列日付への変換も可能でなければなりません。ここで重要なことは、すべての変換が可能であるべきだということです。変換が不可能と思われる場合は、古いバージョンとの下位互換性が失われるような方向への変更を計画していることを意味します。すべての新しい設計で下位互換性を念頭に置いている限り、必要な変換はすべて可能です。

N 個のバージョンがある場合、任意のバージョンから任意の新しいバージョンに直接変換できるように (N-squared)/2 の異なるコンバーターを実装するか、N 個のコンバーターのみを使用して、それぞれが変換のみを行うことができます。 2 つの連続するバージョン間で、必要な数のバージョンをスタックして、非常に古いバージョンから段階的に最新バージョンに移行します。

もちろん、常に最新バージョンのインターフェースのみが、実際のデータベースと通信する実際の実装によってサポートされています。

于 2015-02-09T15:04:15.750 に答える