Веб-приложение на основе базы данных: как работать с автономным режимом

Я разрабатываю веб-приложение, используя Laravel (PHP-фреймворк). Приложение собирается использовать около 30 моих коллег на своих ноутбуках с Windows.

Мои коллеги регулярно опрашивают людей. Они будут использовать веб-приложение для добавления нового профиля в базу данных после первого собеседования с кем-либо, и они будут добавлять примечания к этим профилям при последующих посещениях. Профили и заметки хранятся с использованием MySQL, но, поскольку я использую Laravel, я мог легко переключиться на другую базу данных.

Иногда моим коллегам приходится брать интервью у людей, когда они не в сети. Они могут посетить группу интервьюируемых, добавить несколько профилей и добавить некоторые заметки к уже существующим во время сеанса без доступа к Интернету.

Как мне подойти к этому?

  1. С локальным веб-сервером на каждом ноутбуке. Я видел приложения, поставляемые с каким-то инсталлятором, включая стек LAMP, но я не могу найти никакой документации по этому вопросу.
  2. Я мог бы установить приложение и что-то вроде XAMPP на каждый ноутбук
    себя. Это было бы возможно, но в будущем больше людей могли бы использовать приложение, и не все из них могли бы быть расположены поблизости.
  3. Я мог бы использовать Service Workers, может быть, в связи с такой библиотекой
    как Вверх вверх. Это, кажется, самый элегантный подход.

Я хотел бы попробовать вариант (3), но мое приложение управляется базой данных, и я не уверен, что смогу реализовать этот подход:

  • Можно ли записать все (соответствующие) данные из БД в, скажем, файл JSON, к которому можно получить доступ вместо БД в автономном режиме? Нам не нужно обрабатывать много данных (во время собеседования должно быть доступно менее 100 небольших записей данных).
  • Когда мои коллеги добавляют профили или заметки в автономном режиме, существует ли какой-либо «веб-сервис» способ вставить данные в введенную базу данных?

Спасибо
Пида

3

Решение

Вы можете создать то, что вы описываете, используя сервисные работники для кэширования статического контента вашего сайта, чтобы сделать его доступным в автономном режиме, и конкретный fetch обработчик в сервисном работнике для обнаружения сбоя PUT или же POST и поставить в очередь данные в IndexedDB, Вы бы тогда периодически проверять IndexedDB для любых данных в очереди, когда ваше веб-приложение загружено, и попытайтесь отправить его заново.

Я описал этот подход более подробно на https://developers.google.com/web/showcase/case-study/service-workers-iowa#updates-to-users-schedules

Эта статья предполагает использование sw-precache библиотека для кэширования статических ресурсов вашего сайта, и sw-toolbox библиотека для обеспечения времени выполнения fetch обработчики, которые проверяют на неудачные запросы бизнес-логики. Он также использует обещание на основе IndexedDB обертка называется simpleDB хотя я бы, наверное, пошел с более свежим idb библиотека в наше время.

2

Другие решения

Я бы подумал об этом, как о создании приложения в «двух частях».

Во-первых, внешний интерфейс использует ajax-вызовы для внутреннего интерфейса (который является не чем иным, как REST API). Если нет никакого сетевого подключения, сохраните данные в браузере, используя локальное хранилище.

Когда пользователь позже подключится к сети, вы можете отправить данные, которые существуют в локальном хранилище, на сервер и очистить локальное хранилище.

Если вы добавите веб-серверы на ноутбуки, базы данных и информация будут храниться только на их локальных ноутбуках и не будут синхронизироваться.

1

По вопросам рекламы [email protected]