【发布时间】:2010-12-17 22:09:29
【问题描述】:
假设我有一个来自运行 Tomcat 的服务器的远程 JAX-RS JSON API。我想从 C/C++ 客户端访问这个 API。是否有任何工具可以使 C/C++ 客户端的生活更轻松,例如代码生成器?或者有人对替代方案有建议吗?
【问题讨论】:
假设我有一个来自运行 Tomcat 的服务器的远程 JAX-RS JSON API。我想从 C/C++ 客户端访问这个 API。是否有任何工具可以使 C/C++ 客户端的生活更轻松,例如代码生成器?或者有人对替代方案有建议吗?
【问题讨论】:
我从未听说过这样的工具。更重要的是,我怀疑这样的工具(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。问题是:
【讨论】:
您需要选择用于发送和接收 http 请求的库,以及一个 json 解析器。没有什么可以生成代码来让您更轻松,因为这样一个 API 的想法是它会输出 JSON。 JSON 的重点是以一致的方式跨越语言和传输障碍。有点像 XML,但更简单。
您可能会对这个问题感兴趣:what's the best json parser? JSON Spirit 看起来特别好文章。
现在,当您使用 REST 时,您只需要与正确的 url 进行通信即可。完成。
您要决定的最后一件事是使用哪个库进行网络通信。 Boost 会是很多人的建议,我敢肯定。
【讨论】: