CouchApp без серверной части или CouchDB с проблемами xdomain? - PullRequest
6 голосов
/ 12 ноября 2010

Я уже некоторое время играю с CouchDB и CouchApp.Я планирую использовать его для нового проекта веб-сайта, над которым я работаю.

  1. С точки зрения масштабируемости мне нравится идея CouchApp.

    Недостатком являетсячто без серверного кода есть некоторые вещи (например, проверка подлинности oAuth), которые трудно сделать на стороне клиента.В какой-то момент я уверен, что мне понадобится какой-нибудь серверный код некоторого описания - я думаю, что тогда вы можете посмотреть на Node.js, но лучше не делать этого.

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

Так есть ли у кого-нибудь решение одного из этих двух недостатков?

Можете ли вы каким-то образом обслуживать серверный код (даже PHP будет выигрышным) из CouchApp или вы можете каким-то образом использовать отдельный сайт для обслуживания своих страниц, нопреодолеть междоменную проблему?

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

Ваше мнение приветствуется.

Ответы [ 2 ]

16 голосов
/ 14 ноября 2010

Поскольку CouchDB использует API на основе HTTP, существует несколько способов «смешать и сопоставить» код на стороне сервера (node.js, PHP и т. Д.) С вашим CouchApp.

Я разбиваю параметры натри категории:

  1. Во-первых, теперь у вас есть 2-уровневая архитектура: Browser + CouchApp, обслуживаемый из CouchDB.Это отличное решение для приложений, которым требуется только то, что может предложить браузер и CouchDB, но вам понадобится другой уровень, как только вы столкнетесь с необходимостью отправлять электронную почту, изменять размер изображений или получать данные из другой базы данных, которая неиметь HTTP API (MySQL, MongoDB и т. д.).
  2. Далее следует 3-х уровневая архитектура: браузер + Apache / PHP (или аналогичный стек) + CouchDB.Это более «традиционный» вариант (т.е. LAMP).Это хорошо для постепенного перехода на CouchDB, но в долгосрочной перспективе это может быть затруднительно из-за необходимости все маршрутизировать через второй HTTP-сервер (возможно, в качестве прокси-сервера) или серверный язык сценариев, такой как PHP.
  3. Last,и мой любимый, это 2.5-уровневая архитектура: Browser + CouchDB + внешние или _changes «действия» на основе канала.В этом случае PHP (или аналогичный) действует как поставщик услуг для CouchDB.Действия могут быть инициированы либо с помощью PHP, отслеживающего фид _changes для определенных типов документов и их изменений (например, загрузка изображений, документ сообщения электронной почты), либо CouchDB может быть настроен на «пингование» обработчика _external для дальнейшей обработки документаили его вложения.По сути, именно так работает couchdb-lucene, наблюдая за обновлениями и действуя с ними по мере их появления или через регулярные промежутки времени.

Подробнее о обработчиках _changes и _external можно узнать ниже:

Для чего стоит я буду обсуждать эти три варианта в ближайшую средув веб-трансляции PHP и CouchDB .Ваши вопросы станут ценным дополнением к обсуждению в конце веб-трансляции.

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

1 голос
/ 10 августа 2011

Отличный ответ от BigBlueHat, но у меня есть еще один возможный вариант:

Преодоление междоменной проблемы, что позволяет вам обслуживать страницы с любого веб-сервера, а также позволяет браузеру напрямую взаимодействовать с CouchDB (который может находиться на другом сервере).

Междоменное ограничение, установленное браузерами, не так сложно обойти. Мне известны два основных метода: JSONP и CORS.

JSONP маскирует каждый запрос как запрос «сценария» (так как запросы сценариев исключаются из междоменного правила). Это работает только для GET, а не POST или PUT или чего-либо еще. Вы можете сделать это с помощью jQuery.

CORS - это «Cross Source Resource Sharing», и это просто специальный HTTP-заголовок, который должен быть реализован на сервере (в данном случае couchdb), который сообщает браузеру, что все в порядке - он не против обработки запросов которые приходят из другого домена. Я проверил это, и оно работает, но могут быть проблемы с безопасностью - я не уверен.

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

...