開啟云函數(shù)HTTP觸發(fā)功能
EMAS Serverless云函數(shù)支持由HTTP請求觸發(fā)云函數(shù)調(diào)用的功能,本文介紹如何開啟云函數(shù)HTTP觸發(fā)功能。
當(dāng)開啟某一函數(shù)的HTTP觸發(fā)功能后,只要使用HTTP請求就可以訪問到函數(shù),開發(fā)者需要關(guān)注業(yè)務(wù)安全和資源安全。
業(yè)務(wù)安全:開發(fā)者需在云函數(shù)代碼中做好權(quán)限控制和安全防護(hù),避免未授權(quán)訪問觸發(fā)敏感操作。
資源安全:云函數(shù)開啟了HTTP訪問后,如果遇到大量惡意訪問,消耗云函數(shù)資源,開發(fā)者可以將云函數(shù)的觸發(fā)路徑設(shè)置為空或關(guān)掉該服務(wù)空間的HTTP觸發(fā)功能,停止HTTP觸發(fā)支持。
開啟方法
開啟云函數(shù)HTTP觸發(fā)功能,您需要開啟Space的觸發(fā)功能且配置云函數(shù)的HTTP觸發(fā)路徑。
開啟Space的HTTP觸發(fā)功能
登錄EMAS管理控制臺。
查找您的項目,單擊項目,進(jìn)入EMAS概覽頁。
在頂部導(dǎo)航欄,選擇平臺服務(wù)。
在左側(cè)導(dǎo)航欄,選擇。
在界面右上角選擇當(dāng)前服務(wù)空間,如emasDev。
單擊HTTP觸發(fā)配置頁簽,將HTTP觸發(fā)設(shè)置右側(cè)的更改狀態(tài)設(shè)置為開啟。系統(tǒng)會為開啟HTTP觸發(fā)功能的Space分配一個默認(rèn)域名
(DefaultEndpoint)
,供HTTP觸發(fā)使用。
開啟云函數(shù)的HTTP觸發(fā)功能
返回控制臺主頁,單擊云函數(shù)列表頁簽。
選擇任意一個云函數(shù),單擊函數(shù)名稱,如test。打開云函數(shù)頁面。
選擇觸發(fā)頁簽,單擊HTTP路徑觸發(fā)右側(cè)的編輯按鈕。
在編輯云函數(shù)頁面,填寫觸發(fā)路徑。如下圖所示。
HTTP觸發(fā)函數(shù)執(zhí)行
用戶訪問
https://${DefaultEndpoint}${HttpTriggerPath}
,即可觸發(fā)對應(yīng)的云函數(shù)執(zhí)行。
限制說明
請求路徑不能以
/
結(jié)尾,同一個Space下面的云函數(shù)的請求路徑不能重復(fù),請求路徑只支持(/)、(-)、(_)、(.)、字母和數(shù)字組合,請求路徑最長不超過128個字符。請求方法僅支持以下四種,其余方法會被忽略。
GET
POST
PUT
DELETE
請求時Body的Content-Type僅支持以下三類,允許沒有Body的請求,即沒有Content-Type。其余Content-Type類型會被拒絕。
application/json
application/x-www-form-urlencoded
text/*
通過HTTP觸發(fā)的響應(yīng),都會添加固定的Header,即
Content-Disposition: attachment
,此字段會使得返回結(jié)果在瀏覽器中以附件的方式下載。當(dāng)前此字段無法覆蓋,后續(xù)支持使用自定義域名之后,可以避免該問題。請求Body大小限制,不能超過1M。
響應(yīng)Body大小限制,不能超過1M。
云函數(shù)入?yún)⒄f明
在云函數(shù)中,通過ctx.args
來獲取請求時的內(nèi)容。各參數(shù)的詳細(xì)解釋如下:
{
path: 'HTTP請求路徑,如 /hello',
httpMethod: 'HTTP請求方法,如 GET',
headers: {HTTP請求頭,鍵值對形式},
queryStringParameters: {HTTP請求的Query,鍵值對形式},
body: 'HTTP請求體',
isBase64Encoded: 'true or false,表示body是否為Base64編碼,當(dāng)前只會有false'
}
云函數(shù)返回值說明
云函數(shù)返回時,可以返回string、object、number、boolean等類型的數(shù)據(jù),或者返回自定義響應(yīng),隨后小程序Serverless會將返回值轉(zhuǎn)化為正常的HTTP響應(yīng)。
返回string
當(dāng)服務(wù)端返回的Content-Type是text/plain。
例如云函數(shù)返回:
'hello world!'
則最終的響應(yīng)為:
HTTP/2 200 date: Mon, 23 Mar 2020 10:12:41 GMT content-type: text/plain content-length: 12 content-disposition: attachment request-id: ac14000d1584958361033101870 hello world!
返回object、number或boolean
當(dāng)服務(wù)端返回的Content-Type是application/json。
例如云函數(shù)返回:
{ "keyString": "value1", "keyNumber": 1234 }
則最終的響應(yīng)為:
HTTP/1.1 200 OK Date: Mon, 23 Mar 2020 10:18:48 GMT Content-Type: application/json; charset=utf-8 Content-Length: 39 request-id: ac14000d1584958728277106170 content-disposition: attachment {"keyString":"value1","keyNumber":1234}
返回自定義響應(yīng)
服務(wù)端返回的Content-Type,HttpStatusCode,Headers都由云函數(shù)來指定。
要求云函數(shù)返回一個object,同時要設(shè)定mpserverlessComposedResponse為true。
云函數(shù)的返回格式如下:
{ "mpserverlessComposedResponse": true, "isBase64Encoded": true|false, "statusCode": httpStatusCode, "headers": { "headerName": "headerValue", ... }, "body": "..." }
例如云函數(shù)返回:
{ mpserverlessComposedResponse: true, isBase64Encoded : false, statusCode: 200, headers: { 'content-type': 'text/html' }, body: '<h1>Hello World</h1>' }
則最終的響應(yīng)為:
HTTP/2 200 date: Mon, 23 Mar 2020 10:40:09 GMT content-type: text/html; charset=utf-8 content-length: 20 request-id: ac14000d1584960009970137070 content-disposition: attachment <h1>Hello World</h1>