Как лучше организовать серверную архитектуру для мобильных и десктоп приложений?
Всем добрый день.
В общем сразу начну со своего вопроса.
До этого я находился весь в вопросах системного администрирования, управление небольшими IT отделами.
Сейчас у меня все повернулось таким образом, что бы разработать полноценное приложение для фрилансеров ( сервис инженеров ).
Тут то у меня и вспыхнуло, что моих текущих компетенций отнюдь недостаточно для продолжения разработки.
Итак, необходимо разработать 3 приложения под 3 мобильные платформы, 1 десктопное приложение. (Android, iOS, Windows mobile, Windows 8).
Функционал приложений:
Пользователь подает заявку, по телефону, или через приложение. Заявка попадает в базу как неподтвержденная. Диспетчер (Десктопное приложение, либо Web) видит что в базу упала заявку, связывается с клиентом, подтверждает. Заявка попадает в базу как открытая.
Со стороны инженера. Инженер заходит в приложение, проходит авторизацию. Может посмотреть открытые заявки, текущие (которые выполняет), завершенные (которые сделал).
Соответственно открытую может взять, а выполняемую завершить. Завершенные просто как просмотр статус о проделанной работе за период времени.
Диспетчер выступает в роли администратора.
Сейчас находимся на этапе, как организовать серверную архитектуру, что бы перейти к следующему шагу. Какие операционные системы, какие сервисы, фреймворки.
REST. Прячите все за приятный интерфейс на основе http и вашим приложениям будет глубоко плевать, что там под ним, балансировщик нагрузок на класстер серверов или шаред хостинг. Опять же таким образом ваши клиенты так же не будут зависить от конкретной реализации сервера, им нужен только интерфейс.
И еще, это статегически не верный шаг, подключать программистов уже после организации сервера, так как они должны предоставить вам требования.
@penzu
В общем-то приложение у вас получается достаточно простое.
На сервере БД + приложение, которое будет отвечать за работу с БД и обработку запросов от клиентов.
На клиенте приложение хранит заявки в структурированном файле (например XML) или БД SQLite. @Fesor верно заметил, что для взаимодействия лучше всего подойдет REST.
В принципе вы можете вместо разработки клиента для каждой мобильной платформы создать Web-приложение, которым смогут пользоваться и мобильные и desktop клиенты, а в последствии, если это понадобится создадите нативные приложения.
Клиент посылает серверу HTTP запросы (на авторизацию, на получение на заявок, на обновление заявок), сервер посылает ответ содержащий данные.
В REST нет ничего сложного, он просто описывает некоторые архитектурные особенности, о которых вы можете почитать на хабре =)