【问题标题】:Can I generate a C/C++ client for a JAX-RS JSON API?我可以为 JAX-RS JSON API 生成 C/C++ 客户端吗?
【发布时间】:2010-12-17 22:09:29
【问题描述】:

假设我有一个来自运行 Tomcat 的服务器的远程 JAX-RS JSON API。我想从 C/C++ 客户端访问这个 API。是否有任何工具可以使 C/C++ 客户端的生活更轻松,例如代码生成器?或者有人对替代方案有建议吗?

【问题讨论】:

    标签: java c++ c json jax-rs


    【解决方案1】:

    我从未听说过这样的工具。更重要的是,我怀疑这样的工具(JSON 的 C/C++ 生成器)是不切实际的。

    有很多原因。其中一些最重要的是:

    • 一个关键问题是 JSON 没有模式。这意味着 API 生成器将不得不求助于查看示例消息并尝试推断期望的字段以及它们的类型。在某些情况下,这可能很困难,甚至理论上是不可能的。

    • 在 Java 和 C# 等语言中,有直接的“正确方法”来生成对象 API;例如JavaBeans 约定。在 C++ 中,尤其是 C 中,没有约定,并且需要处理诸如容器协议和内存管理之类的复杂问题。

    • 在 Java 和 C# 等语言中,它们是运行时类型安全的,并且提供了各种语言级别的机制,允许您使用动态编程来处理 JSON 的无模式特性。例如,在 Java 中,您有反射、代理类、动态代码生成和动态代码加载,所有这些都有助于处理 JSON。在 C 和 C++ 中,这些机制通常不可用。

    简而言之,如果您使用的是 C 或 C++,JSON 库将尽其所能。

    跟进

    正如评论所指出的,这在特定基于 JAX-RS 的服务器实现的上下文中实现是可行的。您需要掌握内部元数据,对其应用 JSON 映射,并从中生成 C/C++ API。问题是:

    1. 生成器实现将是特定于平台的。
    2. 如果不重新生成 API 和相应的客户端代码更改,基于 C/C++ 的客户端将无法应对有效模式的更改。 (相比之下,基于 JSON 库的解决方案理论上可以编码以处理意外的新属性等)
    3. 您仍然需要处理容器/内存管理问题。

    【讨论】:

    • 如果您只考虑 JSON,我相信您是正确的。但是,我相信使用 JAX-RS 会有一个基于 Java 的模式,可以从中生成另一种语言的值对象。我认为问题更多的是是否有人已经做到了。 JBoss RestEasy 声称他们已经用 Java 提供了一些东西。
    【解决方案2】:

    您需要选择用于发送和接收 http 请求的库,以及一个 json 解析器。没有什么可以生成代码来让您更轻松,因为这样一个 API 的想法是它会输出 JSON。 JSON 的重点是以一致的方式跨越语言和传输障碍。有点像 XML,但更简单。

    您可能会对这个问题感兴趣:what's the best json parser? JSON Spirit 看起来特别好文章。

    现在,当您使用 REST 时,您只需要与正确的 url 进行通信即可。完成。

    您要决定的最后一件事是使用哪个库进行网络通信。 Boost 会是很多人的建议,我敢肯定。

    【讨论】:

    • 我知道 JSON 是做什么用的并且有它的库,但我不想编写将其解析为 C/C++ 结构/类的所有样板代码。而且我也不想在有新的班级或领域时再次改变一切。这就是我寻找自动化解决方案的原因。
    猜你喜欢
    • 1970-01-01
    • 2013-02-27
    • 2019-09-25
    • 2016-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    相关资源
    最近更新 更多