#vue.js #design-patterns #graphql #apollo
#vue.js #шаблоны проектирования #graphql #apollo
Вопрос:
Итак, в настоящее время у меня просто есть проект, который использует Vue.js для моего интерфейса. Существует GraphQL, поддерживаемый базой данных sqlite. Vue.js с помощью Apollo клиент считывает входящие сообщения с сервера websocket и на основе этого сообщения выполняет либо создание, либо обновление мутации GraphQL. В основном он просматривает ключ сообщения и выполняет запрос graphql по этому ключу. Если этот ключ существует, обновите мутацию, в противном случае выполните мутацию create (вставьте в таблицу).
Этот проект был просто любимым проектом для изучения GraphQL. Итак, я только что сказал кому-то, кого я знаю об этом, и сказал, что разрешение пользовательскому интерфейсу обрабатывать записи в БД является анти-шаблоном. Я не уверен, что это значит, но какие мысли? Клиент Apollo / Vue на самом деле просто отправляет запросы gql, а фактическая запись обрабатывается базовым сервером GraphQL Apollo.
Технически, я думаю, я мог бы использовать отдельный микросервис, который записывает данные в БД напрямую, и не нужно выполнять какие-либо мутации GraphQL?
Комментарии:
1. Я был бы обеспокоен тем, что для каждого сообщения websocket требуется два вызова gql, поиск ключа, за которым следует мутация. Звучит неэффективно.
2. @jaco0646 да, это определенно очень плохая реализация, но на самом деле это было просто поиграть с разными технологиями. В основном это было сделано для того, чтобы попытаться интегрировать Kafka с GraphQL и потоковыми событиями и как заставить их взаимодействовать друг с другом в основном.
3. ‘upsert’ (обновление или установка) — мутация обновления может проверить, существует ли ключ, и обработать его по-другому… анти-шаблон? это зависит … работает только тогда, когда активен интерфейс / страница… человеческий фактор / фильтр (оператор одобряет сохранение только некоторых сообщений)… сервер может сделать то же самое, может иметь некоторую службу прослушивания потоков / сокетов и обновления с помощью graphql (если не нашей DB / service)