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


Universal structure or service for API to API Conversion

作为我正在开发的应用程序的一部分,需要在RESTful JSON API和许多其他格式之间创建转换。这样做的目的是允许转换API的输出,以便对使用不同格式的API(如SOAP)或其他具有不同需求的基于REST的API)发出进一步的请求。

一些我认为这可能需要做的事情的例子:

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

我真正感兴趣的是我应该在这里看到什么方法。在我看来,这应该是一个相当普遍的要求,所以我很感兴趣,如果有特定的图书馆,我应该看看,或者现有的服务。如果这样的服务不存在,那么理想情况下,我希望创建一个公共结构,在这个结构中,两个不同的服务可以使用一组通用的工具进行映射,然后将它们配置为一起工作。这将在Laravel PHP应用程序中,因此任何与Composer兼容的库都可以工作。

接着我的评论:

"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接口,但也扩展一些抽象类来继承一些功能,或其他方法添加到你的接口)。

希望能有所帮助

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

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

这是一个基于Java的开源项目,允许您进行非常快速和有效的集成。例如,您可以创建一个"流"(Mule术语),它进行RESTful调用,然后转换数据并将其输出到特定的目的地(CSV, SOAP调用,XML等)

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

  1. 非常容易部署。它的工作原理类似于Tomcat,在Tomcat中,您可以部署一个包,它在服务器上运行。

  2. 成堆成堆的样板代码已经为你完成了。

  3. 自由稳定。他们有大量高知名度的客户,所以它经过了大量的测试,我们已经能够在生产中使用他们的免费版本,没有任何问题。