1

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

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

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

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

4

2 回答 2

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();
}

然后,您可以创建适配器以与某些 3rd 方库一起使用。

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

希望这可以帮助

于 2013-04-12T13:49:39.337 回答
1

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

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

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

Mule 的真正卖点(对我很有效的东西):

  1. 非常容易部署。它的工作方式类似于 Tomcat,您可以在其中部署包并在服务器上运行。

  2. 已经为您完成了大量的样板代码。

  3. 免费且稳定。他们有大量的知名客户,所以它经过了相当多的考验,我们已经能够让他们的免费版本在生产中顺利运行。

于 2013-04-11T19:18:52.820 回答