2013-04-11 35 views
1

作爲正在開發的應用程序的一部分,需要在我們的RESTful JSON API和其他一些格式之間創建轉換。其目的是允許我們的API輸出進行轉換,以向使用不同格式(如SOAP或其他基於REST的API)的API提出進一步的請求。適用於API到API轉換的通用結構或服務

那種東西的幾個例子,我認爲這可能需要做:

  • 操縱JSON輸出到使用不同的密鑰(也許只有 數據子集
  • 轉換爲XML分組/文件
  • 轉換爲有效SOAP請求
  • 輸出數據作爲特定文件類型/結構(例如,CSV)

我真的很感興趣,我應該在這裏看什麼方法。在我看來,這應該是一個相當常見的請求,所以如果有特定的圖書館我應該看看,或者現有的服務也許我有興趣。如果這樣的服務不存在,那麼理想情況下,我想創建一個通用結構,從而可以使用一組通用工具映射這兩種不同的服務,然後將這些工具配置爲一起工作。這將在Laravel PHP應用程序中,因此任何Composer兼容庫都可以工作。

+0

我不知道有任何這樣的庫要做到這一點,但作爲一個粗略的指南,我認爲你可能想創建某種適配器所有使用通用接口。然後可以編寫這些適配器來處理您嘗試通過某個開源庫實現的轉換。操作輸出可能是使用裝飾器模式的好藉口:)對不起,我無法提供更多幫助。 – 2013-04-11 13:37:34

+0

謝謝卡爾。你是否有這種類型的適配器的例子? – robjmills 2013-04-12 07:57:36

+0

我假設你指的是適配器模式btw? – robjmills 2013-04-12 13:46:50

回答

2

從我的意見繼:

"I am not aware of any such library to do this, but as a rough guide I think you probably want to create some kind of adapters which all use a common interface. These adapters can then be written to deal with the conversion you are trying to achieve via some open-source library. Manipulating the output might be a good excuse to use the decorator pattern :) Sorry I could not be of much more help." 

你以後什麼,我想一個例子如下:

的接口爲您的適配器

interface DataConvertor 
{ 
    public function convert(DataInterface $data); 
} 

的接口爲你傳遞的數據(數據將是一個對象也有一個通用的接口來工作)。

interface DataInterface 
{ 
    /** 
    * returns a json string 
    */ 
    public function asJson(); 
} 

然後你可以創建你的適配器用於某些第三方庫。

class SomeThirdPartyNameAdapter implements DataConvertor 
{ 

    public function convert($data) 
    { 
     //some logic here to make my data object with a known asJon method 
     //suitable for use for some 3rd party library, and use that library. 


     $rawJson = $data->asJson(); 
     //manipulate this as needed ($compatibleData) 

     $thirdPartyLib = new ThirdPartyLib(); 
     return $thirdPartyLib->thirdPartyMethod($compatibleData); 
    } 

} 

顯然,這只是一個粗略的指南,有可能是這個其他部分可以使抽象的(例如具有適配器實現DataConvertor接口,同時也延長了一些抽象類繼承某些功能或其他方法添加到你的界面)。

希望這有助於

1

卡爾是正確的,一個很好的方法是使用通用接口創建一些適配器。然後,您可以提供將JSON轉換爲XML或JSON爲CSV等的實現。

但是,我強烈建議將Mule ESB作爲解決方案進行研究。 http://www.mulesoft.org/

這是一個基於Java的開源項目,可以讓您快速高效地進行集成。例如,您可以創建一個「流」(一個Mule項),它可以進行RESTful調用,然後轉換數據並將其抽出到特定目標(CSV,SOAP調用,XML等)。

真實賣點騾子(對我來說工作很好的東西):

  1. 很容易部署。它的作用與Tomcat類似,您可以在其中部署程序包並在服務器上運行。

  2. 噸和噸的樣板代碼已經爲您完成。

  3. 自由穩定。他們擁有大量高知名度的客戶,所以它的測試非常有效,我們已經能夠免費獲得他們的免費版本,並且沒有任何麻煩。

+0

我一直和你在一起,直到你提到Java;)但認真的是,如果我們選擇走第三方路線,那看起來是一個很好的解決方案。儘管我認爲雲計算選項對我來說更加有趣,因爲我們是一個PHP家庭。 – robjmills 2013-04-12 07:59:06