webservice

一.理解

参考:https://www.cnblogs.com/codelir/p/5476517.html

其实webservice就是一个api接口,跟restful道理相同,只是两者的传输形式不一样(webservice是通过xml来传递数据,restful通过json传递数据)

一个完整的流程:

客户端——> 阅读WSDL文档 (根据文档生成SOAP请求) ——>发送到Web服务器——>交给WebService请求处理器 (ISAPI Extension)

——>处理SOAP请求——> 调用WebService——>生成SOAP应答 ——> Web服务器通过http的方式交给客户端

使用webservice的好处:

1.平台无关性 。  任何平台都可以使用WebService
2.编程语言无关系。 基于XML,XML本身与平台无关,使用XSD作为数据类型系统,不论用什么语言编写,所有数据类型都会被转换为XSD,只需要遵守WebService的统一标准即可。如果用restful,java和python肯定不一样
3.国企更喜欢使用,因为其xml文档比json数据更加规范

二.步骤

  1. 创建webservice服务端

    #views.py
    from django.views.decorators.csrf import csrf_exempt
    
    from spyne import Application, rpc, ServiceBase, Unicode
    from spyne.protocol.soap import Soap11, Soap12
    from spyne.server.django import DjangoApplication
    
    TNS = "http://adc.siinterface.com/"  # 暂时没有发现有任何实质性作用
    # 定义一个class类用于之后渲染至django的url
    class SIInterfaceForADC(ServiceBase):
    	# rpc 为装饰器用于接收参数 _returns 之前的为接收参数,可以为多个, _returns = 返回参数
        @rpc(Unicode,Unicode, _returns=Unicode)
        # 函数方法,request为接收的参数,如果@rpc中为多个,request也相对应为多个
        def addUserInfo(self, request,request1):
    		# 代码逻辑
            return 'addUserInfo'
    
        @rpc(Unicode, _returns=Unicode)
        def delUser(self, request):
    
            return 'delUser'
        @rpc(Unicode, _returns=Unicode)
        def modifyUserInfo(self, request):
    
            return 'modifyUserInfo'
    """
    Application = spyne内置函数,用于将上面定义的类分发起来
    SIInterfaceForADC = 定义的类
    tns = 代码头定义的tns(暂时没发现实质性作用)
    name = 给该类命名
    in_protocol = 输入的数据 Soap12 = soap协议,可以为Soap11 validator = 数据类型(一般为lxml)
    out_protocol = 输出的数据
    
    """
    application = Application([SIInterfaceForADC],tns=TNS,
                              name="SIInterfaceForADC",
                              in_protocol=Soap12(validator='lxml'),
                              out_protocol=Soap12())
    # si_service_app = 将spyne渲染至django的url 
    si_service_app = csrf_exempt(DjangoApplication(application))
    
    #urls.py
    from django.conf.urls import url
    from django.contrib import admin
    import views
    
    urlpatterns = [
        # si_service_app 为views对应的分发数据
        url(r'^information/', views.si_service_app),
    ]
    
    

    当django启动之后,访问http://域名/information/?wsdl(此处需加上wsdl参数才能访问xml文档)

  2. 客户端

    from suds.client import Client
    # 传入的数据
    add_xml = 'haha'
    # 链接该webservice地址
    client = Client("http://127.0.0.1:8000/information/?wsdl")
    # addUserInfo = 服务端内定义的函数
    result = client.service.addUserInfo(upd_xml)
    print(result)
    

三.wsdl分析

参考: https://blog.csdn.net/liuchunming033/article/details/41210151

posted @ 2023-02-26 16:43  MISF  阅读(38)  评论(0编辑  收藏  举报
     JS过度和变形效果演示   
  
    html5.png