web-dev-qa-db-ja.com

REST API:複数のバージョン、単一のアプリケーション?

私はREST APIですぐにいくつかの互換性のない変更を導入する必要があるため、v2が必要です。並行して2か月間v1をサポートする必要があります。クライアントは準備ができたらいつでも新しいAPIに切り替える時間です。APIは共有クラウドを介して提供され、すべてのクライアントは同じシステムバックエンド、特に単一の共有データベースを共有します。

REST APIのバージョン管理についての記事をたくさん見つけましたが、それらはすべてクライアントの観点、または高レベルの設計の観点からのものでした。それは本当に私の懸念ではありません、私たちのAPI URIにはすでにバージョン管理が含まれているため、/ v2ベースパスを使用してサービスを提供しても問題はありません。

しかし、私はこれを実際にどのように実装するのか自分自身に尋ねています。そして、私はそれについての良い記事を本当に見つけていません。プロジェクトのv2から分岐して、v1とv2を別々のアプリケーションとしてビルドしてデプロイしたくないのです。2つのアプリケーションでメンテナンス、バグ修正、構成の変更などが行われます。冗長性の危険(つまり、バージョン間の不一致の可能性)。また、もちろんv2はすべてのサービスで異なるわけではないため、ほとんどのコードは同じです。

REST APIを外部に複数のバージョンを提供し、一部のコードが共有される単一のアプリケーションに技術的に実装する方法に関するベストプラクティスがあります(つまり、v2/someServiceは内部的にリダイレクトされます) v1/someService)、そして実際の違いだけが新しいサービスでコーディングされていますか?これを設計するのに役立つフレームワークさえあるかもしれませんか?アプリはJavaでコーディングされています)。

これに取り組むためのヒントやリソースに感謝します。ありがとう!

9
user3237736

あなたが話している状況に直面した場合、私は最初に新しいバージョン(v2)を最初のバージョン(v1)と下位互換性を保つようにします。その場合は、機能を追加してAPIドキュメントを更新するだけで、アクティブなコードベースを1つだけ維持できます。既存のデータベーススキーマにフィールドを追加するような、返されるデータが誰かのコードを壊さない限り、応答ペイロードに何かを追加することもできると思います。

V2がv1との下位互換性がない場合は、v1を別のサーバーに移動して、ユーザーがv2に切り替えるために必要なコード変更を行う時間を与えるために、指定された限られた期間、そこに配置されることをユーザーに通知することもできますが、このバージョンは更新されていないため、問題がある場合は、新しいバージョンに切り替える必要があります。したがって、v2はコードベースのHEADバージョンであり、開発中の他のブランチはありません。

これがあなたがまだ考えていなかった何かを助け、提供することを願っています。

0
Eric Green