Публиковать данные из браузерного приложения без написания собственного сервера

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

Есть ли веб-сервис, который я могу использовать для этого? Я просмотрел Amazon SQS (простой сервис очередей), но не могу вызывать их REST API изнутри. браузер из-за политики перекрестного происхождения< /а>.

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


person Drew Noakes    schedule 13.11.2012    source источник
comment
Я не знаю взаимосвязи между AWS и SQS, но Amazon объявила в августе, что AWS теперь поддерживает CORS, что означает, что вы можете выполнять запросы Ajax из разных источников по крайней мере с некоторыми сервисами AWS.   -  person apsillers    schedule 14.11.2012
comment
@apsillers, спасибо за информацию, но я не вижу ничего, что указывало бы на то, что это работает для SQS. Я продолжу искать и сообщу, если найду.   -  person Drew Noakes    schedule 14.11.2012
comment
Вы говорите, что у Вас нет доступа к коду, расположенному на хосте. Это потому, что хост вам не принадлежит или вы просто не хотите писать серверный код? Если это последний случай, возможно, вам следует заинтересоваться nodejs/express. Я использую очень простую реализацию для jsonp, используя эти два. Я могу предоставить вам примеры кода, если хотите.   -  person op1ekun    schedule 23.12.2012
comment
Спасибо за предложение @op1ekun, я ценю его. Я немного работал с Node/express раньше, и да, это довольно приятно и просто. Мне действительно просто интересно, можно ли получить общие данные из SPA для администраторов сайта, не требуя специального кода сервера.   -  person Drew Noakes    schedule 24.12.2012
comment
Кажется, это хорошо поддерживается. Прочитайте здесь docs.aws.amazon.com/AWSSimpleQueueService/latest/< /а>   -  person Gokul Muralidharan    schedule 25.06.2013


Ответы (6)


В настоящее время существуют не только веб-службы, но и надежные системы, предоставляющие способ на стороне сервера некоторой логики в ваших приложениях. Они называются поставщиками BaaS или Backend as a Service, обычно для обеспечения некоторой основы для ваших интерфейсных приложений. .

Хотя они имеют множество применений, я собираюсь перечислить наиболее распространенные, на мой взгляд:

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

  • Для прототипирования. Если вы хотите создать красивое приложение, но не хотите кодировать всю внутреннюю логику для данных — за исключением всех операций и системного администрирования, которые представляют — через BaaS-провайдеру вам нужны только хорошие навыки Front End для кодирования самых простых CRUD-приложений, которые вы только можете себе представить. Некоторые BaaS даже позволяют привязывать некоторые алгоритмы сокращения для вызова вашей работы с их API.

  • Для веб-приложений. Когда PaaS (Платформа как услуга) пришла к Town, чтобы облегчить работу бэкенд-разработчикам, чтобы избежать проблем с системным администрированием и эксплуатацией, было просто логично, что то же самое должно было случиться с бэкэндом. Существует множество клонов, демонстрирующих реальную силу этой стратегии.

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

Parse.com

Самые выдающиеся функции Parse предназначены для мобильных устройств; однако в настоящее время Parse содержит невероятное количество API, которые позволяют использовать его в качестве полнофункциональной серверной службы для приложений Javascript, Android и даже Windows 8 (Windows 8 SDK был представлен несколько месяцев назад в этом году).

Как код Parse выглядит в Javascript?

Parse работает через классы и объекты (правда, красиво?), поэтому вы сначала создаете определенный класс (это можно сделать с помощью Javascript, REST или даже диспетчера Data Browser), а затем добавляете объекты в определенные классы.

Во-первых, добавьте Parse в качестве тега скрипта в javascript:

<script type="text/javascript" src="http://www.parsecdn.com/js/parse-1.1.15.min.js"></script>

Затем с помощью заданного идентификатора приложения и ключа Javascript инициализируйте Parse.

Parse.initialize("APPLICATION_ID", "JAVASCRIPT_KEY");

Оттуда это все манипуляции с объектами

