2012-01-12 19 views
3

REST Webサービスをどのようにバージョンアップするかに関する哲学的議論が進行中であるようです。しかし、私にとっては、Javaサーブレットベースのバックエンドで実装して維持するのがどれほど簡単かどうかという点で、最も重要な問題です。私の会社は新しいREST Webサービスを構築していますが、現時点ではバージョン管理に関心がありませんが、私たちを隅々まで彩るアーキテクチャ上の決定をしたくありません。JavaベースのREST Webサービスのバージョニング?

私たちが今作成しなければならない主な決定は、URIまたはメディアタイプ(あるいはその両方)にバージョン識別子を入れることです。関連性がある場合は、いくつかの新しいメディアタイプのみを作成します。また、アプリケーションには50以上のリソースURIがあります。

Javaサーブレットでの各アプローチの実装の賛否両論は何ですか?

私の最初の考え:

1)私はメディアの種類(たとえば、バージョン管理のアイデアのように「アプリケーション/ vnd.mystuff + XMLを、バージョン= 1.0」)、それはXMLスキーマをバージョン管理と同じように感じているので、 SOAP/RPC Webサービスの場合また、connegがこの種のもののために設計されたようだ。しかし、アプリケーションをドメイン指向の設計主体で作成し、新しいバージョンのJavaクラスを作成して古いクラスと一緒に置くことはできないため、これを実装するのは不可能ではないにしても難しいと思われます。したがって、新しいJavaクラスを実装し、古いバージョンのメディアタイプをサポートするJSON/XMLのシリアル化/逆シリアル化を手作業で行う必要があります。私はこれがSOAP用のXMLスキーマのバージョニングと同じだとは思わない...

2)一方、URI(例えば "http://ourapp.com/v1/mystuff")のバージョンを変更する場合は、我々の顧客は、システムの2つのバージョン全体を配備し、異なるコンテキストマッピングを持つ2つの別々のサーブレットとしてそれらを立てることができました。しかし、v1 JavaクラスのJPA(ORM)マッピングを変更してv2 RDBMSスキーマを使用していました。これは必ずしも単純ではないかもしれませんが、私はそれがどのようにできるかを簡単に理解することができます。しかし、このアプローチでは、 "application/vnd.mystuff + xml"が2つの異なるXMLスキーマに対応する2つの異なるXMLモデルを返すので、私はバグです。しかし、クライアントがv1またはv2のURIを使用していたために何を求めているかをクライアントが知っているとしても問題ではないかもしれません...

また、それとも、この問題全体に踏み込んで、後で心配するのは大丈夫ですか?

+0

私の意見では、異なるURIを使用する方がよりクリーンで、クライアントが彼が使っているものをより明確に見ることができます。これは、単一のリソースよりもAPI全体をバージョニングする方が適切です(同じ世代の2つのリソースの前にvXとvYが混乱する)。これは、大企業(Yahoo、DropBoxなど)が最も一般的に使用しているアプローチでもあります。 – Viruzzo

+2

http://stackoverflow.com/questions/389169/best-practices-for-api-versioning – Michael

答えて

1

モバイルアプリケーションによって安らかなサービスが使用されている場合は、両方の応答の処理を簡単に行うことができません。私の意見ではURLのバージョンを保存する方が良い方法です。便利なときに古いエンドポイントを廃止する方が簡単になるでしょう。

関連する問題