ServerLess之雲函數實踐-天氣API

  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便可完成一個後端服務的構建

相關文章
相關標籤/搜索