var Person = Parse.Object.extend("Person"); //Person is a class  *cof* uppercase *cof* 
var personObject = new Person();
  personObject.save({name: "John"}, {
  success: function(object) {
    console.log("The object with the data "+ JSON.stringify(object) + " was saved successfully.");
  },
  error: function(model, error) {
    console.log("There was an error! The following model and error object were provided by the Server");
    console.log(model);
    console.log(error);
  }
});

А как насчет аутентификации и безопасности?

Parse имеет систему аутентификации на основе пользователей, которая в значительной степени позволяет вам хранить базу пользователей, которые могут манипулировать данными. Если сопоставить данные с информацией о пользователе, вы можете гарантировать, что только данный пользователь может управлять определенными данными. Кроме того, в настройках вашего приложения Parse вы можете указать, что клиентам не разрешено создавать классы, чтобы гарантировать выполнение ненужных вызовов.

Вы ДЕЙСТВИТЕЛЬНО использовали веб-приложение?

Да, это был мой любимый инструмент для прототипа средней точности.

Firebase.com

Главной особенностью Firebase является возможность без лишних хлопот обеспечить работу вашего приложения в режиме реального времени. Вам не нужен сервер MeteorJS, чтобы отправлять push-уведомления в ваше программное обеспечение. Если вы знаете Javascript, вы уже на полпути к тому, чтобы подарить своим пользователям магию реального времени.

Как выглядит Firebase в Javascript?

Firebase работает по принципу REST, и я думаю, что они отлично справляются со структурированием Слава REST. В качестве хорошего примера посмотрите на следующую структуру ресурсов в Firebase:

https://SampleChat.firebaseIO-demo.com/users/fred/name/first

Вам не нужно быть ученым-ракетчиком, чтобы знать, что вы извлекаете имя пользователя «Фред», учитывая, что есть хотя бы одно — обычно вместо имени должен быть UUID, но эй, это пример, дайте мне перерыв-.

Чтобы начать использовать Firebase, как и в случае с Parse, добавьте свой CDN Javascript

<script type='text/javascript' src='https://cdn.firebase.com/v0/firebase.js'></script>

Теперь создайте эталонный объект, который позволит вам использовать Firebase API.

var myRootRef = new Firebase('https://myprojectname.firebaseIO-demo.com/');

Оттуда вы можете создать кучу аккуратных приложений.

var USERS_LOCATION = 'https://SampleChat.firebaseIO-demo.com/users';
var userId = "Fred"; // Username

var usersRef = new Firebase(USERS_LOCATION);
  usersRef.child(userId).once('value', function(snapshot) {
    var exists = (snapshot.val() !== null);
    if (exists) {
        console.log("Username "+userId+" is part of our database");
    } else {
        console.log("We have no register of the username "+userId);
    }
  });

А как насчет аутентификации и безопасности?

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

Вы ДЕЙСТВИТЕЛЬНО использовали веб-приложение?

Эээм... ладно, нет. Я использовал его в расширении Chrome! Это все еще в процессе, но это будет чат в реальном времени внутри расширения Chrome. Разве это не круто? Отлично. Я нахожу это крутым. В любом случае, вы можете просмотреть другие замечательные примеры для Firebase на их странице примеров.


В чем магия этих сервисов? Если вы прочитали ваше внедрение зависимостей и Тестирование фиктивных объектов, в какой-то момент вы сможете полностью заменить все эти сервисы своими собственными с помощью поставщика веб-сервисов REST.

Поскольку эти службы были созданы для использования внутри любого приложения, они готовы к CORS. Как указывалось ранее, я успешно использовал их оба из нескольких доменов без каких-либо проблем (я даже пытаюсь использовать Firebase в расширении Chrome, и я уверен, что скоро добьюсь успеха).

И в Parse, и в Firebase есть менеджеры Data Browser, что означает, что вы можете видеть данные, с которыми работаете, через простой веб-браузер. В качестве окончательного заявления об отказе от ответственности я не имею никакого отношения ни к одному из этих сервисов, кроме лица, которое Джеймс Таплин (Firebase Co- основатель) был достаточно замечательным, чтобы предоставить мне бета-доступ к Firebase.

