2011-08-08 28 views
2

我有一個使用SOAP在C#中編寫的Web服務。客戶已請求可以使用相同的服務作爲基於REST的服務。SOAP到REST轉換

是否有一個聰明/快捷的方式,我可以做到這一點,或者我正在從新的重建?

+0

這取決於你當前的SOAP接口的功能 - 如果它只是通過一些標識符查找文檔,那不是太難......如果你插入/修改文檔......它仍然沒有太多問題...但是如果它是圍繞着消息而不是文檔發生的任何事情,那麼你就有一些工作要做。 – Joe

回答

5

基於SOAP的服務使用與REST服務完全不同的一組約束來構建。如果服務很簡單,那麼這兩種方法的最終結果可能看起來有些相關,但實際上它們是兩種完全不同的方法。

+0

我有一種可怕的感覺,情況就是如此。 –

3

SOAP和REST不僅在概念上而且是機械上不同。

從概念上講,SOAP方法幾乎是RPC,遠程過程。所以你的web方法看起來像「GetListOfCustomers」和「DeleteCustomer」。在REST中,您將客戶建模爲資源,並在這些資源上使用HTTP動詞。要獲取客戶列表,客戶端將發送HTTP GET,服務器將以XML,JSON,HTML或自定義格式返回客戶表示。例如,客戶代表可能會嵌入URL鏈接,允許客戶端代碼刪除客戶。這叫做HATEOAS

機械SOAP是一個位於HTTP之上的層。忽略和重新實現現有HTTP功能(如信封,動詞,緩存,編碼等)的層。與依賴所有這些HTTP功能的REST相反。所以機械REST更簡單,因爲SOAP沒有附加層。

當您被要求將現有的SOAP服務作爲REST使用時,它可能意味着純粹的機械方面。您可能需要「XML RPC over HTTP」,這將需要您做一些工作,但可能不如從SOAP/RPC重新設計API到REST/HATEOAS那樣困難。

+1

非常感謝您的詳細回覆。我想我需要做一些閱讀,並期待一些漫長的夜晚。 –

+0

-1您忘記了一些SOAP Web服務是基於消息或基於文檔的,而不是RPC。你也可以拋棄意識形態,堅持回答這個問題。 –

+1

@John Saunders:它的WSDL SOAP綁定風格,可以是RPC或Document。編程模型大部分時間是RPC。但是謝謝你的評論,它和你的答案一樣有用。 – Dmitry

0

該解決方案將取決於您如何實施SOAP Web服務。

這不是一個「轉換」。你將會編寫一個基於REST的服務來完成你的SOAP服務所做的同樣的事情。如果您正確開發了您的SOAP服務,那麼您將能夠重用大部分代碼。然後,您將能夠部署能夠滿足這兩項要求的單一服務。