REST难道不是最方便的数据提供方式吗?

2011-04-15 12:39:05 +08:00
 shinyzhu
大部分应用会访问网络,如何从网络获取数据成了一大难题。
我看到好多人用socket,这玩意太难了吧?
难道用REST不是最简单快速的方案吗?直接输出JSON,应用里用一个JSONKit就完全搞定数据传输了。
6263 次点击
所在节点    iDev
16 条回复
wptree
2011-04-15 12:41:22 +08:00
作为一个开发人员,socket通信是必须要了解的。
shinyzhu
2011-04-15 12:45:46 +08:00
@wptree 我主要做Web的,还真没了解过socket。
iOS里面用URLRequest调用REST API也非常方便的啊。
xhinking
2011-04-15 12:50:41 +08:00
REST是基于HTTP协议的
shinyzhu
2011-04-15 13:06:35 +08:00
@xhinking 对啊。所以直接用URLRequest就可以获取到数据了。
yelusiku
2011-04-15 13:14:59 +08:00
没有socket,哪儿来REST。。。
kaktos
2011-04-15 13:31:45 +08:00
HTTP只是遵循REST架构风格的一种协议, 你socket也能REST
soulhacker
2011-04-15 13:52:13 +08:00
REST是一种应用层的架构风格,Socket是一种通讯机制,不是一个层次的东西没法拿来比较吧。。。

不过有一点题外话想说,在这行业待的越久,就越觉得稍微多了解一点自己主要领域之外的东西,经常会很有好处的,比如做应用的人表面上不需要知道底层通讯的机制,但是一旦你有所了解,经常会有奇效。
dongsheng
2011-04-15 14:19:16 +08:00
这哪跟哪,socket是http还下一层的东西,REST是http之上约定。

做Web也要了解socket的,比如用php,有时候后端得跟些没有被php封装的网络服务通信,这时候必须用socket自己连接。
9hills
2011-04-15 14:30:07 +08:00
给lz举个例子吧,假如你开发一个微型的跟踪仪,需要和网络服务器交换数据,难道要实现一下http协议?flash根本放不下一个http协议栈。。
est
2011-04-15 14:43:28 +08:00
@9hills 放不下可以调用嘛
ch_linghu
2011-04-15 15:30:00 +08:00
如 @9hill 所言,并不是所有场景都适合使用http这种高层协议的。(REST是完全基于http协议的)

有些对响应速度要求十分敏感的场景(比如证券/期货交易系统、金融系统),基于文本的解析带来的时间损失是不可接受的,更别提http协议中那么庞大的http header了。这些场景需要把数据封装成二进制数据包进行字节对字节的解析,这就要求在socket层面上直接进行协议封装。

另外,我觉得,对于开发人员来说,“方便”并不是一个好的理由。方便只对用户有意义。对于开发人员,使用“方便”的技术实现出效率或功能无法满足需求的产品,这个恐怕是不能接受的。
shinyzhu
2011-04-15 15:42:43 +08:00
感谢各位的回复:)

@yelusiku @kaktos 撇开效率,做应用开发的时候越上层的框架用起来越简单,除非性能要求特别高,所以一般就用简单的框架了。

@soulhacker 很有道理,所以需要学习的还很多:)

@dongsheng iOS里也太多的C接口,我还不熟悉,所以开发起来有点难度。

@9hills iDev里面是讨论iOS开发的,不会出现这种情况。
shinyzhu
2011-04-15 15:44:49 +08:00
@ch_linghu 感谢回复:)收获很多。
开发其实也是要追求效率的,小公司可没有时间让你开发底层轮子,所以只能用高层的框架来快速开发。
est
2011-04-15 16:38:55 +08:00
@ch_linghu

> 基于文本的解析带来的时间损失是不可接受的

文本解析成本不见得一定比二进制解析成本高。HTTP真正成本高的地方是因为它是一个无状态的连接,你就必须人工在数据里传输状态。

二进制只是一种更加紧凑的序列化传输而已,二进制和文本相比没有绝对的优势。
ch_linghu
2011-04-15 17:40:46 +08:00
@est 一般在这类协议中是不做解析这个动作的。只要两端定义相同的struct,然后从buffer里读取一个sizeof strcut然后直接塞进去,所有字段的值就直接有了。
ssword
2011-04-15 17:46:23 +08:00
一个在应用层,一个在传输层。没有socket就没有REST,而且REST也并非传输数据的协议。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/11537

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX