REST难道不是最方便的数据提供方式吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iOS 开发实用技术导航
NSHipster 中文版
http://nshipster.cn/
cocos2d 开源 2D 游戏引擎
http://www.cocos2d-iphone.org/
CocoaPods
http://cocoapods.org/
Google Analytics for Mobile 统计解决方案
http://code.google.com/mobile/analytics/
WWDC
https://developer.apple.com/wwdc/
Design Guides and Resources
https://developer.apple.com/design/
Transcripts of WWDC sessions
http://asciiwwdc.com
Cocoa with Love
http://cocoawithlove.com/
Cocoa Dev Central
http://cocoadevcentral.com/
NSHipster
http://nshipster.com/
Style Guides
Google Objective-C Style Guide
NYTimes Objective-C Style Guide
Useful Tools and Services
Charles Web Debugging Proxy
Smore
shinyzhu
V2EX    iDev

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

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

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

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

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

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

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

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

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

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

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

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

    二进制只是一种更加紧凑的序列化传输而已,二进制和文本相比没有绝对的优势。
    ch_linghu
        15
    ch_linghu  
       2011-04-15 17:40:46 +08:00
    @est 一般在这类协议中是不做解析这个动作的。只要两端定义相同的struct,然后从buffer里读取一个sizeof strcut然后直接塞进去,所有字段的值就直接有了。
    ssword
        16
    ssword  
       2011-04-15 17:46:23 +08:00
    一个在应用层,一个在传输层。没有socket就没有REST,而且REST也并非传输数据的协议。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2439 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 06:41 PVG 14:41 LAX 22:41 JFK 01:41
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86