Всем привет! Планирую делать различные модули? Которые должны как-то взаимодействовать друг с другом. Получать какие-то данные для логики.
Для этого у меня есть два варианта:
Сделать виджеты
Сделать API
Как вы используете? Подскажите...
Например, делаю модуль гео. Он будет отвечать за хранение информации о городах, странах и регионах. Он независим от других.
Далее делаю модуль мероприятий. Где город нужно получить из другого модуля. Желательно в базе ещё и хранить id, вместо строки.
Как соблюсти не связанность модулей и при этом чтоб все функционировало. Возможно придётся использовать и виджет и api, ведь нужно ещё и выводить на странице название города, а не id.
В общем подскажите как лучше сделать.
И второй вопрос как правильно реализовать api в модуле?
Максим Ворожцов, Ну смотри, если у тебя монолит, то всю логику в сервисы, и к ним все обращения, если апи.. то апи в сервисы, если внутреннее то тоже в сервисы.
Если микросервисы, то любой чих в них ходи и спрашивай... как то так имхо...
Ну что понимать под 1 сервисом... вот у нас есть сервис работы с продуктом, сервис работы с заказом и т.д. логика вся в сервисе, есть апи которая тоже туда ходит.. но вот масштабирование уже тяжелее.. (
Андрей, ну например заказы. Сервис заказов используем в api и в самом модуле.
Суть вообще такая. Я делаю модуль городов, регионов и стран. Возможно его потом опубликую. А может вообще дам api своих городов, типа клард и буду использовать эти данные в других проектах и модулях. Но это отступление.
Далее я хочу использовать этот модуль в другом модуле. Например, на мероприятие мне нужно указать в каком городе проходит. Через api получаю массив с данными и заношу id города из моего api. Затем. Использую виджет чтобы вывести его название.
Да. правильно.. т.е. что у вас там в модуле городов творится другому не важно знать.. т.е москва будет 1 или 10000 не важно.. главное что он возвращает массив данных который структурирован и ясен как использовать! по поводу городов, dadata чем не нравится? не так имхо дорого в ком. использовании.
Андрей, да вроде нравится, но пока не использовал) Вообще не использовал никакие api по городом. Всегда лепил готовый дамп базы и делал к ним модели. Сейчас смотрю в сторону api vk. Хорошая у них база. То что пока нудно и бесплатно)
Можете показать какой-нибудь открытый код как в модуле интегрируете с dadata, например)
Хочется сразу сделать хороший код, чтобы не переделывать) Я ещё не такой профи в написании) Бужу очень благодарен.
у нас тупо проксик(микросервис) сделан, что бы свои ключи не показывать, т.е любое обращение к городам идет через него.. он возвращает нам данные (мы там чутка модифицуруем) как то так
Андрей, а в базе как храните тогда города?) я хранил ID. А вы получается просто храните само название города. Не по ID. Верно? Это не усложняет вывод информации для одного города? Например всех пользователей Москвы...
Суть в том что по внутреннему ид можем найти что нам нужно ) Ну и можем сделать кеш.. по имеющимся данным. )))
Вся Москва, все равно идет через ДАДАТУ.. если надо сделать внутнренее, ну приводить город к вашему ид.. и области или району.. дальше уже группируйте как надо!
Андрей, понял) получается вы парусите данные в свою базу и подставляете id и выводите имя уже своего id) а я думаю вообще в своей базе ничего не храните из данных) вот как раз и интересно было как это все связать и при этом использовать в разных модулях НЕЗАВИСИМЫХ))
Так я же сказал у нас прокси.. взяли во внешке, сохранили у нас.. связали как нам надо и показали.. а по поводу не хранить, расскажите как же будете искать данные по городу?
приведете к городу из дадаты (из сервиса) потом пойдете искать по своим полям и т.д.?
Андрей, завтра ещё тогда раз перечитаю. Все равно не до конца понимаю) Разберусь думаю) Но все равно благодарен, что так активно помогаете)) тут просто и api и зависимости в модулях в общем все в одно место)
1. Виджет должен работать с данными, которые в него передали. Так что он явно не подходит для Вашей задачи.
2. Если Ваш модуль A нуждается в api или виджете или еще чем-то еще из модуля B, то это зависимость. И тут надо понимать что не важно как реализована зависимость, виджетом или использованием Модели из другого модуля. Это зависимость. Но зависимость модулей - это не плохо.
Делать абстракции - это отлично. Но делать это надо с прицелом на переиспользование в других проектах и без фанатизма.