У меня есть два приложения Rails, данные которых довольно взаимозависимы.Если бы мне нужно было легко получить доступ к моделям другого приложения в Django или иным образом поделиться ими, это было тривиально, поскольку я просто включил бы оба приложения в свой проект и смог бы импортировать модели другого приложения.В этот момент я мог просто получать доступ к объектам в базе данных другого приложения, используя ORM Django, и это было согласованно и потрясающе.
В Rails я получаю ошеломляющее впечатление, что способ сделать это - создать RESTfulAPI-хуки в каждом приложении для каждой вещи, которую вы хотите, чтобы другое приложение запросило.Кажется достаточно чистым и модульным, но он начинает запутываться, потому что у меня следующая ситуация:
- Сделать GET-запрос к приложению A
- Приложение A должно получить данные из приложения Bтаким образом, он отправляет запрос GET к перехватчику API для приложения B.
- Как часть функции в контроллере B, ему нужны данные, которые являются частью модели данных A, поэтому он выполняет запросы к A.
- Шаги 2-3 выполняются подряд
Очевидно, что это создает кошмар масштабируемости, и в нашем случае запросы истекают из-за этого состояния гонки, в котором новые запросы ждутчтобы исходный запрос был выполнен, но он никогда не будет выполнен, пока не будут выполнены новые.Мы можем ускорить больше процессов веб-сервера, но я чувствую, что должен быть лучший способ сделать это, не включающий выполнение этих лишних запросов GET, когда я поддерживаю оба этих приложения.
В конечном счете,мои вопросы: 1) есть ли более прямой подход к получению данных другого приложения Rails, чем выдача GET-запроса, или я просто пытаюсь использовать действительно великолепный дизайн таким образом, чтобы убить его?и 2) Если я борюсь против структуры шаблона проектирования, и это действительно отличный подход, есть ли какой-нибудь общий совет, который вы можете предложить, который поможет мне не допустить зависимости данных в этих приложениях друг от друга, что приведет к гонке?такие условия?Я понимаю, что мог бы передать информацию, которая понадобится приложению B, от A заранее (сейчас это только одно поле, но может быть позже), но действительно ли это right ?