java - Android 和 AppEngine 网络服务 : Json. .. RPC、REST... Protocol Buffer ?

标签 java android json rest protocol-buffers

我正在开发一项可从 Android 应用程序访问的网络服务。在对什么是最好的技术做了一些研究之后,我对这些选择感到有些困惑和茫然。

显然,在 Android 端,我希望它尽可能轻巧。我也更愿意共享通用代码,因为它们都是 java,尽管这不太重要。我最关心的是让它高效,然后是简单而优雅的代码。

我在安卓端试过gson,效果不错。但后来我读到了 Protocol Buffer ,这似乎更有效率,我不确定这是否有显着差异。我也不确定是选择 RPC 还是 REST。

最佳答案

在效率方面,Protocol Buffers 可能比任何 JSON 实现更高效,但不一定像您想象的那样高效。 GSON 不是特别快,但 Jackson 库几乎可以与大多数二进制序列化程序竞争(Jackson 在大多数情况下比 GSON 快 2-4 倍,在 UTF-8 上快 10-20 倍,因为它有针对 UTF-8 的特殊代码)。

但由于编程模型的原因,我仍然会选择 Protocol Buffers 而不是任何 JSON 库。对于大多数 JSON 库,您必须手动检查消息的结构。使用 Protocol Buffers,您可以声明性地指定消息结构,库将为您处理结构验证(尽管仍然有您需要手动验证的内容)。

Protocol Buffer 等其他库:Apache Avro、Apache Thrift。

Protostuff 库使用 Protocol Buffers 数据模型(因此您可以免费获得结构验证),但除其他格式外还支持序列化为 JSON 和 YAML。如果您希望您的服务被 Javascript 代码使用,这会很有用,因为 JSON 通常是最容易处理的。

关于java - Android 和 AppEngine 网络服务 : Json. .. RPC、REST... Protocol Buffer ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5757697/

相关文章:

java - 2020如何将media目录下的文件保存到外存?

javascript - 如何使用 jQuery 或 JavaScript 动态获取 JSON 数组键和值

javascript - 在 jQuery 中绑定(bind) "up"元素?这是可能的?

java - Arrays.asList(...).contains(...) 是如何工作的?

java - chalice /hibernate : No row with the given identifier exists

java - 使用 for 循环使用 TextView 创建线性布局

android - 如何滚动到 ListView 中新添加的项目

java - java中如何从json中读取数组值

java - 我可以使用 Spring 注入(inject)来注入(inject)枚举吗?

java - 仅在测试期间使用特殊构造函数是否有代码味道?