[英]Firebase Cloud Functions versioning
我正在使用Firebase Cloud Functions,並且正在嘗試對api進行版本控制。 我正在按照所有教程的建議使用Express。 但是,通過此解決方案,我們使用Firebase Hosting代替Cloud Functions。
托管: https : //xxxx.firebaseapp.com
雲功能: https : //xxxx.cloudfunctions.net
最接近我正在尋找的解決方案是這個 。
const app1 = express();
app1.use(cors({ origin: true }));
app1.get("*", (request, response) => {
if(request.url.includes("/v1/")){
response.send("V1: "+request.path);
}
else{
response.send("V2: "+request.path);
}
});
const stats = functions.https.onRequest(app1);
module.exports = {
stats
};
但是,您只能在Firebase Cloud Functions中看到一個功能:
https://xxxx.cloudfunctions.net/stats
另外,您只能處理一種HTTP請求(GET,POST等)。
我正在尋找的是Firebase Cloud Functions中具有的功能:
https://xxxx.cloudfunctions.net/stats/v1/ (including GET, POST, PUT or in another case separate functions with “/:userId” “/save”, etc)
https://xxxx.cloudfunctions.net/stats/v2/
https://xxxx.cloudfunctions.net/item/v1/
使用Cloud Functions可以做到嗎?
預計您只會看到一個具有從index.js導出的名稱的函數。 所有URL必須通過該功能錨定。 您似乎希望/ stats / *和/ items / *都可以路由您的函數,但這並不是它的工作方式。
如果要使用不同的路徑前綴,則可能需要使用不同的函數來處理它們,或者都需要為它們使用單個公共前綴。 例如,您可以導出一個名為“ api”的函數,然后使用它來處理所有不同類型的查詢:
/api/stats/...
/api/items/...
您可能還需要考慮為API的每個不同版本使用不同的功能(Express應用程序),並讓Firebase Hosting將不同版本路由到其他應用程序,而不是讓單個應用程序在運行時檢查版本。
每個路徑可以指向不同的功能(或Express應用程序)。 您可以在firebase.json
文件中進行配置,如下所示。 您根本不需要單獨的域。 以下firebase.json
結果
https://example.com is handled by firebase hosting https://example.com/v1 is handled by firebase function https://example.com/v2 is handled by firebase function https://example.com/v3 is handled by firebase function
{
"firestore": {
"rules": "firestore.rules",
"indexes": "firestore.indexes.json"
},
"hosting": {
"public": "public",
"cleanUrls": true,
"trailingSlash": false,
"rewrites": [
{
"source": "/v1",
"function": "v1"
},
{
"source": "/v2",
"function": "v2"
},
{
"source": "/v3",
"function": "v3"
}
],
"ignore": [
"firebase.json",
"**/.*",
"**/node_modules/**"
]
},
"storage": {
"rules": "storage.rules"
},
"functions": {
"source": "functions"
}
}
最后,我以這種方式解決了它:
const express = require("express")
const getUserFunctions = express();
getUserFunctions.get("/stats", (request, response) => {
...
...
});
const v1 = functions.https.onRequest(getUserFunctions);
module.exports = {
v1,
v2
};
因此,端點將是這樣的:
https://xxxx.cloudfunctions.net/v1/stats
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.