趣谈网络协议
刘超
前网易研究院云计算技术部首席架构师
130417 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 51 讲
趣谈网络协议
15
15
1.0x
00:00/00:00
登录|注册

第33讲 | 基于XML的SOAP协议:不要说NBA,请说美国职业篮球联赛

注册中心
统一描述、发现和集成协议
生成客户端Stub
描述服务的端口和绑定
定义服务的类型和消息结构
Web服务描述语言
将请求和回复放在信封中
使用HTTP协议进行传输
使用XML编写请求和回复消息
还有一种更便捷的接口规则是什么?
SOAP只使用POST方法会有什么问题?
UDDI
HTTP
WSDL
UDDI
WSDL
SOAP
面向函数的设计
版本的问题
协议修改不灵活
需要双方的压缩格式完全一致
思考题
SOAP的三大要素
服务发现问题
协议约定问题
传输协议问题
ONC RPC存在哪些问题?
小结
XML与SOAP
问题
基于XML的SOAP协议

该思维导图由 AI 生成,仅供参考

上一节我们讲了 RPC 的经典模型和设计要点,并用最早期的 ONC RPC 为例子,详述了具体的实现。

ONC RPC 存在哪些问题?

ONC RPC 将客户端要发送的参数,以及服务端要发送的回复,都压缩为一个二进制串,这样固然能够解决双方的协议约定问题,但是存在一定的不方便。
首先,需要双方的压缩格式完全一致,一点都不能差。一旦有少许的差错,多一位,少一位或者错一位,都可能造成无法解压缩。当然,我们可以用传输层的可靠性以及加入校验值等方式,来减少传输过程中的差错。
其次,协议修改不灵活。如果不是传输过程中造成的差错,而是客户端因为业务逻辑的改变,添加或者删除了字段,或者服务端添加或者删除了字段,而双方没有及时通知,或者线上系统没有及时升级,就会造成解压缩不成功。
因而,当业务发生改变,需要多传输一些参数或者少传输一些参数的时候,都需要及时通知对方,并且根据约定好的协议文件重新生成双方的 Stub 程序。自然,这样灵活性比较差。
如果仅仅是沟通的问题也还好解决,其实更难弄的还有版本的问题。比如在服务端提供一个服务,参数的格式是版本一的,已经有 50 个客户端在线上调用了。现在有一个客户端有个需求,要加一个字段,怎么办呢?这可是一个大工程,所有的客户端都要适配这个,需要重新写程序,加上这个字段,但是传输值是 0,不需要这个字段的客户端很“冤”,本来没我啥事儿,为啥让我也忙活?
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

基于XML的SOAP协议是一种用于远程过程调用(RPC)的通信协议,通过使用XML编写简单的请求和回复消息,并利用HTTP协议进行传输。相比于传统的RPC框架,SOAP协议解决了传输协议、协议约定和服务发现等问题。文章首先介绍了传统RPC框架的问题,包括双方压缩格式完全一致、协议修改不灵活、版本问题以及面向函数的设计等。随后,文章详细介绍了XML和SOAP协议的优势,以及如何将XML用于RPC中。通过SOAP协议,请求和回复被放在一个信封里面,使用HTTP协议进行传输,解决了传输协议的问题。同时,文章还介绍了Web服务描述语言(WSDL)用于描述服务、服务发现问题以及UDDI注册中心的作用。总的来说,SOAP协议基于XML的特点使得远程过程调用更加灵活、面向对象,并且解决了传统RPC框架存在的问题,适用于需要提供给陌生人使用的服务。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《趣谈网络协议》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(21)

  • 最新
  • 精选
  • 叹息无门
    感觉这篇写的不是很严谨: 1,首先SOAP并非只能通过HTTP进行传输,关于SOAP binding应该提一下? 2,SOAP 的HTTP Binding 支持比较完整的Web Method,http GET/POST都是可以支持的,并且对应不同的模式。大多数情况下只使用POST是具体实现的问题。

    作者回复: 是的,这里说的是通常的使用情况

    2018-08-01
    36
  • webservice soap的初始目标:服务自描述,其实就是没有达成,UDDI早已默默死掉

    作者回复: 是的,但是作为rpc历史上不能不说的一个环节,也要讲一下

    2018-08-16
    10
  • 雪山飞猪
    这套教程真的是比以前看过的好多书都要生动形象,高手出马,化繁为简,非常感谢老师的倾情分享

    作者回复: 谢谢

    2019-05-17
    5
  • Jerry Chan
    但是这个二进制格式,怎么转换为xml这种格式呢?过程是怎么解析的呢?主要是这块不清楚,作者能解惑下不?

    作者回复: 不会有二进制转换成为xml,是由对象转换成为xml

    2018-08-18
  • 凡凡
    1.虽然http协议有post,get,head,put,delete等多种方法,但是平常来说post,get基本足够用。所以soap只支持post方法的差别应该在缺少get方法,get方法可以浏览器直接跳转,post必须借助表单或者ajax等提交。也就限制了soap请求只能在页面内获取或者提交数据。 另外,soap协议规范上是支持get的,但是由于一般xml比较复杂,不适合放在get请求的查询参数里,所以soap协议的服务多采用post请求方法。 2.应该要讲restful协议了,一种使用json格式交互数据的,基于http协议的,轻量级网络数据交互规范。
    2018-08-01
    17
  • mgxian
    1.没有充分利用http协议原有的体系 比如get表示获取资源 post表示创建资源 delete表示删除资源 patch表示更新资源 2.restful协议
    2018-08-01
    3
    10
  • blackpiglet
    1. POST 请求构造比较麻烦,需要专门的工具,所以调用和调试更费事。 2. 更简单的应该就是RESTful 了吧,SOAP 感觉不太好用,复杂度比较高,用起来没有http顺手。
    2018-08-01
    3
  • vloz
    面向函数和面向对象在信息交互上的特征是什么?为什么讲onc合适面向函数?
    2018-08-01
    3
  • 悟空聊架构
    题目1: HTTP请求里面有很多种提交方式,文中只是提到了可以用post,其实还是可以用其他方式的,比如get。 题目2: restful,用json格式的数据发送请求和返回数据。
    2018-08-06
    2
  • spdia
    soap的方言问题过于严重。其实简单场景可以用http rest或者json+http post,或者用比较新的graphql
    2018-08-01
    2
收起评论
显示
设置
留言
21
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部