为什么很多第三方接口,都改成了基于http,直接传递json数据的方式来代替webservice?
来源:互联网 发布:广元广电网络节目表 编辑:程序博客网 时间:2024/05/29 15:23
转:http://www.cnblogs.com/crafts/p/3941625.html
这实际上是三个问题,从WebService到今天流行的RESTful API(JSON) over HTTP,经历了数次变革
1 WebService有很多协议,为什么HTTP比较流行?
WebService是个很重型的规范,它的应用协议是SOAP(简单对象访问协议),它所依赖的下层通信方式不单单是HTTP,也有SOAP over SMTP, SOAP over TCP,由于HTTP协议群众基础广,开发调试方便,所以,成了WebService中最为流行的方式。
甚至很多公司在内网通信,也用HTTP来做,比如,应用调用搜索引擎,Solr就是一个例子。
但HTTP也是TCP上性能比较差的协议,因为HTTP是基于TCP的,有3次握手,再加上HTTP是个文本传输协议(虽然也可以传二进制的附件, 但业务逻辑还是文本用的多),又有很多复杂的HEADER。所以人们发明了一些更高效的通信协议来做远程调用,比如ACE、ICE、Corba、淘宝的 HSF,但这是后话了,不展开细说。你只要知道,HTTP之所以流行,乃是简单易用群众基础广的结果。
2 WebService为什么不如RESTful API流行
WebService诞生十几年了,最初是IBM、微软比较热心在推,一直也不温不火。倒是XML-RPC, RESTful以及比RESTful还要简陋的远程调用方式后来居上。感觉是不是有点像民间的Spring干掉官方的EJB?
究其原因,还是WebService实在太笨重了,SOAP信封犹如婆娘的裹脚布,又臭又长,广大开发人员是叔可忍嫂不能忍,于是就有了简化版的, 叫XML-RPC,后来伴随着Web2.0流行,RESTful独领风骚。我在10年前做过一个产品,纯PHP+JS,标准的WebService,连 WSDL我都要专门写个PHP程序来生成,还好只是我一个人开发,要是团队协作,我早就被骂得不成人形了。
再后来,连RESTful都被嫌弃了,大伙儿干脆连PUT、DELETE都懒得用,直接用GET和POST。
同时,我得说,这只是在互联网领域,大部分企业的业务逻辑相对简单,同时工期又变态的短(就像大部分互联网创业公司用糙快猛的PHP,而不用相对严 谨的Java一样)。在某些业务复杂,稳定性和正确性要求高的领域(如ERP、电商、支付),WebService还有是用武之地的。
3 为什么JSON比XML流行
还是易用性,JSON的可读性比XML强几条长安街,解析规则也简单许多。XML解析的时候规则太多了,动不动就非法字符,动不动就抛异常。这对追求高开发速度和低开发门槛的企业来说,是个致命伤。
JSON的缺点是数据类型支持较少,且不精确。比方说:
price:12580
在json里,你无法知道这个价格是int, float还是double。
所以,如上面第二条所述,在一些业务要求较高的领域,还是XML更合适。
最后说一下性能,JSON的性能高于XML,除此之外,基于XML和HTTP的WebService, 基于JSON的RESTful API,并没有性能差异。
XML性能糟糕到什么地步呢,有一种专门的CPU叫做XML Accelerator,专门为XML解析提供硬件加速。
- 为什么很多第三方接口,都改成了基于http,直接传递json数据的方式来代替webservice?
- 为什么很多第三方接口,都改成了基于http,直接传递json数据的方式来代替webservice?
- 使用基于Http的消息代替WebService的数据交互
- 使用基于Http的消息代替WebService的数据交互
- 使用基于Http的消息代替WebService的数据交互
- 使用基于Http的消息代替WebService的数据交互
- 使用第三方库json-lib来传递json格式数据
- WebService接口直接http调用方式
- webService接口传递json对象数据为什么接口实现类获取不到?
- 请求第三方接口返回json格式数据的解析
- 基于第三方Json数据的hive映射表
- webservice 第三方接口
- http方式传递数据,JSON数据的解析等
- 基于Web Service的客户端框架搭建一:C#使用Http Post方式传递Json数据字符串调用Web Service
- 基于Web Service的客户端框架搭建一:C#使用Http Post方式传递Json数据字符串调用Web Service
- Android为什么要设计出Bundle而不是直接使用HashMap来进行数据传递 Android内存优化(使用SparseArray和ArrayMap代替HashMap)
- 对接第三方接口--使用post请求发送json数据
- 第三简单的3-mybatis mapper开发方式-其实就是相当于将第二简单的dao接口改成mapper接口,但不用写接口实现类--不过mapper开发有很多规范而已
- LeetCode 397 Integer Replacement
- js事件 封装方法(添加事件、删除事件、阻止冒泡、阻止默认行为)
- 【Qt开发】QString与数字类型的转换(不同进制)
- 小程序之求一个正整数的二进制
- 数据库基础(sql基本指令)
- 为什么很多第三方接口,都改成了基于http,直接传递json数据的方式来代替webservice?
- 第三周项目3-求集合并集
- Window Mysql免安装配置
- 实现c语言中的可变参数函数
- 因SHA-256算法导致无法上传渠道包的问题
- 第三周项目1—顺序表的基本运算
- android 之对话框
- innerText 与 innerHtml的区别 (二)
- 安卓中常用的数据存储方式之普通文件存取