JhaoDaAlex Wells Я с вами запутался) JhaoDa Я не понял про а) и б), но походу б). Когда у меня происходит создание одной сущности мне нужно сохранить другую, но так чтобы при ошибки сохранении другой был откат первой. Типично я могу это обернуть в транзакцию. Но Observer для моей задачи выглядит лучше. Если Obsever слушает создание первой сущности, и в коде метода обсервера произойдет ошибка, первая сущность при это будет создана или нет?
Я с вами во многом согласен. Но текущее использование Zappa планируется только как клей клиента с основным приложением. Почему бы не взять удобный инструмент для простой задачи, а для сложной задачи уже искать правильный инструмент.
Иван Шумов, Спасибо за вашу настойчивость!
Давайте тогда я опишу какие задачи я пытаюсь решить и тогда может быть, вы немного согласитесь с использованием Zappa или предложите что то другое =)
У меня есть монолит. Он используется для проведение маркетинговых акций, то есть нагрузка на все это не постоянная. У него есть какая то основная логика и с базовым набором API. к нему периодически нужно прикручивать новые view для обеспечения клиентов нужным для них форматом API. Как решение я решил использовать микросервисный подход. Чтобы клиент обращался к API микросервиса как к прослойке которая в свою очередь (используя дополнительную логику) обратится от API монолита. По сути эти сервисы будут использовать API монолита только для данных и выполнять бизнес логику. Они не будут большими. Но я не хочу разбираться с Kubernetes чтобы пихать туда эти сервисы, ведь я могу использовать Zappa чтобы быстро развернуть сервис и по необходимости быстро изменять код под новые требования.
Сейчас это выглядит так:
Страница монолита с формой
Планируется:
Сайт (на Tilda) с формой которая шлет данные в микросервис который потом шлет обработанные данные в
похудевший монолит, и планируется рост таких сервисов.
Я уже работал с AWS Lambda и она дает гибкость для монолита, а Zappa (я сегодня в первый раз с ней возился и я уже готов перенести логику 1-го сервиса) добавляет мне скорости для создания таких сервисов.
Но я заинтересовался почему Zappa боль? И какие есть другие низкобюджетные варианты решение моей задачи, вы можете предложить?
Иван Шумов, Чтобы писать в знакомом стиле (flask) а не свои обертки. CI/CD выглядит более проще или знакомым. Ну и вообще мне зеленый фломастер больше нравится)
Сергей Тихонов Спасибо большое! В итоге сделал как вы и описали через обычный класс и даже нашел случайно сайт который вы привели, очень познавательный с иллюстрациями)
FulTupFul, Вы правильные вещи говорите но я хочу понять использования именно super() и для какого принципа он подходит?
Часто как раз бывают случаи когда мы используем super() как раз для того чтобы не нарушить общую логику метода которая описана в базовом класе, тоесть super() подходит для третьего принципа.
Все верно, а какой это принцип или принципы? Что мешает нам расширять его без использования super()? Да мы можем поломать код в другой части из за того что мы полностью предопредилили работу метода, да это плохо, но это плохо в открытости/закрытости или в Лисков?
hint000, Спасибо большое за ответ! Приблизительно так я и сделал, только использовал draw.io =)
Решил основное приложение будет своего рода шлюзом для сервиса, но шлюз будет не только проксировать запросы и определять права доступа.
Сергей Тихонов, в общем вы оказались правы! Пересмотрев еще раз свой вопрос, ваш ответ и документацию Wagtail - обнаружил возможность для Page(а может и просто Model) назначать атрибут определения класса формы. А значит для это формы можно написать свою валидацию, но с учетом вызова не ValidationError, a add_error для формы указывая конкретное поле! https://docs.wagtail.io/en/v2.2.2/advanced_topics/...
JhaoDa Я не понял про а) и б), но походу б). Когда у меня происходит создание одной сущности мне нужно сохранить другую, но так чтобы при ошибки сохранении другой был откат первой. Типично я могу это обернуть в транзакцию. Но Observer для моей задачи выглядит лучше. Если Obsever слушает создание первой сущности, и в коде метода обсервера произойдет ошибка, первая сущность при это будет создана или нет?