我想为我的Unity游戏的Firestore数据库制作rest api。我不想直接连接到数据库,因为游戏逻辑复杂,我想在服务器上控制应用程序逻辑,以避免在客户端进行篡改。
所以我想通过云功能实现每一次写和每一次读请求!没事吧?
用云函数将函数写入Firestore数据库非常简单:
云功能无服务器nodejs索引.js:
exports.helloWorld = functions.https.onCall((data, context) => {
let data = {
name: 'Los Angeless',
state: 'CA',
country: 'USA'
};
// Add a new document in collection "cities" with ID 'LA'
let setDoc = db.collection('xy').doc(data.text).set(data);
return { text : "ok" } });
Unity c#:
public void writeexample()
{
var data = new Dictionary<string, object>();
data["text"] = “example”;
data[“xy”] = “example”;
FirebaseFunctions.DefaultInstance.GetHttpsCallable(“helloWorld”)
.CallAsync(data).ContinueWith((task) =>
{
if (task.IsFaulted)
{
// Handle the error...
}
else if (task.IsCompleted)
{
// DataSnapshot snapshot = task.Result;
IDictionary snapshot = (IDictionary)task.Result.Data;
print(“Result:” + snapshot["text"]);
}
});
}
它运行良好。但如何读取数据库呢?(不是实时的,只有一次简单的查询。(
我读到:从你的应用程序调用函数-云函数文档
这个:获取数据一次-Firestore文档
但我不知道如何通过云功能获取数据。我不想要触发器,我想使用云函数作为rest api。因此,每次对Firestore数据库的读写都是通过云函数实现的。这不可能吗?如果可能,如何?
谢谢!
是的,可以使用从Firestore返回数据的云函数创建REST端点。但我会考虑将其作为一个HTTP可调用函数,就像您当前的helloWorld
函数一样。HTTP可调用功能是对常规REST/HTTP(S(函数的一个精简包装,这使它们更容易从应用程序代码中调用。
例如,要从helloWorld
正在写入的集合中的文档中读取name
字段,您可以在Cloud Functions:中执行以下操作
exports.getNames = functions.https.onCall(async (data, context) => {
let querySnapshot = await db.collection('xy').orderBy("name").limit(3).get();
if (!querySnapshot.empty) {
let names = querySnapshot.documents.map((doc) => doc.data().name);
return names;
}
else {
return [];
}
});
然后你可以用类似于Unity:的结构来命名它
FirebaseFunctions.DefaultInstance.GetHttpsCallable(“getNames”)...