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数据更加规范
二.步骤
-
创建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文档)
-
客户端
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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律