關注我的個人博客,發掘更多的內容
ServerLess之雲函數實踐-天氣API
前言
雲計算是大勢所趨
Serverless 架構即“⽆服務器”架構,它是一種全新的架構方式,是雲計算時代⼀種⾰命性的架構模式
FaaS(Function as a Service - 函數即服務) 是在無狀態容器中運行的事件驅動型計算的執行模型
☁️雲函數算是FaaS的一種具體的形式,由雲商(騰訊雲,阿里雲,七牛雲等等)提供計算平台,開發者只需關注函數邏輯的實現,將服務器相關的配置管理工作統統交給雲商去做,不再花大精力去管理服務器
我們只需要提供一段代碼,由雲商研制的 FaaS 方案幫我們選擇語言對應技術棧的最佳實踐,基於內置的擴展機制按實際需要,進行動態擴展計算資源,輕松部署服務到公網,並提供可靠的監控、報警保障,不需要以前一樣,服務器資源不是大部分時間處於閑置狀態,就是遇到超大瀏覽需要緊急擴容
給 FaaS 一個函數,就能上線一個高可用的服務
簡單的服務接口開發的專業性要求降低了,前端有了更大的發揮空間,包括但不限於:
- BFF(Backend For Frontend)
- SSR(Server-Side Rendering)
上面簡單的介紹了一下“雲函數”,有一點抽象,下面就結合實操,來搞一個”實用的“

☁️搞一個簡單的天氣查詢API
就像這樣的:點我體驗
參數:cityId 地區參照表
所使用到的技術與平台
下面開始手把手教程
騰訊雲側
1. 注冊賬號
注冊騰訊雲賬號並登錄
2. 進入控制台
點擊右上角進入控制台

3. 雲函數-函數服務
左上角選擇雲產品,輸入雲函數,選擇 雲函數-函數服務

4. 新建雲函數
新建一個雲函數

5. 錄入基本信息
- 符合規范的函數名稱
- 環境選擇一個Node.js的環境
- 選擇空白函數
- 然后下一步

6. 完成創建
直接點擊完成,什么都不更改

7. 觸發器
然后來到這個界面,點擊觸發管理

8. 創建觸發器
創建觸發器,填寫相關信息
- 觸發方式-API網關觸發
- 請求方法-GET
- 鑒權方法-免鑒權

9. 大功告成
體驗一下生成的觸發器鏈接

10. 觀察接口
觀察響應結果與我們的代碼
響應結果

我們的雲函數代碼

關注紅色框中的內容
- 執行方法:index.main_handler
- index 對應的就是
index.js - main_handler就是就是index.js中對外暴露的
main_handler方法
- index 對應的就是
再看代碼
'use strict';
exports.main_handler = async (event, context) => {
console.log("Hello World")
console.log(event)
console.log(event["non-exist"])
console.log(context)
return event
};
根據上上圖返回的結果可知其對應的是event里面的內容: 即我們可以在event中取到我們請求的參數,header,body等信息,便於我們執行后續邏輯
context的內容(console.log的內容)在哪里看?
11. 日志查詢

在日志查詢面板可以查詢到我們接口的調用信息,響應狀態與log的內容
12. 安裝依賴的模塊
這個和本地安裝差不多,一個敲命令,一個點按鈕
我們使用本地終端創建一個package.json文件
npm init -y

package.json
{
"name": "faas",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC"
}
如安裝axios,本地執行安裝先
yarn add axios
# or
npm i axios
此時的package.json
{
"name": "faas",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"axios": "^0.21.0"
}
}
在平台上創建一個 package.json文件,並把上述內容粘貼進去,ctrl/command + S 保存修改的內容


選擇在線安裝依賴,然后點擊保存

安裝完成后 會出現 node_modules目錄

JS雲函數創建相關流程,差不都陳述完畢
下面開始我們的代碼編寫
天氣雲函數編寫
代碼同步到線上的方式
- 可以本地編輯后上傳文件
- 使用騰訊雲的cli工具上傳
- 復制粘貼
這里比較簡單我們就復制粘貼了
先簡單編寫一下大體結構,然后點擊保存,再訪問剛剛的觸發器鏈接觀察返回的結果
index.js
'use strict';
const http = require('axios').default
function getNowWeather(cityId = 3) {
// 待編寫
return {
data:{
cityId
}
}
}
exports.main_handler = async (event, context) => {
// 結構取得url中傳遞的參數
const { queryString: { cityId } } = event
return getNowWeather(cityId)
};
下面實現getNowWeather的邏輯就要用到阿里雲的服務了
阿里雲側
先白嫖個服務
根據其文檔中的請求示例,我們先構建出 Node版本的方法
const http = require('axios').default
function getNowWeather(cityId = 3) {
const token = ''
const appcode = ''
const nowStatusURL = 'http://freecityid.market.alicloudapi.com/whapi/json/alicityweather/briefcondition' // 精簡實況的請求URL
const data = `cityId=${cityId}&token=${token}` // 請求參數
const headers = { // header
'Authorization': `APPCODE ${appcode}`,
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
}
// 發送請求
return http.post(nowStatusURL, data, {
headers
}).then(res => res.data)
}
控制台->API網關->華北2(北京)

為了節約查找token與appcode的時間,下面列一下步驟(吐槽,阿里雲的文檔太攔了,不方便信息定位)
token與appcode
API網關頁面地址
- token: 應用管理->選擇一個應用->已授權API列表->選擇自己要查看的API->點擊調試API->調試面板的token參數即是所需參數
- appcode: 應用管理->選擇一個應用->AppCode面板


最終代碼

index.js
'use strict';
const http = require('axios').default
function getNowWeather(cityId = 3) {
const token = ''
const appcode = ''
const nowStatusURL = 'http://freecityid.market.alicloudapi.com/whapi/json/alicityweather/briefcondition' // 精簡實況的請求URL
const data = `cityId=${cityId}&token=${token}` // 請求參數
const headers = { // header
'Authorization': `APPCODE ${appcode}`,
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
}
// 發送請求
return http.post(nowStatusURL, data, {
headers
}).then(res => res.data)
}
exports.main_handler = async (event, context) => {
const {queryString:{cityId}} = event
return await getNowWeather(cityId)
};
觸發器鏈接
最后
到此一個雲函數就開發完畢了
可以感覺到,如果熟悉創建流程了,只需要幾分鍾就能創建一個提供服務的API,極大的節約了成本
不懂服務端部署,服務器運維,Linux的開發者可以通過 雲函數+雲數據庫(關系數據庫,非關系數據庫) 快速搭建一個后端服務
文件存儲服務可以使用OSS
開發者只需要通過雲函數調用各服務提供的API即可完成一個后端服務的構建
參考
