为什么很多第三方接口,都改成了基于http,直接传递json数据的方式来代替webservice?

soゝso 2016-08-22 18:17:49 15754

问题:

曾经不同系统间交互问题时,总是优先考虑webserivce,现在看到除了一些老牌的公司,比如 amazonk 对众的接口还是webservice的方 式,其他很多国内新项目的接口都开始转向直接传 JSON  的方式。我知道的优势之一,就是webservice的消息体肯定比json这种方式要大。请问, 除此之外,设计这些对众接口的时候,还有什么其他的考虑吗?


回答:

这实际上是三个问题,从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都被嫌弃了,大伙儿干脆连PUTDELETE都懒得用,直接用GETPOST

同时,我得说,这只是在互联网领域,大部分企业的业务逻辑相对简单,同时工期又变态的短(就像大部分互联网创业公司用糙快猛的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解析提供硬件加速。


版权所属:SO JSON在线解析

原文地址:https://www.sojson.com/blog/46.html

转载时必须以链接形式注明原始出处及本声明。

本文主题:

如果本文对你有帮助,那么请你赞助我,让我更有激情的写下去,帮助更多的人。

相关文章
为什么很多第三方接口改成了基于http直接传递json数据方式代替webservice?
JSOUP 教程,JSOUP请求JSON ,JSOUP返回JSON 数据
免费天气API,全国天气 JSON API接口,可以获取五天的天气预报
为什么要选择RabbitMQ ,RabbitMQ简介,各种MQ选型对比
为什么undefined、NaN和Infinity可以被赋值,而null不可以?
JSON什么?它能带来什么?它和XML比较?
cpu资源采集.json
Java 解析JSONJSON-LIB jar包下载和使用。
JSON格式讲解,JSON获取对象,JSONObject和JSONArray的操作
Elasticsearch教程,Elasticsearch安全篇,通过Nginx http basic 限制访问
最新文章
记一次小失误导致的大事件,Mysql SQL Error: 0, SQLState: null 排查过程 72
Springboot Maven 增加本地依赖包,Springboot Maven打包本地包 92
Java 获取图片属性、获取图片EXIF属性操作方法[metadata-extractor] 48
又拍云(Upyun)CDN、云存储刷新链接缓存,API实例讲解 80
Linux Centos 使用 Redis service 启动,Redis service 脚本编写 118
恭喜SOJSON获得阿里云618“上云接力赛”第一名,获得代金券6.18万 344
Springboot 集成Freemarker 自定义标签解决方案 952
七牛云怎么样?七牛云到底有多垃圾?用七牛云需要知道的事,不然不小心就一套房没了 29363
JavaScript怎么识别360浏览器?JS识别360急速模式方案,360流氓浏览器 1245
关于本站所有JavaScript 加密、混淆、解密、美化等安全说明 2361
最热文章
免费天气API,全国天气 JSON API接口,可以获取五天的天气预报 182122
我为什么要选择RabbitMQ ,RabbitMQ简介,各种MQ选型对比 148971
Elasticsearch教程(四) elasticsearch head 插件安装和使用 141594
苹果电脑Mac怎么恢复出厂系统?苹果系统怎么重装系统? 94881
Elasticsearch教程(六) elasticsearch Client创建 82833
Elasticsearch教程(一),全程直播(小白级别) 79752
Elasticsearch教程(二),IK分词器安装 78105
Elasticsearch教程(八) elasticsearch delete 删除数据(Java) 77421
Elasticsearch教程(五) elasticsearch Mapping的创建 71372
免费天气API,天气JSON API,不限次数获取十五天的天气预报 66290

骚码加入我们 / 千人QQ群:259217951

入群需要5元,如果没有QQ钱包,可以先Alipay、微信,赞助然后加群主拉进。

二维码生成 来自 >> 二维码生成器

支付扫码

所有赞助/开支都讲公开明细,用于网站维护:赞助名单查看

正在加载... ...