作为我正在开发的应用程序的一部分,需要在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的真正卖点(对我来说非常有用的东西):
-
非常容易部署。它的工作原理类似于Tomcat,在Tomcat中,您可以部署一个包,它在服务器上运行。
-
成堆成堆的样板代码已经为你完成了。
-
自由稳定。他们有大量高知名度的客户,所以它经过了大量的测试,我们已经能够在生产中使用他们的免费版本,没有任何问题。