我想使用AngularJS和Firebase创建一个网络应用,但只有部分应用需要Firebase提供的3向绑定。其他部分只能在当前数据中找到一次绑定,而不会不断更新它。换句话说,正常的REST API就足够了。
Thinkster AngularJS-Firebase tutorial显示了如何使用$resource
访问此Firebase REST API。此方法不需要打开与Firebase的并发连接,只需获取当前数据而不进行更新:
app.factory('Post', function ($resource) {
return $resource('https://FIREBASE-URL.firebaseIO.com/posts/:id.json');
});
使用简单登录服务登录Firebase后是否可以执行这些请求,但是不保持Firebase连接打开。例如:
//Does this already open a connection to FireBase?
var ref = new Firebase('https://FIREBASE-URL.firebaseIO.com');
//Login to FireBase
ref.authWithPassword({
email : "bobtony@firebase.com",
password : "correcthorsebatterystaple"
}, function(error, authData) {
if (error === null) {
// Can we close the connection now while still leaving the user authenticated?
Firebase.goOffline();
} else {
console.log("Error authenticating user:", error);
}
});
如果我现在要向REST API发出请求:
auth
变量吗?让事情变得更清楚:
换句话说,我的问题是:
是否可以在不使用SDK的情况下使用Firebase作为REST API来验证用户客户端是否使用Firebase的安全规则?
答案 0 :(得分:1)
这是一个极度过早优化的案例,它也是有害的而不是有用的。
串联使用REST API和SDK没有任何优势。如果您已经下载了SDK并且已经建立了套接字连接,那么重用现有连接会更高效,更便宜,也更简单。 SDK还针对REST API进行了大量优化,并且更好地处理了临时断开连接和网络错误。通过使用REST API,您实际上将使您的生活更加难以获得零收益。
如果您的目标是在不收听更新的情况下完全下载数据一次,只需使用once代替。
app.controller('ctrl', function($scope) {
var ref = new Firebase('https://FIREBASE-URL.firebaseIO.com');
ref.once('value', function(snap) {
$scope.data = snap.val();
$scope.apply();
});
});
创建ref()不会立即创建连接。第一次验证,写入或读取数据时,就建立了连接。
通过SDK进行身份验证对REST查询完全没有帮助。您需要将?auth=TOKEN
传递到URL,其中TOKEN是您手动创建的身份验证令牌(完全没有连接到SDK简单登录身份验证事件)。
如果您不想要实时功能,请根本不使用SDK。只需使用$ http或$ resource并通过.json URL连接。