我必须调用具有相当复杂的数据(约40个属性,其中某些属性属于复杂类型)的SOAP Web服务方法。转换Django模型数据-> SOAP WS数据并非易事。
当前,我使用suds.client.Client来调用WS,并且已经能够使用Client.factory.create方法实例化所有WS数据类型。
问题在于:使用哪种模式?我想在将数据处理到WS之前先对其进行验证,例如DTO(有人将其归类为反模式)。我不想将所有转换逻辑都放在视图中。
我已经有了一个WS包装器,可以在调用WS方法之前进行任何转换/验证。
以下是一些替代方案:
- 直接:使WS包装器接受任何必需的数据,进行验证并将其转换为suds WS数据实例。
- 普通的旧Python对象:创建一个简单的Python对象,实例并将其填充到视图中,然后将其传递给WS包装器,该包装器应先进行验证并将其转换为WS数据,然后再将其发送出去。 (现在,在任何django表单/实例数据与WS数据之间都有清晰的分隔,传递的对象充当DTO。)
- Django形式:与以前一样,但可以提供确切的数据类型,其中包括验证逻辑。清理后的数据将提供给WS包装器,然后在发送之前将其转换为WS数据。优点之一是我们可以生成一个交互式表单来测试WS。另一个可能是任何验证错误都可以轻松显示。
- Django模型:和以前一样,但是使用django模型而不是表单。尽管它不会持久,但我们可以使用ModelForm进行验证。 (将其打开以在将来创建任何表,或使用django管理员自动创建表单。)
- DRF序列化器:就像Django Form,包括验证逻辑。它可以很好地处理嵌套对象,包括ListSerializers(我需要)。测试应该很容易。虽然,我在这里不使用REST,但序列化程序可以将其转换为WS数据泡沫。
有什么建议吗?