我们在SOAP Web服务中遇到了性能问题。 Web服务是使用Spyne构建的。
我认为可以解决问题,更改接口只返回必要数据的接口,因为我们将大型soap对象发送到客户端。
示例:
我们有一个具有很多属性的Fabric soap对象,见下文:
class Fabric(ComplexModel):
__namespace__ = 'vadain.webservice.curtainconfig'
id = Mandatory.Integer
"Fabric ID"
articleNumber = String
"Article Number"
name = Mandatory.Unicode
"Fabric Name"
color = Mandatory.Unicode
"Color"
width = Float
"Fabric Width"
widthType = WidthType
"Width Type"
supplier = Mandatory.Unicode
supplierId = Integer
"Supplier"
ETC.
还有更多!!
我们已经实现了两个界面搜索结构和获取结构,见下文:
搜索面料:
@rpc(Unicode, _returns=soap.Fabric.customize(max_occurs='unbounded'))
def fabricsWithName(ctx, name):
--Code to get all fabrics with name
return fabrics
获取面料:
@rpc(Integer, _returns=soap.Fabric)
def getFabric(ctx, fabric_id):
--Code to get fabric from ID
return fabric
灼热织物的界面正在返回织物的所有属性,但这不是必需的。可以更改只返回结构名称和ID。
如何以良好的方式更改此界面' fabricsWithName'只会返回结构名称和ID,这会解决性能问题吗?
答案 0 :(得分:0)
为什么不将返回值设置为仅包含所需内容的类?
e.g。
class FabricLite(ComplexModel):
__namespace__ = 'vadain.webservice.curtainconfig'
id = Mandatory.Integer
name = Mandatory.Unicode
# (...)
@rpc(Integer, _returns=FabricLite)
def getFabric(ctx, fabric_id):
# (...)
您无需更改函数体中的任何内容,Spyne将忽略其余数据。
另外,我将getFabric签名更改为:
@rpc(Mandatory.UnsignedInteger32, _returns=FabricLite)
以便传入值验证更严格。