Как мне создать и разместить собственный сервер для приложения iOS?

В качестве предисловия: я хочу сделать это в качестве учебного упражнения. Я не пытаюсь создать коммерчески выгодное приложение.

Каковы уровни/абстракции приложения iOS, которое подключено к пользовательскому, самостоятельно размещенному бэкенду? Какие технологии необходимы для построения этого стека?

Этот пост помог мне немного понимая. В настоящее время я использую Firebase в качестве своего бэкэнда, но обнаружил, что его структура NoSQL не подходит для моего приложения. Данные, которые я храню, являются реляционными, поэтому я думаю, что база данных SQL, хранящая JSON, будет работать лучше. Данные моделируют транспортные средства, совместно используемые пользователями. Судя по моим исследованиям, платформа Realm выглядит хорошим выбором. Я правильно понимаю технологии здесь? Имеет ли это предложение смысл?

Общая функциональность:

  • Регистрация и вход пользователей
  • Загрузить/выгрузить данные автомобиля
  • Некоторая серверная логика
  • Отправка обновлений данных пользователям в режиме реального времени

Так будет ли стек выглядеть следующим образом?

Интерфейс пользователя: приложение для iOS, написанное на Swift
База данных: База данных Realm (SQL)
Сервер: Объектный сервер Realm

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

Прошу прощения, если этот вопрос излишен; большинство ответов, которые я видел на подобные вопросы, обычно заканчиваются словами «просто используйте AWS, Firebase и т. д.».

Спасибо!


person Nick Rizzo    schedule 22.03.2019    source источник
comment
Вы также можете попробовать свои силы в Python's Flask для бэкенда и использовать любую базу данных, которую вы хотите.. хотя она поставляется с SQLAlchemy..   -  person Brandon    schedule 22.03.2019
comment
Интересно посмотрю! Спасибо   -  person Nick Rizzo    schedule 22.03.2019
comment
Есть хороший и принятый ответ, но вопрос немного расплывчатый. Требования могут быть обработаны Firebase (который может обрабатывать отношения) или ROS Realm. Если вы развертываете свой собственный физический сервер, вам необходимо учитывать такие элементы, как обслуживание, время простоя, избыточность, не говоря уже о наличии подходящего оборудования для поддержки пользователей X, а также возможности подключения, безопасности и т. д. Это может быть очень дорогим предложением, поскольку вес всего держится исключительно на вас например вместо того, чтобы тратить время на кодирование и обновление приложения, вам придется провести день, заменяя неисправный жесткий диск.   -  person Jay    schedule 22.03.2019
comment
Прошу прощения за неточность; это результат моего невежества в этом вопросе. :) Меня больше интересует развитие моего понимания технологического стека, чем эффективность выполнения всего этого самостоятельно, а не использование уже существующих решений, таких как Firebase. Хотя я использую Firestore (относительно новую базу данных Firebase), и я считаю, что это полное несоответствие для моих целей. Насколько я понимаю, Firebase — это база данных NoSQL, которая хороша для управления неструктурированными нереляционными данными. Мои данные структурированы, нединамичны и реляционны. Время разработки до сих пор было медленным из-за этого несоответствия.   -  person Nick Rizzo    schedule 22.03.2019
comment
Ах ... Исходя из сильного опыта работы с SQL, я сначала подумал, что Firebase также не соответствует; Я был совершенно неправ. Есть поговорка использовать правильный инструмент для работы, но понимание инструмента дало мне другую точку зрения. Первоначально создание «отношений» в NoSQL казалось полным несоответствием... однако, как только вы поймете, как подходить к данным в NoSQL, это даст вам еще один инструмент в вашем наборе инструментов; Firebase/FireStore невероятно быстр и очень расширяем - я бы посоветовал продолжить его. Если у вас есть конкретная проблема с вариантом использования, обязательно опубликуйте ее здесь, чтобы мы могли ее рассмотреть.   -  person Jay    schedule 23.03.2019
comment
@Jay Это имеет смысл! Похоже, я недостаточно использую Firebase. Так что было бы справедливо сказать, что Firestore позволяет структурировать данные в стиле SQL, если вы хотите, а также поддерживает NoSQL? В этом случае я, возможно, не подхожу к этому правильно. Я продолжу свой первоначальный пост с моделями данных/требованиями приложения.   -  person Nick Rizzo    schedule 23.03.2019
comment
Это допускает отношения, когда граф объектов создается вами, а не им. Предоставьте простой и конкретный пример необходимой вам связи, что вы пробовали (код) и вашу текущую структуру. Решение будет, но к нему будут подходить с точки зрения NoSQL.   -  person Jay    schedule 23.03.2019


Ответы (1)


Для начала вы хотите создать свой собственный бэкэнд, и вы должны создать свой собственный API, к которому будет подключаться ваше приложение IOS. короче говоря, это называется REST API https://www.sitepoint.com/developers-rest-api/

вам нужно будет использовать гораздо больше технологий, чем просто сервер, такой как Apache

как только вы создадите свой серверный API, вам нужно будет подключить его к приложению IOS, что можно сделать с помощью встроенной фреймворка NSURLSession Apple или Alamofire, который основан на NSURLSession, но его проще использовать, если вы учитесь

вам нужно будет узнать, как сделать запрос http/https, чтобы понять, как делается запрос

проверьте это https://medium.com/@MuraliKathir/build-a-simple-api-search-with-alamofire-and-swiftyjson-80286e833315

Теперь к Царству. Realm — это локальная база данных, которая будет находиться внутри вашего приложения IOS и поможет вам сохранять данные, загруженные из Интернета, или даже сгенерированные пользователем https://realm.io/docs/swift/latest/#queries

person Marchal    schedule 22.03.2019
comment
Спасибо за быстрый ответ и ссылки! С точки зрения Realm (или любой другой БД), будут ли у меня 2 базы данных Realm, одна на сервере, а затем локальная на iPhone? Сервер будет иметь все данные для всех в приложении, в то время как локальная БД будет иметь только данные, актуальные и доступные для этого конкретного пользователя? Кроме того, я предполагаю, что сервер и локальные базы данных не обязательно должны быть Realm? - person Nick Rizzo; 22.03.2019
comment
@NickRizzo да, они не обязательно должны быть такими же, как вы сказали, на стороне сервера может быть mysql или любая другая база данных, а в приложении вы можете привязывать данные и сохранять их где угодно. Realm можно использовать на стороне сервера как в Linux, так и в Windows через NodeJS и API Realm-JS. - person Marchal; 22.03.2019
comment
Большое спасибо! Это заполняет многие пробелы для меня. - person Nick Rizzo; 22.03.2019