webservice 是什么东西? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
mseasons
V2EX    程序员

webservice 是什么东西?

  •  
  •   mseasons 2020-03-20 14:29:56 +08:00 2372 次点击
    这是一个创建于 2042 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    • 这东西好用在哪儿?
    • 当年为啥会诞生?
    • 相比 JSON 的优劣点在哪里?
    • 怎么用 GET 请求或者 POST 请求去简单的调用 webservice ???(这个是重点……)
    Livid
        1
    Livid  
    MOD
    PRO
       2020-03-20 14:31:16 +08:00
    这是大概 2000 年左右很新潮的东西……

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

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


    你所用的语言一般都会有 WebSerice 的实现包
    viakiba
        4
    viakiba  
       2020-03-20 15:18:02 +08:00 via iPhone
    wadl 文件 可以根据这个文件生成调用接口的代码
    mseasons
        5
    mseasons  
    OP
       2020-03-20 15:37:06 +08:00
    @harde 我的意思是,SOAP 是基于 XML 定义出来的一种技术,在我查的资料来看,定义出来的新东西没有比单纯的 XML 好用多少
    harde
        6
    harde  
       2020-03-20 15:43:11 +08:00
    @mseasons 你自己随便定义一个 XML 没法“通用”、“跨语言”,当然,你可以说双方约定好就行,但是那也不是 WebService 的适用场合。
    brucewuio
        7
    brucewuio  
       2020-03-20 16:01:48 +08:00
    说白了就是用 xml 进行通信,用 xml 告诉别人你有什么服务可以调用,很傻逼的东西
    g00001
        8
    g00001  
       2020-03-20 16:19:43 +08:00   1
    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
        9
    mseasons  
    OP
       2020-03-20 16:19:56 +08:00
    @harde 即便是自己定义的 XML,也并不影响通用性和跨语言吧? XML 本质就是一个树,每个标签就是一个节点,只要知道参数名字,仍然可以通用。XML 和 JSON 没什么两样啊
    mseasons
        10
    mseasons  
    OP
       2020-03-20 16:23:29 +08:00
    @g00001 多谢…… 我在调用很久之前的 webservice 的时候,尝试了各种方法。SoapUI 失败,对面说 SOAPUI 对 CDATA 支持不好,用 Java 的那个 axis 库,到现在还在报错,也没调出来原因。webservice 也没有很方便的转化成正常的 GET/POST 来使用 postman 调试,还在挣扎中
    harde
        11
    harde  
       2020-03-20 17:01:00 +08:00
    @mseasons 我的意思是你并不能用现代人眼光来看 20 年前的东西。
    当年能提出 WebService 已经非常超前了。你不能说现在有了这么多简洁明了的东西,就说当年这个东西设计的不好。
    wanguorui123
        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 函数,像调用本地方法一样简单。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5445 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 436ms UTC 07:35 PVG 15:35 LAX 00:35 JFK 03:35
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86