最近的任务要对接一个医院平台,清一色的 webservice,我查了半天,又是 SOAP,又是 WSDL 的,看了一个遍,也没感觉这东西有啥用……
也没有查到这东西为什么会诞生,能查到的 webservice 资料举例都是一个开头:假如你使用一个天气服务,你定义一个 webservice,这样谁都能访问你了。
另外有几个问题想请教大家:
1
Livid MOD 这是大概 2000 年左右很新潮的东西……
那个时候微软推出了 .Net |
2
mseasons OP @Livid 怎么查不到诞生目的啊,查别的技术都能查到当时为了解决 xxx 问题研发了 xxx 技术。SOAP 这种东西,为了发明而发明,改了个名字就上架了是咋回事啊……带 SOAP 的 XML 并不比正常的 XML 好在哪里呀
|
3
harde 2020-03-20 15:10:27 +08:00 1
WSDL 约等于接口文档。
SOAP 是协议。通过 SOAP 去调用刚才 WSDL 里“说的”,接口。 楼主的问题不成立,你不能用现代人的眼光来问历史。 举例:蒸汽机比汽油发动机好在哪?为啥会诞生。 你所用的语言一般都会有 WebSerice 的实现包 |
4
viakiba 2020-03-20 15:18:02 +08:00 via iPhone
wadl 文件 可以根据这个文件生成调用接口的代码
|
5
mseasons OP @harde 我的意思是,SOAP 是基于 XML 定义出来的一种技术,在我查的资料来看,定义出来的新东西没有比单纯的 XML 好用多少
|
6
harde 2020-03-20 15:43:11 +08:00
@mseasons 你自己随便定义一个 XML 没法“通用”、“跨语言”,当然,你可以说双方约定好就行,但是那也不是 WebService 的适用场合。
|
7
brucewuio 2020-03-20 16:01:48 +08:00
说白了就是用 xml 进行通信,用 xml 告诉别人你有什么服务可以调用,很傻逼的东西
|
8
g00001 2020-03-20 16:19:43 +08:00
WebService 在 VS/C#里,只要把网址输进去,
开发工具就会做好一切,然后就可以直接在代码里使用远程的函数,体验上接近于在用本地函数。 这个东西最大的缺陷就是把所有事考虑的太完美了,导致协议太复杂。 即使在 Windows 自家的系统上,部署这个东西也非常麻烦,MSSOAP 组件就有一个很大的安装包,安装这个以前还先要装 MSXML 组件,然后安装的时候还要管理权限,带上一堆的 DLL,然后微软还把这个组件给淘汰了,各种折腾 - 想法一直在变。其他平台就更麻烦了。 WebService 最轻量的实现估计是 aardio 里的实现,SOAP 客户端支持库仅使用了几百行代码,用起来还是很舒服的。下面是 aardio 里的一个例子: ---------------------------------------------------------- import console; import web.soapClient; //创建 SOAP 客户端 seviceClient = web.soapClient("http://fy.webxml.com.cn/webservices/EnglishChinese.asmx") //调用远程 Web 服务提供的函数 var transArray = seviceClient.TranslatorString("hello"); //显示返回值 console.dumpJson( transArray ) ; console.pause(); ---------------------------------------------------------- 但是用起来舒服并没有用,因为现在支持这种接口的很少,大家都 JSON 接口,用起来更简单,实现的功能也差不多。兴一个 aardio 里调用 REST/JSON 接口的例子: ---------------------------------------------------------- import console; import web.rest.jsonClient; var http = web.rest.jsonClient(); var jsonstore = http.api("https://www.jsonstore.io/e5fd2bdf0e6b3ba3fe4aa61eebd11740cf2fe10e7fad1b5d2fb77c876498baf5"); //增 var result = jsonstore.user[1].post( name = "jon.snow"; age = 31 ) //改 var result = jsonstore.user[1].age.put(32); //查 var result = jsonstore.user[1].get(); //删 var result = jsonstore.user[1].delete(); console.dump(result); console.pause(); ---------------------------------------------------------- 一样可以把远程接口变成本地函数,并且有舒服的智能提示,而且实现起来更简单,WebService 的优势就不多了。 |
9
mseasons OP @harde 即便是自己定义的 XML,也并不影响通用性和跨语言吧? XML 本质就是一个树,每个标签就是一个节点,只要知道参数名字,仍然可以通用。XML 和 JSON 没什么两样啊
|
10
mseasons OP @g00001 多谢…… 我在调用很久之前的 webservice 的时候,尝试了各种方法。SoapUI 失败,对面说 SOAPUI 对 CDATA 支持不好,用 Java 的那个 axis 库,到现在还在报错,也没调出来原因。webservice 也没有很方便的转化成正常的 GET/POST 来使用 postman 调试,还在挣扎中
|
11
harde 2020-03-20 17:01:00 +08:00
@mseasons 我的意思是你并不能用现代人眼光来看 20 年前的东西。
当年能提出 WebService 已经非常超前了。你不能说现在有了这么多简洁明了的东西,就说当年这个东西设计的不好。 |
12
wanguorui123 2020-03-20 18:08:21 +08:00 via iPhone
WebService 好在规范的接口,WSDL 文档可以直接生成 API 客户端代码,调用接口和调用本地方法一样简单。
当年为了实现企业之间服务的调用,又不想写一大堆 API 文档,所以就诞生出这个东西。 相对于 JSON API 不需要一大堆接口文档,写服务接口时候加入注解就 OK 了,有点类似 Swagger。基本上没使用成本,也不用关心序列化和反序列化,但是浏览器端调用很麻烦所以就淘汰了。 WebService 走 POST 请求,如果是 JAVA 平台有第三方包可以调用,如果是 NET 可以自动生成客户端 API 函数,像调用本地方法一样简单。 |