了解 RPC 装饰器:SOAP 和 XML 的复杂 return 参数
Understanding RPC decorators: complex return arguments with SOAP and XML
我是创建 SOAP Web 服务的新手,对 RPC 装饰器有疑问。
无论如何,我的意图是让我的 Web 服务具有稍微复杂的 return 类型(我相信它是多态的)。输入协议为 SOAP,输出协议为 XML.
我想要 return 一个包含数组的字典,每个数组的值可以是浮点数或字符串(请参见下面代码中的第 6 行)。我知道这看起来像一个 XML 元素树——但是,我不知道如何在 @rpc 装饰器的 _returns 参数中表示它。使事情稍微复杂一些,如果客户端发送无效凭据,我只想 return 字符串 "Invalid credentials"。或者 return 一个空列表可能会更容易...
非常感谢关于这个问题的一些建议!
class CoreService(ServiceBase):
@rpc(Unicode, Unicode, Integer, _returns=Unicode) #@rpc arguments corespond to the retrieve_score() arguments below
def retreive_score(ctx, username, password, uid):
if validate_creds(username,password):
return {"score:" 0.6, features=[{"gender": "male"}, {"height": 160], ... ]
else:
return "Invalid credentials"
application = Application([CoreService], 'spyne.iefp.soap',
in_protocol=Soap11(validator='lxml'),
out_protocol=XmlDocument(polymorphic=True))
SOAP 有一种 return 类型。惯用的方法是引发错误异常,而不是 return 流氓响应(即与指定的 return 类型不兼容的响应)
如果你想 return 任意数据,你可以尝试 _return=AnyDict
甚至更好,_return=AnyXml
这会让你 return 任何你想要的。
查看此函数以了解如何将任意字典转换为 XML 文档。
此函数实现了一种将字典映射到 XML 数据的可能方法。这是一个有损过程,因此它可能适合也可能不适合您的需求。
如果它不适合您,您将不得不使用 AnyXml 类型并直接使用 lxml 来构造您的响应。我建议 lxml.builder api。有关详细信息,请参阅此处:https://lxml.de/api/lxml.builder.ElementMaker-class.html
我是创建 SOAP Web 服务的新手,对 RPC 装饰器有疑问。
无论如何,我的意图是让我的 Web 服务具有稍微复杂的 return 类型(我相信它是多态的)。输入协议为 SOAP,输出协议为 XML.
我想要 return 一个包含数组的字典,每个数组的值可以是浮点数或字符串(请参见下面代码中的第 6 行)。我知道这看起来像一个 XML 元素树——但是,我不知道如何在 @rpc 装饰器的 _returns 参数中表示它。使事情稍微复杂一些,如果客户端发送无效凭据,我只想 return 字符串 "Invalid credentials"。或者 return 一个空列表可能会更容易...
非常感谢关于这个问题的一些建议!
class CoreService(ServiceBase):
@rpc(Unicode, Unicode, Integer, _returns=Unicode) #@rpc arguments corespond to the retrieve_score() arguments below
def retreive_score(ctx, username, password, uid):
if validate_creds(username,password):
return {"score:" 0.6, features=[{"gender": "male"}, {"height": 160], ... ]
else:
return "Invalid credentials"
application = Application([CoreService], 'spyne.iefp.soap',
in_protocol=Soap11(validator='lxml'),
out_protocol=XmlDocument(polymorphic=True))
SOAP 有一种 return 类型。惯用的方法是引发错误异常,而不是 return 流氓响应(即与指定的 return 类型不兼容的响应)
如果你想 return 任意数据,你可以尝试 _return=AnyDict
甚至更好,_return=AnyXml
这会让你 return 任何你想要的。
查看此函数以了解如何将任意字典转换为 XML 文档。
此函数实现了一种将字典映射到 XML 数据的可能方法。这是一个有损过程,因此它可能适合也可能不适合您的需求。
如果它不适合您,您将不得不使用 AnyXml 类型并直接使用 lxml 来构造您的响应。我建议 lxml.builder api。有关详细信息,请参阅此处:https://lxml.de/api/lxml.builder.ElementMaker-class.html