webservice 是什么东西?

2020-03-20 14:29:56 +08:00
 mseasons

最近的任务要对接一个医院平台,清一色的 webservice,我查了半天,又是 SOAP,又是 WSDL 的,看了一个遍,也没感觉这东西有啥用……

也没有查到这东西为什么会诞生,能查到的 webservice 资料举例都是一个开头:假如你使用一个天气服务,你定义一个 webservice,这样谁都能访问你了。

另外有几个问题想请教大家:

2094 次点击
所在节点    程序员
12 条回复
Livid
2020-03-20 14:31:16 +08:00
这是大概 2000 年左右很新潮的东西……

那个时候微软推出了 .Net
mseasons
2020-03-20 14:37:43 +08:00
@Livid 怎么查不到诞生目的啊,查别的技术都能查到当时为了解决 xxx 问题研发了 xxx 技术。SOAP 这种东西,为了发明而发明,改了个名字就上架了是咋回事啊……带 SOAP 的 XML 并不比正常的 XML 好在哪里呀
harde
2020-03-20 15:10:27 +08:00
WSDL 约等于接口文档。
SOAP 是协议。通过 SOAP 去调用刚才 WSDL 里“说的”,接口。

楼主的问题不成立,你不能用现代人的眼光来问历史。
举例:蒸汽机比汽油发动机好在哪?为啥会诞生。


你所用的语言一般都会有 WebSerice 的实现包
viakiba
2020-03-20 15:18:02 +08:00
wadl 文件 可以根据这个文件生成调用接口的代码
mseasons
2020-03-20 15:37:06 +08:00
@harde 我的意思是,SOAP 是基于 XML 定义出来的一种技术,在我查的资料来看,定义出来的新东西没有比单纯的 XML 好用多少
harde
2020-03-20 15:43:11 +08:00
@mseasons 你自己随便定义一个 XML 没法“通用”、“跨语言”,当然,你可以说双方约定好就行,但是那也不是 WebService 的适用场合。
brucewuio
2020-03-20 16:01:48 +08:00
说白了就是用 xml 进行通信,用 xml 告诉别人你有什么服务可以调用,很傻逼的东西
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 的优势就不多了。
mseasons
2020-03-20 16:19:56 +08:00
@harde 即便是自己定义的 XML,也并不影响通用性和跨语言吧? XML 本质就是一个树,每个标签就是一个节点,只要知道参数名字,仍然可以通用。XML 和 JSON 没什么两样啊
mseasons
2020-03-20 16:23:29 +08:00
@g00001 多谢…… 我在调用很久之前的 webservice 的时候,尝试了各种方法。SoapUI 失败,对面说 SOAPUI 对 CDATA 支持不好,用 Java 的那个 axis 库,到现在还在报错,也没调出来原因。webservice 也没有很方便的转化成正常的 GET/POST 来使用 postman 调试,还在挣扎中
harde
2020-03-20 17:01:00 +08:00
@mseasons 我的意思是你并不能用现代人眼光来看 20 年前的东西。
当年能提出 WebService 已经非常超前了。你不能说现在有了这么多简洁明了的东西,就说当年这个东西设计的不好。
wanguorui123
2020-03-20 18:08:21 +08:00
WebService 好在规范的接口,WSDL 文档可以直接生成 API 客户端代码,调用接口和调用本地方法一样简单。

当年为了实现企业之间服务的调用,又不想写一大堆 API 文档,所以就诞生出这个东西。

相对于 JSON API 不需要一大堆接口文档,写服务接口时候加入注解就 OK 了,有点类似 Swagger。基本上没使用成本,也不用关心序列化和反序列化,但是浏览器端调用很麻烦所以就淘汰了。

WebService 走 POST 请求,如果是 JAVA 平台有第三方包可以调用,如果是 NET 可以自动生成客户端 API 函数,像调用本地方法一样简单。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/654572

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX