Мне нужно вызвать метод веб-службы SOAP с довольно сложными данными (~ 40 атрибутов, некоторые из которых имеют сложные типы). Преобразование Django Model Data -> SOAP WS Data не является тривиальным.
В настоящее время я использую suds.client.Client для вызова WS, и я уже могу создавать экземпляры всех типов данных WS, используя метод Client.factory.create.
Вопрос в том, какой шаблон использовать? Я хотел бы проверить данные перед обработкой их в WS, что-то вроде DTO (что некоторые люди классифицируют как анти-паттерн). Я не хотел бы помещать всю логику преобразования в представление.
У меня уже есть небольшая оболочка WS, чтобы можно было выполнять любые преобразования / проверки перед вызовом метода WS.
Вот несколько альтернатив:
- Direct: заставить оболочку WS принимать любые необходимые данные, проверять и преобразовывать их в экземпляры данных suds WS.
- Простой старый объект Python: создайте простой объект Python, создайте его экземпляр и заполните его в представлении и передайте его оболочке WS, которая должна проверить и преобразовать его в данные WS перед отправкой. (Теперь у нас есть четкое разделение между любыми данными формы / экземпляра django и данными WS, переданный объект служит DTO).
- Форма Джанго: Как и в предыдущем случае, но могут быть указаны точные типы данных, логика проверки включена. Очищенные данные будут переданы оболочке WS, которая преобразует их в данные WS перед отправкой. Одним из плюсов является то, что мы могли бы создать интерактивную форму для тестирования WS. Еще один из них заключается в том, что любые ошибки проверки могут быть легко отображены.
- Модель Django: Как и в предыдущем случае, но с использованием моделей Django вместо форм. Хотя это не будет сохраняться, мы могли бы использовать ModelForm для проверки. (Оставьте его открытым, чтобы создавать любые таблицы в будущем, или используйте администратор django для автоматического создания форм.)
- DRF Serializer: Это похоже на Django Form, включая логику проверки. Он хорошо обрабатывает вложенные объекты, включая ListSerializer (который мне понадобится). Тестирование должно быть легким. Хотя здесь я не использую REST, сериализатор может преобразовать его в данные suds WS.
Есть предложения?