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 · 6268 次点击
    这是一个创建于 5004 天前的主题,其中的信息可能已经有所发展或是发生改变。
    大部分应用会访问网络,如何从网络获取数据成了一大难题。
    我看到好多人用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   ·   实用小工具   ·   5497 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 08:27 · PVG 16:27 · LAX 00:27 · JFK 03:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.