假设我开发了两个名为 ProductAPI 和 OrderAPI 的服务。它们都使用公共(public)域模型(公共(public)实体层次结构)。
这两个服务最终都作为 RCP(SOAP 或 REST)公开。 OrderAPI 内部调用 ProductAPI。
对于 REST:
我们可以使用 JAX-RS 开发 ProductAPI,并且可以实现要在 OrderAPI 中使用的“ProductAPI REST 客户端”来访问 ProductAPI。
此客户端可以使用相同的类层次结构将 JSON 反序列化为 ProductAPI 中使用的相同类。
所以,没有中间格式转换。
对于 SOAP:
我们使用 JAX-WS(或 Axis2..etc)开发 ProductAPI,并在 WSDL 中公开服务。 在这种情况下,我们必须使用公开的 WSDL 实现“ProductAPI SOAP 客户端”。(可能使用使用公开的 WSDL 的 stub 生成工具)。
这里生成的类是根据 WSDL 中的 XSD 定义生成的,如果我们想使用相同的公共(public)域模型类,我们必须进行额外的格式转换。
我的问题:
1) 对于 SOAP,有没有办法跳过这种格式转换?
2) 在企业应用程序(例如电子商务)中,避免这种中间数据转换以提高性能是一个好的做法吗?
最佳答案
要在进程之间移动数据,需要对数据进行序列化。您当然可以对序列化数据使用与 SOAP 不同且更好的格式,但如果您已经有了 SOAP,则工作量会更大。
在这种项目中,值得用程序员的努力来换取性能吗?我的猜测是否定的,因为无论如何性能可能已经足够好了。如果不是,通常的建议是在优化任何内容之前测量和识别瓶颈。
关于java - 避免 RPC (SOAP) API 之间的中间数据转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13487865/