2013-04-11 41 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