ServerLess之雲函數實踐-天氣API前端
前言node
雲計算是大勢所趨ios
Serverless 架構即「⽆服務器」架構,它是一種全新的架構方式,是雲計算時代⼀種⾰命性的架構模式數據庫
FaaS(Function as a Service - 函數即服務) 是在無狀態容器中運行的事件驅動型計算的執行模型npm
☁️雲函數算是FaaS的一種具體的形式,由雲商(騰訊雲,阿里雲,七牛雲等等)提供計算平臺,開發者只需關注函數邏輯的實現,將服務器相關的配置管理工做通通交給雲商去作,再也不花大精力去管理服務器json
咱們只須要提供一段代碼,由雲商研製的 FaaS 方案幫咱們選擇語言對應技術棧的最佳實踐,基於內置的擴展機制按實際須要,進行動態擴展計算資源,輕鬆部署服務到公網,並提供可靠的監控、報警保障,不須要之前同樣,服務器資源不是大部分時間處於閒置狀態,就是遇到超大瀏覽須要緊急擴容axios
給 FaaS 一個函數,就能上線一個高可用的服務後端
簡單的服務接口開發的專業性要求下降了,前端有了更大的發揮空間,包括但不限於:api
BFF(Backend For Frontend)服務器
SSR(Server-Side Rendering)
上面簡單的介紹了一下「雲函數」,有一點抽象,下面就結合實操,來搞一個」實用的「
☁️搞一個簡單的天氣查詢API
就像這樣的:點我體驗
參數:cityId 地區參照表
所使用到的技術與平臺
Node.js (雲函數選用JavaScript語言)
騰訊雲 - 免費的雲函數服務
阿里雲 - 免費的墨跡天氣查詢服務
下面開始手把手教程
騰訊雲側
1. 註冊帳號
註冊騰訊雲帳號並登陸
https://cloud.tencent.com/
2. 進入控制檯
點擊右上角進入控制檯
3. 雲函數-函數服務
左上角選擇雲產品,輸入雲函數,選擇 雲函數-函數服務
4. 新建雲函數
新建一個雲函數
5. 錄入基本信息
符合規範的函數名稱
環境選擇一個Node.js的環境
選擇空白函數
而後下一步
6. 完成建立
直接點擊完成,什麼都不更改
7. 觸發器
而後來到這個界面,點擊觸發管理
8. 建立觸發器
建立觸發器,填寫相關信息
觸發方式-API網關觸發
請求方法-GET
鑑權方法-免鑑權
9. 大功告成
體驗一下生成的觸發器連接
10. 觀察接口
觀察響應結果與咱們的代碼
響應結果
咱們的雲函數代碼
關注紅色框中的內容
執行方法:index.main_handler
index 對應的就是 index.jsmain_handler就是就是index.js中對外暴露的 main_handler方法
再看代碼
'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的邏輯就要用到阿里雲的服務了
阿里雲側
先白嫖個服務
阿里雲-免費版氣象天氣服務(cityid)-墨跡天氣
根據其文檔中的請求示例,咱們先構建出 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)
}
購買服務後根據文檔找到token與appcode便可
控制檯->API網關->華北2(北京)
爲了節約查找token與appcode的時間,下面列一下步驟(吐槽,阿里雲的文檔太攔了,不方便信息定位)
token與appcode
API網關頁面地址
token: 應用管理->選擇一個應用->已受權API列表->選擇本身要查看的API->點擊調試API->調試面板的token參數便是所需參數
appcode: 應用管理->選擇一個應用->AppCode面板
鄭州作人流多少錢http://www.hnzzxb.com/
最終代碼
鄭州人流醫院http://www.zztjyyfk.com/
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便可完成一個後端服務的構建