Я хочу реализовать веб-хуки как часть REST API приложений.
Первоначально мы стремимся реализовать механизм, позволяющий потребителям API регистрироваться на события обновления сущности. Поэтому, если объект изменяется, мы вызываем все веб-перехватчики, которые зарегистрировались для событий изменения в этом объекте (и как часть процесса регистрации, потребители API могут включать дополнительные критерии фильтрации, чтобы гарантировать, что они получают обратные вызовы только для подмножества объектов, которые им интересны. в).
Теперь - это хорошо работает для изменений, инициированных пользователем, которые будут поступать медленно, но меня беспокоит, как лучше всего справиться с этим, когда происходит поток изменений - например, как часть массового действия, выполняемого в пользовательском интерфейсе, или поток изменений, происходящих от потребителей API.
Пока что я рассмотрел:
- Просто выполняю обратный вызов для каждой сущности, используя какой-то асинхронный пул - проблема, которую я вижу здесь, заключается в масштабировании и потенциально причинении вреда тем приложениям, которые подписываются на веб-хуки.
- Создание очереди записей об изменении для каждой регистрации веб-перехватчика, скажем, в течение 10-секундного окна, а затем отправка одного уведомления веб-перехватчика для подписки со списком затронутых сущностей - проблема, которую я вижу здесь, заключается в том, что мы вводим ненужную задержку между действием и веб-перехватчиком , когда события просто просачиваются внутрь - это также приводит к некоторым накладным расходам и сложности, особенно при реализации этого в сценарии веб-фермы.
- Фактически представляет массовые действия как веб-перехватчики - поэтому, если массовое удаление было выполнено, потребитель подписался бы на это. Таким образом, установка ловушки для изменений отдельных сущностей не будет получать никаких событий изменения сущностей для массовых обновлений / удалений и т. Д. - им придется обрабатывать это через веб-хуки массовых действий.
В качестве дополнительных деталей - массовое действие в этом приложении, вероятно, будет охватывать от 10 до примерно 100 000 объектов.
Кто-нибудь реализовал веб-хуки для массовых действий, которые могут пролить свет на то, как они решили это реализовать?