代码之家  ›  专栏  ›  技术社区  ›  Jeff Cyr

自定义rest协议基于二进制而不是基于文本(如Http)是一件好事吗?

  •  4
  • Jeff Cyr  · 技术社区  · 16 年前

    您是否见过创建自定义二进制rest协议而不是使用基本http rest实现的好理由?

    以下是我不喜欢HTTP的理由,如果我错了,请纠正我:

    • 首先,有证据表明,解析文本的效率不如解析二进制文件。

    • 其次,http请求没有序列号的概念,因此将响应与其请求关联的唯一方法是用于发送请求和接收响应的套接字连接。 这意味着对于指定的套接字,一次只能有一个挂起的请求,因此,如果服务使用者希望向服务并行发送多个请求,则需要向服务器打开多个套接字。 自定义rest协议可以为请求定义一个序列号,因此请求和响应将与序列号而不是套接字相关联,并且可以在同一套接字上并行发送多个请求。

    为了添加更多的上下文,我的SOA框架不需要从非.Net使用者访问,因此我对使用.Net二进制格式化程序或其他自定义二进制格式化程序没有任何限制。

    谢谢

    4 回复  |  直到 16 年前
        1
  •  3
  •   Noon Silk    16 年前

    不过,当说“二进制格式”时,大多数人都会听到字段长度的固定格式和其他非常烦人的事情。一般来说,如果您从数据传输的角度看不绝望,我认为没有理由这样做[尽管您可以对.net对象进行二进制序列化,以便可以重新实例化它们[或者查看.net的“协议缓冲区”库]]。

    总结: 我觉得还可以。让你的船漂浮的东西。

        2
  •  7
  •   Jim Ferrans    15 年前

    REST是用于构建web服务的体系结构样式。Roy Fielding根据他在设计HTTP方面的经验阐述了它,但它超越了HTTP。例如,您可以在普通电子邮件交换上部署RESTful服务。

    资源的其余表示形式可以是您喜欢的任何形式,尽管Roy确实强调人们应该尝试使用精心设计的标准表示形式。二进制没有问题。事实上,像JPEG和PNG这样的图像表示是二进制的。谷歌的 Protocol Buffers 还提供了创建结构化数据的紧凑二进制表示的方法。

    因此,简单的回答是,您当然可以使用RESTful并使用二进制表示法和一个自行开发的二进制替代HTTP。

    实际上,我强烈建议您使用HTTP以提高效率。如果您使用自己的协议,那么您将失去位于服务器和客户端之间的出色HTTP缓存基础设施所提供的所有优势。完整的客户端负载正好落在服务器上,而不是分散在中间缓存上。

    2010年4月10日:在基于HTTP的RESTAPI中,我们现在支持Java序列化对象和 Kryo XML、JSON和XHTML之外的二进制表示。Kryo序列化库在不需要任何特殊协议的情况下,性能明显优于其他库。另一种减少带宽的方法是使用 HTTP compression

        3
  •  1
  •   Rich Apodaca    16 年前

    您是否见过创建自定义二进制rest协议而不是使用基本http rest实现的好理由?

    我不确定我是否理解你的条件。REST表示可以是完全二进制的,并且仍然通过纯HTTP传输。没有必要发明一种新的协议来传输二进制数据。只需将您的需求减少到一种记录良好的媒体类型(您可以自由发明)。

    关于二进制资源表示, Fielding himself

    don't forget the hypertext constraint

    那么我想要一个定制的二进制rest协议有意义吗?

    如果你的意思是你想创建一个自定义的,仅二进制的,超文本驱动的媒体类型-这是完全合理的。

    如果你说的是发明一些HTTP的自定义扩展,除非绝对必要,否则我会避免这种情况(而且你所描述的内容在我看来并没有达到那种程度)。

        4
  •  1
  •   Darrel Miller    16 年前

    根据这项声明,我建议从两种选择中选择一种。直接TCP/IP套接字或WCF。这些选项为您提供了最大的灵活性。如果您希望不依赖于传输,并且希望从应用程序协议的干净状态开始,WCF是一个很好的解决方案。

    REST施加一组约束,限制分布式应用程序的行为,以获得某些有益的特性。如果您将服务端点视为调用操作的方式,那么我建议REST根本不适合您的需要。

    不知何故,我不认为你是否发送二进制或文本有效载荷应该是你在这一点上最大的关注。

    推荐文章