Лучший способ подключения к MongoDB из приложения Android

из моего приложения для android я подключаюсь к MongoDB через mLab и ищет некоторые разъяснения.

по состоянию на документация mlab упоминается использовать MongoDB Driver для лучшей безопасности и производительности вместо использования mLab Data API.

но это хорошая практика для подключения к MongoDB непосредственно из приложения Android с помощью драйверов. Какой лучший способ подключить wit ниже?

  1. драйверы Mongo DB
  2. API данных mLab и потребляйте его через приложение Anroid (этот API предоставляет только базовую функциональность)
  3. создать веб-API и потреблять его через Android App

также любые другие предложения, кроме этого?

5 ответов


из вариантов, предложенных в вопросе, я считаю, что 3 вариант является единственным разумным. Обсуждение ниже:


  1. драйверы Mongo DB

использование драйвера mongoDB в Android не является отличной идеей по нескольким причинам.

по этому StackOverflow ответ драйвер не совместим с Android из коробки. Есть кое-кто, у кого есть разветвленный проект на Github и сделал его совместимым с Android, но проект не обновлялся более года.

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

это также будет сложнее (невозможно?) для защиты содержимого базы данных. Каждое приложение будет иметь доступ ко всей базе данных. Это может быть нормально, если база данных не хранит никаких личных данных. Еще один большой риск безопасности заключается в том, что приложение будет содержать необходимые учетные данные для подключения непосредственно к базе данных, которые могут быть легко получены.

кроме того, это решение сделает приложение Android зависимым от внутренних компонентов базы данных. Наличие API добавит гибкости и защитит приложение.

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

  1. API данных mLab

Я не очень хорошо знаком с API данных mLab. Из того, что я собрал, прочитав их документацию, похоже, что это просто простой API, если драйвер Mongo DB не может быть использован по какой-то причине.

в этом случае большинство проблем с использованием драйвера mongoDB также применяются. Приложение, которое вы распространяете, должно содержать ваш ключ API, а их документация гласит:

Your API key will give full access to all data within the databases belonging to your mLab account. If you distribute it to untrusted individuals, they can gain access to your account and your data.

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

  1. создать веб-API и потреблять его через Android App

пользовательский API-это способ, которым большинство приложений решают такие ситуации. документация MongoDB имеет несколько ссылок на существующие фреймворки для взаимодействия с базой данных mongoDB через HTTP. Рекомендуется использовать такой каркас для надежности, безопасность и поддержка сообщества.

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

если другие клиенты (iOs / web / desktop apps, другие серверы...) который будет использовать ту же базу данных планируемое в будущем проектирование API также будет иметь много преимуществ. Разрабатывать новых клиентов будет намного проще. В этом случае усилия, потраченные на создание хорошего API, будут хорошей инвестицией.

дополнительные опции

стежка (также цитируется в другом ответе) выглядит как хорошее решение, если оно никогда не выходит из бета-версии. Много приходит из коробки и она позволяет некоторой степени изготовления на заказ и гибкости. Использование stitch может помочь уменьшить нагрузку на бэкэнд.

надеюсь, что это помогает!


Я определенно настоятельно рекомендуем вам предоставить свой собственный веб-API / restful API. Преимущества огромны. Я рекомендую сделать ваше приложение для android полностью MongoDB агностиком. За вашим собственным API вы делаете то, что вам нравится, вы можете захотеть рассмотреть возможность перехода к другому решению хранилища данных в будущем. Вы упрощаете тестирование / макет приложения. Что, если ваш монгодб мертв? Как вы кэшируете, оптимизируете, обрабатываете ошибки, ... На самом деле, вы захотите реализовать множество своих логика на сервере, и не обязательно иметь всю вашу логику, сидя на вашем android приложения. Как еще вы создадите приложение для iPhone,а затем веб-приложение? Есть так много причин / преимуществ, чтобы не идти непосредственно в mongodb.

этот вопрос и обратная связь дадут вам больше советов и подробностей о том, почему следует рассматривать REST API, а не напрямую обращаться к mongodb: https://softwareengineering.stackexchange.com/questions/277701/why-do-people-do-rest-apis-instead-of-dbals

Что касается рассмотрения Rest, Crud или web, я рекомендую вам прочитать советы, приведенные здесь:в чем преимущество использования REST вместо non-REST HTTP?. Это даст вам информацию о возможном запуске с CRUD API, Vs Rest. Я чувствую, что это может стать вашим следующим вопросом.


простой ответ-большое нет. Вы не должны подключаться к MongoDB или любой базе данных, которая будет нуждаться в вставках данных. Рассмотрим следующие моменты

  • вы можете хранить данные для нескольких пользователей вашего приложения, как вы остановить пользователей от доступа к базе локально и портить его?
  • вы также будете хранить данные для других пользователей, которые должны быть защищены. Предоставление местоположения и ключа API для вашего местоположения БД предоставляет данные всем, и вы теряете любой вид контроля
  • даже если доступ к БД только для чтения на основе предположим, что какой-то сценарий, где у вас есть ссылка только для чтения приложение, по-прежнему подвергая расположение вашего сервера БД является высоким риском. Хакер может проникнуть в БД и изменить полную БД после получения доступа на запись. Местоположение БД никогда не должно подвергаться
  • отсутствие API означает, что вам понадобится код каждой возможной логики в каждом из ваших приложений. Если вы поддерживаете iOS в будущем и android тоже, то вы есть проблема с написанием логики в обоих и держать оба из них в курсе на телефоне пользователя. Это снова большое нет, так как вам нужно заставить пользователя обновить приложение для чего-то, что можно было легко сделать на стороне сервера

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

PS: Если вы создаете приложение, которое вы будете использовать только, вы можете посмотреть на его использование. И тогда зачем использовать MongoDB? Просто используйте SQLite и сохранить все данные с самим приложением


попробовать сшить . он все еще находится в бета-версии, и в настоящее время вы можете использовать его только на atlas, но через несколько дней вы также можете использовать его локально.Пожалуйста, перейдите по ссылке https://www.mongodb.com/cloud/stitch


подключение к экземпляру БД из мобильного приложения -BIG NO, его любой может перепроектировать ваше приложение , и ваш экземпляр БД открыт для атак, нарушения данных, это страшно!!

написать простой веб-сервис CRUD на выбранном вами языке и используйте их в своем приложении для доступа к БД, добавьте некоторую логику аутентификации в свою службу.

существует множество фреймворков веб-служб, которые сделают работу за вас.

нет dobut, Вариант 3-это путь...