2012-11-28 50 views
1

我看這個問題進行版本Web服務:如何實現Web服務的新版本

strategies-for-updating-or-versioning-web-services

,現在我想問問如何實現新的版本。

現在的網址:myUrls/../v1接受網絡服務。現在我想創建新版本:myUrls/../v2。我想保留舊的Web服務,並只添加一些新的Web服務到新版本。我應該怎麼做?我需要創建新的端點,或者我可以使用我的當前版本,只是改變了一些東西。

THX的幫助

UPDATE:

我使用的彈簧WS和SOAP

回答

1

這取決於變更的性質。如果您只是將其他方法添加到REST調用中,那麼在理論上,您可以添加到當前服務中,並且所有其他方法仍然可以工作。

如果您使用的是先合同優先的部署(如SOAP),那麼您需要版本,因爲WSDL需要更新。

它真的取決於 - 你想讓你的服務在當前版本上向後兼容嗎?如果您很樂意在每次更改時強制用戶重構其代碼,那麼是的,每次只更新同一個URL端點,但如果我耗費了您的服務,這會讓我有些煩惱。

0

這取決於你如何部署你的web服務。個人而言,如果更改是向後兼容的(正如@ david99world指出的那樣),那麼您只需將新操作添加到現有服務中即可。

如果更改不兼容(即現有操作的界面已更改),那麼我會將新服務打包爲新的EAR/WAR。這樣,您就可以同時運行這兩種服務,這樣就不是所有的服務使用者都需要同時更改/測試/部署他們的代碼。通過擁有兩個獨立的版本,您可以有一個兩個服務都可以工作的過渡期(儘管這取決於底層數據庫更改是否會阻止v1v2同時工作)。

而且,如果改變是不成功的,它很容易只是取消部署v2 WAR/EAR不影響v1並通過保持WAR/EAR的分開,你不需要在v1進行迴歸測試,只是因爲你已經介紹v2

由於使用獨立的WAR /耳中,URL策略將最有可能成爲myURLv1/../v1myURLv2/../v2 ...

希望是有道理的。

+0

是的,但我不想要2代相同的代碼=重複戰爭。使用url v1的舊客戶端應該會看到新的web服務,它們在v2版本中,所以我需要一些想法如何實現這個 – hudi

+0

如果您有公共代碼,那麼您可以隨時將它移動到兩個版本使用的JAR中。我明白,兩個WAR似乎有點過分,但是兩個不同的版本在不同的戰爭中往往是好事,因爲很容易向管理類型證明新版本不會錯誤地使用舊代碼。 – beny23