【问题标题】:Transferring typed objects across platforms跨平台传输类型化对象
【发布时间】:2011-11-04 19:37:54
【问题描述】:

我想创建某种 Web API(我对协议没有偏好),其中服务器使用 Java,客户端使用 PHP。

我希望请求和响应都是对象(类的实例,而不是 JSON 样式的哈希)。对象的字段可以是原始类型或其他对象。我会在客户端和服务器代码中定义所有必要的类。 PHP 和 Java 具有相似的对象模型,因此用两种语言编写相应的类应该不难。

为了完成这项工作,需要有一些自动化的方法来在一侧序列化一个对象,而在另一侧反序列化它。它需要知道哪个 PHP 类映射到哪个 Java 类,以及如何转换字段。我可以写点东西,但是有没有一个现有的协议来传输这样的对象?这可以用SOAP 完成吗?

【问题讨论】:

  • 我正在寻找传输类型化的对象。 JSON 只处理原始类型。

标签: java php web-services


【解决方案1】:

Java 和 PHP 对象不可互换。您必须在两端定义对象类型,传输协议可以是您喜欢的任何内容。序列化和反序列化使整个过程透明化。传输介质可以是 JSON、XML、YAML 或其他任何东西。

对于类似记录的对象: {"_type":"MyCoolObjectType", "a":1, "b":2, "c":3"}

如果您想编写一次并在任何地方使用,我建议您在两端使用相同的语言,否则您必须有一个可以在您选择的语言之间进行翻译的编译器。

【讨论】:

    【解决方案2】:

    只要请求/响应不是很复杂,SOAP Web 服务就可以处理基本的抽象。您可以在 java 中创建类,然后获取 API 为它们导出 WSDL。

    【讨论】:

      【解决方案3】:

      您需要将它们都序列化为同一个字符串。用于序列化的 PHP 格式和 Java 格式不同,因此不兼容。你需要一个通用的交换格式,我建议你不要使用 PHP 的。但是,PHP 中序列化的函数相当简单,如果您选择使用它,则包含在 PHP 源代码中的 ext/standard/var.c 文件中..

      请参阅以下内容:

      来自http://en.wikipedia.org/wiki/XML(强调我的):

      虽然 XML 的设计侧重于文档,但它被广泛用于表示任意数据结构,例如在 Web 服务中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多