作为我正在开发的App的一部分,需要在我们的RESTful JSON API和许多其他格式之间创建转换。目的是允许转换来自我们的API的输出以进一步请求使用不同格式的API,例如SOAP或具有不同要求的其他基于REST的API。
我认为可能需要做的事情的几个例子:
我真的很感兴趣,我应该在这里看到什么方法。在我看来,这应该是一个相当普遍的请求所以我很感兴趣,如果有我应该看的特定库,或者现有的服务。如果不存在这样的服务,那么理想情况下我想创建一个通用结构,从而可以使用一组通用工具映射2个不同的服务,这些工具只是配置为一起工作。这将在Laravel PHP应用程序中,因此任何与Composer兼容的库都可以工作。
答案 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的真正卖点(对我来说很有用的东西):
非常容易部署。它类似于Tomcat,它可以部署一个包,并在服务器上运行。
已为您完成吨和吨和大量的样板代码。
自由而稳定。他们拥有大量知名客户,因此经过严格的测试,我们已经能够毫无困难地将他们的免费版本投入生产。