Web Service技能, 能使得运行在不同机器上的不同运用无须借助附加的、专门的第三方软件或硬件, 就可相互交流数据或集成。依据Web Service规范履行的运用之间, 无论它们所利用的措辞、 平台或内部协议是什么, 都可以相互交流数据。Web Service是自描述、 自包含的可用网络模块, 可以实行详细的业务功能。Web Service也很随意马虎支配, 由于它们基于一些常规的家当标准以及已有的一些技能,诸如[标准通用标记措辞](https://baike.baidu.com/item/标准通用标记措辞/6805073)下的子集[XML](https://baike.baidu.com/item/XML)、HTTP。Web Service减少了运用接口的花费。Web Service为全体企业乃至多个组织之间的业务流程的集成供应了一个通用机制。
SOAP
SOAP即[大略工具访问协议](https://baike.baidu.com/item/大略工具访问协议)(Simple Object Access Protocol),它是用于交流[XML](https://baike.baidu.com/item/XML)([标准通用标记措辞](https://baike.baidu.com/item/标准通用标记措辞)下的一个子集)编码信息的轻量级协议。它有三个紧张方面:XML-envelope为描述信息内容和如何处理内容定义了框架,将程序工具编码成为XML工具的规则,实行[远程过程调用](https://baike.baidu.com/item/远程过程调用)(RPC)的约定。SOAP可以运行在任何其他[传输协议](https://baike.baidu.com/item/传输协议)上。例如,你可以利用 SMTP,即因特网[电子邮件协议](https://baike.baidu.com/item/电子邮件协议)来通报SOAP,这可是很有诱惑力的。在[传输层](https://baike.baidu.com/item/传输层)之间的头是不同的,但XML有效负载保持相同。
Web Service 希望实现不同的系统之间能够用“[软件](https://baike.baidu.com/item/软件)-软件对话”的办法相互调用,冲破了软件运用、网站和各种设备之间的扞格难入的状态,实现“基于Web无缝集成”的目标。
目录构造webserviceclientclient.pyserverapp.pyservice.py
利用Python实现做事端
service.py 做事端启动文件
from spyne import Applicationfrom spyne.protocol.soap import Soap11from spyne.server.wsgi import WsgiApplicationfrom wsgiref.simple_server import make_serverfrom webservice.server.app import PyWebServiceif __name__ == 39;__main__': soap_app = Application([PyWebService], 'PyWebService', in_protocol=Soap11(validator='lxml'), out_protocol=Soap11()) wsgi_app = WsgiApplication(soap_app) host = "127.0.0.1" port = 9567 server = make_server(host, port, wsgi_app) print('WebService Started') print('http://' + host + ':' + str(port) + '/PyWebService/?wsdl') server.serve_forever()
app.py webservice接口
import jsonfrom spyne import ServiceBase, rpc, Doublefrom spyne import Integer, Unicode, Stringclass User(object): def __init__(self, age, user_name): self.age = age self.user_name = user_name self.sex = 0 def get_user_list(self, current_page, page_size): l = [] for i in range(10): l.append({'age': self.age, 'sex': self.sex, 'user_name': self.user_name}) return luser_mgr = User(18, 'Tom')class PyWebService(ServiceBase): ... @rpc(_returns=Unicode) def get_version(self): """ 获取系统版本 :return: """ return json.dumps({'version': 1.0}) @rpc(Integer, Integer, _returns=Unicode) def get_user_list(self, current_page, page_size): """ 获取用户列表 :return: """ return json.dumps(user_mgr.get_user_list(current_page, page_size))
利用Python实现客户端
client.py
import jsonfrom suds.client import Clientwsdl_url = "http://127.0.0.1:9567/PyWebService/?wsdl"client = Client(wsdl_url) # 创建一个webservice接口工具resp = client.service.get_version() # 调用这个接口下的get_version方法,无参数print(json.loads(resp))
上面调用的客户端接口,测试结果如下:
{'version':1.0}