从浏览器应用程序发布数据而无需编写自己的服务器

时间:2012-11-13 21:56:18

标签: javascript web-services single-page-application

我需要用户能够将单页浏览器应用程序(SPA)中的数据发布给我,但我不能将服务器端代码放在主机上。

我是否可以使用这项服务?我查看了Amazon SQS(简单队列服务),但我无法在浏览器due to cross origin policy内调用他们的REST API。

我现在支持开发而不是稳健性,所以即使只是收到一封电子邮件也没关系。我不确定该网站是否会流行起来。如果是,那么我将开发一个服务器端组件并移动主机。

6 个答案:

答案 0 :(得分:5)

不仅有Web服务,而且现在有强大的系统可以为应用程序提供服务器端逻辑的方法。它们被称为BaaS或Backend as a Service提供商,通常为您的前端应用程序提供一些支持。

虽然它们有多种用途,但我会列出我认为最常见的内容:

  • 适用于移动应用 - 您无需为每个代码设备学习API,您可以使用标准平台为您的应用程序存储逻辑和数据。

  • 用于原型设计 - 如果您想创建一个光滑的应用程序,但您不想编写所有后端逻辑来处理所有操作和数据系统管理代表 - 通过BaaS提供商,您只需要良好的前端技能来编写您能想象到的最简单的CRUD应用程序。有些BaaS甚至允许您绑定一些Reduce algorithms来调用您的API执行。

  • 对于网络应用程序 - 当PaaS(Platform as a Service)来到城镇以减轻Backend End开发人员的工作时,为了避免系统管理和操作的麻烦,它只是逻辑,后端会发生同样的事情。有很多clones展示了这种策略的真正力量。

这一切都很神奇,但我还没有提到它们中的任何一个。我将列出我最了解并实际用于项目的那些。可能有很多,但据我所知,这个人已经满足了我的大部分新闻,无论是以前提到过的任何新闻。

Parse.com

Parse最突出的功能针对移动设备;然而,现在Parse包含了大量的API,允许你将它用作Javascript,Android甚至Windows 8应用程序的全功能后端服务(几个月前的Windows 8 SDK是introduced )。

Parse代码如何在Javascript中查找?

Parse通过类和对象工作(非常漂亮吗?),所以你首先要创建一个特定的类(可以通过Javascript,REST甚至数据浏览器管理器完成),然后将对象添加到特定的类中

首先,将Parse添加为javascript中的脚本标记:

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

然后,通过给定的应用程序ID和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应用程序的设置中,您可以指定不允许任何客户端创建类,以确保执行必要的调用。

您是否真的在网络应用程序中使用过?

是的,这是我保持中等保真度prototype的首选工具。

Firebase.com

Firebase的主要功能是能够为您的应用程序提供实时,而不会有任何麻烦。您不需要MeteorJS服务器才能将推送通知带入您的软件。如果您了解Javascript,那么您可以将实时魔术带给您的用户。

Firebase在Javascript中的外观如何?

Firebase以REST方式工作,我认为他们在构建Glory of REST方面做得非常出色。举个好例子,看一下Firebase中的以下资源结构:

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

你不需要成为一名火箭科学家才能知道你正在检索用户的第一个名字&#34;弗雷德&#34;给那里至少一个 - 通常应该有一个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 released their Security API大约两周前!我还没有去探索它,但我确信它填补了大部分空白,让随机人员可以根据自己的目的使用你的参考。

您是否真的在网络应用程序中使用过?

Eeehm ......好吧,不。我在Chrome Extension中使用它!它仍在进行中,但它将成为Chrome扩展程序内的实时聊天。艾那很酷吗?精细。我觉得很酷。无论如何,您可以在examples page中浏览Firebase的更多精彩示例。


这些服务的神奇之处是什么?如果您阅读了Dependency InjectionMock Object Testing,那么您可以通过REST Web服务提供商完全替换所有这些服务。

由于这些服务是为了在任何应用程序中使用而创建的,因此它们已准备就绪。如前所述,我已经成功地使用了多个域中的两个域而没有任何问题(我甚至尝试在Chrome扩展程序中使用Firebase,我确信我很快就会成功)。

Parse和Firebase都有数据浏览器管理器,这意味着您可以通过简单的Web浏览器查看您正在操作的数据。作为最终的免责声明,除了James Taplin(Firebase联合创始人)足以让我获得对Firebase的Beta访问权之外,我与任何其他服务都没有任何关系。

答案 1 :(得分:4)

您实际上可以使用浏览器中的SQS,即使没有CORS,只要您只需要浏览器发送消息,而不是接收消息。 警告:这是一个让我的CS教授哭泣的因素。

当您通过javascript执行GET请求时,浏览器将始终执行请求,但是,如果来自同一来源(协议,主机,端口),您将只能访问该响应。这是您的乘车票,因为消息可以仅通过GET发布到SQS队列,并且他们真的关心响应吗?

假设您正在使用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'
})

控制台中的错误是说请求失败,但消息仍会显示在队列中。

答案 2 :(得分:1)

您考虑过JSONP了吗?这是从javascript调用跨域脚本而不会运行到同一源策略的一种方法。不过,您将拥有在某处设置某个脚本来向您发送数据。 Javascript不能胜任这项任务。

答案 3 :(得分:1)

根据您要发送的数据类型以及您要使用的内容,解决问题的一种方法是使用Ajax将数据发布到Google电子表格。但是要完成它有点棘手。Here是关于它的另一个stackoverflow问题。

如果演示文稿不重要,您可以使用嵌入式Google Spreadsheet Form

答案 4 :(得分:1)

mailto:youremail@goeshere.com怎么样? ihihi

与此同时,您可以开启一些免费托管服务,例如AltervistaHeroku,或者像其他人一样......以便您可以连接到他们的服务器,如果我记得这些免费服务允许{{1} },所以servers p2p,显然他们的服务器对于免费帐户来说很慢,但我认为如果你没有那么多用户流量就应该这样做,否则你应该打开一些更好的VPS或托管或云解决方案。

答案 5 :(得分:1)

也许CouchDB可以提供你所追求的东西。 IrisCouch提供免费的CouchDB实例。将其锁定,以便用户无法查看文档并具有合理的验证功能,并且您可以轻松地将REST数据放入其中。