2016-01-24 4 views
2

У меня есть приложение для рельсов 4, которое использует несущую и Amazon s3 для загрузки изображений. У меня также есть api api для моего мобильного приложения, чтобы поговорить с базой данных.Приложение Rails и приложение для Android, подключенное к ведерке s3

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

Прямо сейчас, я рассматриваю один из двух вариантов.

  1. Приложение для Android отправляет изображение прямо в тот же самый амазон s3, который использует веб-сайт, а затем отправляет запрос на отправку в приложение rails с URL-адресом изображения, который необходимо сохранить.
  2. Приложение android отправляет все изображение через запрос на отправку, а приложение rails обрабатывает все остальное (сохраняя путь и отправляя изображение в ведро amazon).

Хотелось бы получить некоторую обратную связь относительно наилучшего способа сделать это - или если есть другой способ. Все еще новое для apis и наличие веб-приложения и мобильного приложения. Если вы уже знаете документацию по этому вопросу, пожалуйста, дайте мне знать. Thnx!

ответ

3

Второй вариант - это более простая ставка.

Первый вариант зависит от мобильных устройств, чтобы сохранить согласованность данных, что очень сложно на практике - ну, возможно, «невозможно», по крайней мере, ненадежно. Мобильное устройство теряет связь при произвольных таймингах, и когда это происходит между загрузкой S3 и вызовом API, согласованность теряется. Эта согласованность может не иметь особого значения для целевого приложения (это зависит от того, что вы делаете с API), но это часто является существенным свойством, просто знать, что такое состояние системы, и при отладке. Делегирование хранилища S3 в API перемещает проблему согласованности в одну точку, где связь более надежна.

Второй вариант предлагает дополнительные преимущества. Просматривая свой «проприетарный» API, неважно, какое фактическое хранилище вы используете. Сегодня S3, но завтрашние цены могут привести вас к другому бэкэнду. За API, который абстрагирует детали хранилища, вы сохраняете свободу изменять, когда захотите или должны.

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

Аналитика также может быть более комплексной или мелкозернистой, проходящей через API.

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

+1

Благодарим вас за подробный ответ. Пойдет по этому маршруту. – Kathan

1

Я рекомендую вам первый вариант. Есть две причины:

  1. Carrierwave uploades изображения и сохраняет модели в базу данных одновременно. Это означает, что если вы загружаете изображения без несущей, несущая волна будет загружать изображения снова, когда модель будет сохранена.

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

Поэтому я считаю, что если вы выберете другой вариант, это будет сложно.