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

Php API到API转换的通用结构或服务,php,web-services,api,rest,soap,Php,Web Services,Api,Rest,Soap,作为我正在开发的应用程序的一部分,需要在RESTful JSON API和许多其他格式之间创建转换。其目的是允许转换API的输出,以向使用不同格式(如SOAP)的API或具有不同需求的其他基于REST的API发出进一步请求 我认为这可能需要做的事情的几个例子: 操纵JSON输出以使用不同的键(可能只是 资料 转换为XML数据包/文档 转换为有效的SOAP请求 将数据输出为特定的文件类型/结构(如csv) 我真正感兴趣的是我应该在这里寻找什么方法。在我看来,这应该是一个相当常见的请求,所以我感

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

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

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

我真正感兴趣的是我应该在这里寻找什么方法。在我看来,这应该是一个相当常见的请求,所以我感兴趣的是是否有我应该查看的特定库,或者可能是现有的服务。如果这样的服务不存在,那么理想情况下,我想创建一个公共结构,其中两个不同的服务可以使用一组通用工具进行映射,然后将这些工具配置为协同工作。这将在Laravel PHP应用程序中,因此任何与Composer兼容的库都可以工作。

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

不过,我强烈建议您也将Mule ESB作为一种解决方案

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

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

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

  • 大量的样板代码已经为您完成了

  • 免费且稳定。他们拥有大量知名客户,因此经过了相当多的战斗测试,我们能够让他们的免费版本在生产中顺利运行


  • 以下是我的评论:

    "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);
    }
    
    您正在传递的数据的接口(数据将是一个对象,也有一个通用接口)

    然后,您可以创建适配器,以便与某些第三方库一起使用

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


    希望这有帮助

    我不知道有任何这样的库可以做到这一点,但作为一个粗略的指导,我认为您可能希望创建某种类型的适配器,它们都使用一个公共接口。然后可以编写这些适配器来处理您试图通过某个开源库实现的转换。操纵输出可能是一个很好的借口使用装饰图案:)对不起,我帮不上什么忙了。谢谢卡尔。你有你所说的适配器类型的例子吗?我想你指的是适配器模式顺便说一句?是的,适配器模式就是我的意思:)在你提到Java之前,我一直支持你;)说真的,如果我们选择走第三方路线,这看起来确实是一个很好的解决方案。尽管我认为云计算选项在我看来更有趣,因为我们是一家PHP公司。
    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);
        }
    
    }