API到API转换的通用结构或服务

时间:2013-04-11 11:50:17

标签: php web-services api rest soap

作为我正在开发的App的一部分,需要在我们的RESTful JSON API和许多其他格式之间创建转换。目的是允许转换来自我们的API的输出以进一步请求使用不同格式的API,例如SOAP或具有不同要求的其他基于REST的API。

我认为可能需要做的事情的几个例子:

  • 操纵JSON输出以使用不同的键(也许只是一个子集 数据
  • 转换为XML数据包/文档
  • 转换为有效的SOAP请求
  • 输出数据作为特定文件类型/结构(例如csv)

我真的很感兴趣,我应该在这里看到什么方法。在我看来,这应该是一个相当普遍的请求所以我很感兴趣,如果有我应该看的特定库,或者现有的服务。如果不存在这样的服务,那么理想情况下我想创建一个通用结构,从而可以使用一组通用工具映射2个不同的服务,这些工具只是配置为一起工作。这将在Laravel PHP应用程序中,因此任何与Composer兼容的库都可以工作。

2 个答案:

答案 0 :(得分: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 :(得分:1)

Carl是对的,一个很好的方法是使用通用接口创建一些适配器。然后,您可以提供将JSON转换为XML或JSON为CSV等的实现

但是我强烈建议将Mule ESB作为解决方案。 http://www.mulesoft.org/

这是一个基于Java的开源项目,可以让您进行快速,高效的集成。例如,您可以创建一个“流”(一个Mule术语)来进行RESTful调用,然后转换数据并将其抽出到特定目标(CSV,SOAP调用,XML等)。

Mule的真正卖点(对我来说很有用的东西):

  1. 非常容易部署。它类似于Tomcat,它可以部署一个包,并在服务器上运行。

  2. 已为您完成吨和吨和大量的样板代码。

  3. 自由而稳定。他们拥有大量知名客户,因此经过严格的测试,我们已经能够毫无困难地将他们的免费版本投入生产。