私は ReST API のバージョン管理戦略について調べてきましたが、それらのどれも解決していないように見えるのは、基礎となるコードベースをどのように管理するかということです。
たとえば、単一のフィールドではなく個別forename
のフィールドを返すように Customer リソースを変更するとします。(この例では、関連する概念を理解しやすいため、URL バージョン管理ソリューションを使用しますが、質問はコンテンツ ネゴシエーションまたはカスタム HTTP ヘッダーにも同様に適用できます)surname
name
にエンドポイントがhttp://api.mycompany.com/v1/customers/{id}
あり、別の互換性のないエンドポイントが にありますhttp://api.mycompany.com/v2/customers/{id}
。v1 API のバグ修正とセキュリティ アップデートは引き続きリリースしていますが、新機能の開発はすべて v2 に集中しています。API サーバーへの変更をどのように作成、テスト、デプロイするのですか? 少なくとも 2 つの解決策を確認できます。
v1 コードベースのソース管理ブランチ/タグを使用します。v1 と v2 は個別に開発および展開され、必要に応じてリビジョン コントロール マージが使用され、両方のバージョンに同じバグ修正が適用されます。これは、以前のバージョンをサポートしながらメジャーな新しいバージョンを開発するときにネイティブ アプリのコードベースを管理する方法と同様です。
コードベース自体が API バージョンを認識できるようにするため、v1 顧客表現と v2 顧客表現の両方を含む単一のコードベースになります。バージョン管理は、展開の問題ではなく、ソリューション アーキテクチャの一部として扱います。おそらく、名前空間とルーティングの組み合わせを使用して、要求が正しいバージョンで処理されるようにします。
ブランチ モデルの明らかな利点は、古い API バージョンを削除するのは簡単だということです。適切なブランチ/タグのデプロイを停止するだけです。ただし、複数のバージョンを実行している場合は、ブランチ構造とデプロイ パイプラインが非常に複雑になる可能性があります。「統一されたコードベース」モデルはこの問題を回避しますが、(私が思うに?) 不要になった非推奨のリソースとエンドポイントをコードベースから削除することははるかに困難になります。単純な正解がある可能性は低いため、これはおそらく主観的なものであることは承知していますが、複数のバージョンにわたって複雑な API を維持している組織がこの問題をどのように解決しているかを理解したいと思っています。