person jjperezaguinaga    schedule 26.12.2012
comment
Это отличный ответ. Большое Вам спасибо. Я собираюсь вернуться к этому в новом году (всего через несколько дней) и дам вам знать, как у меня дела. - person Drew Noakes; 26.12.2012
comment
Рад, что помог, а пока наслаждайтесь праздниками :) - person jjperezaguinaga; 26.12.2012

На самом деле вы МОЖЕТЕ использовать SQS из браузера, даже без CORS, если вам нужен браузер только для отправки сообщений, а не для их получения. Предупреждение: это кладж, который заставит моих профессоров компьютерных наук плакать.

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

Предполагая, что вы используете jquery, ваша очередь https://sqs.us-east-1.amazonaws.com/71717171/myqueue и позволяет любому опубликовать сообщение, следующее отправит сообщение с телом «HITHERE» в очередь:

$.ajax({
  url: 'https://sqs.us-east-1.amazonaws.com/71717171/myqueue' +
       '?Action=SendMessage' +
       '&Version=2012-11-05' +
       '&MessageBody=HITHERE'
})

В консоли будет ошибка о том, что запрос не выполнен, но сообщение все равно появится в очереди.

person Casey Rodarmor    schedule 30.03.2013

Рассматривали ли вы JSONP? Это один из способов вызова междоменных скриптов из javascript без использования одной и той же политики происхождения. Однако вам нужно будет придется настроить какой-нибудь скрипт для отправки вам данных. Javascript просто не подходит для этой задачи.

person Soumya    schedule 13.11.2012
comment
Проблема в том, что Amazon SQS, похоже, не поддерживает параметр обратного вызова, необходимый для работы JSONP. - person Drew Noakes; 14.11.2012

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

Если презентация не так важна, вы можете просто использовать встроенный Google Форма электронной таблицы.

person antila    schedule 21.12.2012
comment
Спасибо за ответ. Похоже, это может сработать, хотя у меня не будет возможности проверить это в течение нескольких дней. Также часть моих данных представляет собой большое (несколько МБ) изображение, которое может быть либо двоичным, либо закодированным в base64 PNG. Не уверен, что электронные таблицы Google допускают огромные блоки данных. - person Drew Noakes; 23.12.2012
comment
Для полноты картины вот ссылка на API электронных таблиц: developers.google.com/google-apps/ электронные таблицы - person Drew Noakes; 25.12.2012
comment
Похоже, что этот вариант потребует, чтобы данные аутентификации были доступны на веб-странице, чтобы выполнить вызов на сервер. Это позволит любому получить полный доступ к хранилищу данных, что невозможно. Мне нужны неаутентифицированные записи и аутентифицированные чтения. - person Drew Noakes; 25.12.2012

А как насчет mailto:[email protected] ? ихихи

Между тем, вы можете включить некоторые бесплатные хостинги, такие как Altervista или Heroku или что-то подобное им .. чтобы вы могли подключиться к их серверу, если я помню, что эти бесплатные сервисы позволяют servers p2p, так что you can create a sort of personal web services and push ajax requests as well, очевидно, их серверы медленные для бесплатных учетных записей, но Я думаю, что этого достаточно, если у вас не так много пользовательского трафика, иначе вам следует включить какое-нибудь лучшее решение VPS, хостинг или облачное решение.

person itsme    schedule 24.12.2012
comment
Ссылки Mailto не обеспечивают наилучшего взаимодействия, и мне может потребоваться отправить очень длинное тело электронной почты с данными изображения в кодировке base64. - person Drew Noakes; 24.12.2012
comment
Сейчас я стараюсь вообще не думать о хостинге. В остальном сайт невероятно прост, поэтому кажется излишним. Если такой услуги не существует, из нее может получиться хороший продукт. - person Drew Noakes; 24.12.2012
comment
@DrewNoakes да, это правда, а как насчет pusher[dot]com? пытаться - person itsme; 25.12.2012

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

person edef    schedule 24.12.2012
comment
Можно ли будет отправлять данные в их бесплатный экземпляр БД из браузера? Вы пробовали это? - person Drew Noakes; 24.12.2012
comment
Да, это полноценный CouchDB. Используйте обычные API-интерфейсы CouchDB или функцию обновления. - person edef; 09.01.2013