上云无忧 > 文档中心 > 百度智能云函数计算 CFC HTTP触发器开发参考
函数计算CFC
百度智能云函数计算 CFC HTTP触发器开发参考

文档简介:
HTTP触发器实现了将某个函数关联到一个 URL 上(包含相应的 CRUD 操作),它可以接收 HTTP 请求,根据 HTTP 方法、URL,找到匹配的函数将 HTTP 相关信息传入并执行函数,获取执行结果,将函数执行结果包装为 HTTP 返回响应。创建HTTP触发器的核心步骤包括HTTP触发器配置和用户代码配置,以下将为您分别介绍。
*此产品及展示信息均由百度智能云官方提供。免费试用 咨询热线:400-826-7010,为您提供专业的售前咨询,让您快速了解云产品,助您轻松上云! 微信咨询
  免费试用、价格特惠

HTTP触发器实现了将某个函数关联到一个 URL 上(包含相应的 CRUD 操作),它可以接收 HTTP 请求,根据 HTTP 方法、URL,找到匹配的函数将 HTTP 相关信息传入并执行函数,获取执行结果,将函数执行结果包装为 HTTP 返回响应。创建HTTP触发器的核心步骤包括HTTP触发器配置用户代码配置,以下将为您分别介绍。

HTTP触发器参数配置

URL路径规则

URL参数的配置支持以下几种格式:

  1. 简单URL,不包含参数,例如:/user。
  2. 带参数的URL,使用{param}指定路径参数,例如 /user/{id}/posts 中,{id} 即为匹配参数。当请求 /user/123/posts 时,会识别参数id: 123。
  3. 带贪婪匹配路径参数的URL,使用{param+}指定贪婪匹配路径参数,它会匹配当前位置直到 URL 结尾的所有剩余部分,例如 /path/{filepath+}。例如请求 /file/aaa/bbb/cccddd时,会识别参数 file: aaa/bbb/cccddd。

HTTP方法

HTTP 触发器支持DELETE、GET、HEAD、OPTIONS、PATCH、POST、PUT方式触发函数。HTTP触发器时可以选择多个,之后触发器会匹配相应的请求方法集合。

身份验证

可以选择不验证,或者IAM验证。选择不验证时,会在最终的触发器信息显示中显示 不验证。

二进制请求 body

默认情况下,HTTP 触发器会以纯文本的形式处理 HTTP 请求体,如果请求体内包含非纯文本内容(例如二进制文件上传),并需要在函数中进行处理,可以勾选此选项。勾选后,HTTP 触发器会使用 Base64 编码 HTTP 请求体。用户代码中 event 参数中,body 项会是 Base64 编码后的请求体内容,而 isBase64Encoded 会被设为 true。

用户代码中的配置

在用户代码中需要设置响应的handler来处理由HTTP触发器转发而来的请求,HTTP触发器可以将整个客户端请求映射到后端函数的输入 event 参数。参数的说明如下。

event的格式

Event:

{
	"resource": "请求的资源路径",  
	"path": "HTTP触发器的路径",  
	"httpMethod": "请求的HTTP方法",  
	"headers": {请求头},  
	"queryStringParameters": {query string 参数},  
	"pathParameters":  {代理路径参数},  
	"requestContext": {请求上下文},  
	"body": "请求体",  
	"isBase64Encoded": "请求体是否为Base64编码,这里固定为false,暂不支持二进制格式"  
}

其中请求头包括一个自定义头来标识请求:

{ "X-Bce-Request-Id": "6c2d4826-xxxx-4c2b-8039-9ca98ded6954" } 

说明:用户代码可依赖Event中现有参数,但HTTP触发器在将来可能增加参数,用户代码在此处需保证开放性,并对参数数量无硬性依赖。

配置举例

当配置了参数为如下内容的一个HTTP触发器之后

URL路径: "http://7grmt1xfky5jf.cfc-execute.gz.baidubce.com/test/{proxy+}" HTTP方法: GET 
身份验证: 不验证

向该触发器发出请求

curl http://7grmt1xfky5jf.cfc-execute.gz.baidubce.com/test/aaa/bbb?a=111

对应的event的内容为

{ "resource": "/test/{proxy+}", "path": "/test/aaa/bbb.", "httpMethod": "GET", "headers":
 { "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,
*/*;q=0.8", "Accept-Encoding": "gzip, deflate, br", "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
 "Connection": "close", "Upgrade-Insecure-Requests": "1", "User-Agent": "Mozilla/5.0 
(Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36",
 "X-Bce-Request-Id": "f6cb833e-f818-4b80-b30c-fff437e69886" }, "queryStringParameters": { "a": "111" },
 "pathParameters": { "proxy": "aaa/bbb." }, "requestContext": { "stage": "cfc", "requestId":
 "f6cb833e-f818-4b80-b30c-fff437e69886", "resourcePath": "/test/{proxy+}", "httpMethod": 
"GET", "apiId": "7grmt1xfky5jf", "sourceIp": "12.34.56.78", }, "body": "", "isBase64Encoded": false }

使用 HTTP 触发器时的函数返回格式

HTTP 触发器支持两种格式的后端函数返回:简易格式和完整格式。

简易格式

HTTP 触发器会获取函数返回,并将其作为纯文本 HTTP 响应发回客户端。此时,响应状态码固定为 200,并包含 Content-Type: text/plain 响应头部。

使用简易格式时,无法在函数中自定义返回状态码和返回头部,也无法返回二进制响应,如果需要自定义这些,请使用下文描述的完整格式返回。

Node.js 范例

exports.handler = (event, context, callback) => { callback(null, "Hello world!"); };

完整格式

使用完整格式定义 HTTP 响应,后端处理函数需要按照以下格式返回 JSON:

{ "isBase64Encoded": true|false, "statusCode": httpStatusCode, "headers": { "headerName": "headerValue", ... }, "body": "..." }
  • isBase64Encoded:表示 body 是否进行了 Base64 编码,如果返回纯文本,则设为 false,如果需要返回二进制内容,则需要设为 true,并自行将返回 body 进行 Base64 编码后,设置到 body 字段上。
  • statusCode:HTTP 响应状态码,必填项,例如 200 表示 OK,404 表示 Not Found 等。
  • headers:以 K-V 的形式定义响应中需要的额外头部,例如 Content-Type 等。不需要额外响应头部时,可以省略。如果需要启用 CORS,必须在 headers 中添加 Access-Control-Allow-Origin:domain-name 。其中,domain-name 可以设置成通配符*。
  • body:返回给客户端的响应体的内容,必填项。

Node.js 范例

exports.handler = (event, context, callback) => { callback(null, { "isBase64Encoded": 
false, "statusCode": 200, "headers": { "X-Custom-Header": "headerValue" }, "body": "hello" }); };

Python 范例

import json def handler(event, context): resp = { "isBase64Encoded": False, "statusCode": 200, 
"headers": { "X-Custom-Header": "headerValue" }, "body": "hello" } return json.dumps(resp)

PHP 范例

<?php function handler($event, $context) { $resp = [ "isBase64Encoded" => FALSE, 
"statusCode" => 200, "headers" => [ "X-Custom-Header" => "headerValue", ], "body" 
=> "hello", ]; return json_encode($resp, JSON_FORCE_OBJECT); }

Lua 范例

json = require('cjson') function handler(event, context) respHeaders = {} respHeaders["X-Custom-Header"] 
= "headerValue" resp = { isBase64Encoded = false, statusCode = 200, headers = respHeaders, body = "hello", }
 return json.encode(resp) end

PowerShell 范例

$respHeaders = @{} $respHeaders["X-Custom-Header"] = "headerValue" $resp = @{ isBase64Encoded =
 $FALSE; statusCode = 200; headers = $respHeaders; body = "hello"; } $respJson = $resp | ConvertTo-Json
Write-Host $respJson

相似文档
  • 用户可以为新建的函数或已有函数配置HTTP触发器,创建函数的流程可以具体参考 创建函数 这里不再赘述。 这里假设用户已完成一个名为httptrigger-helloworld的Nodejs函数的创建,以下内容以此为前提,指引用户在CFC控制台在函数管理页面中为函数配置触发器。接下来,我们将通过三步来完成一个触发器的设置。
  • 用户可以为新建的函数或已有函数配置 BOS 触发器,创建函数的流程可以具体参考 创建函数 。 这里假设用户已完成一个名为 bostrigger 的 Python 函数的创建,以下内容以此为前提,指引用户在 CFC 控制台在函数管理页面中为函数配置触发器。接下来,我们将通过三步来完成一个触发器的设置。
  • DuerOS触发器是百度云函数计算CFC为DuerOS技能开放平台开发者用户提供的事件触发器。 百度开放的智能生态有两大开发者支撑平台:一个是“小度技能开放平台”,一个是“百度智能云”。借助两大平台,您可以在搭载DuerOS的智能硬件上开发出丰富的功能,实现AI能力的场景化落地。为了更好地支持开发者,百度云CFC与DuerOS技能开放平台深度整合,提供一站式解决方案,您可以很方便的将在技能开放平台上开发好的技能使用DuerOS触发器与CFC函数绑定。
  • DuEdge触发器是百度云CFC为DuEdge的用户提供的触发器。DuEdge是百度旗下的边缘计算网络系统,平台详见官网。 配置使用步骤: DuEdge触发器配置使用步骤,可见链接,您可以根据链接中的步骤配置使用该触发器。
  • 函数计算工作流(XFlow)是一种 Serverless 编排服务,可让您结合 CFC 函数和其它百度云服务,按照您定义的时序逻辑来构建应用。在 XFlow 的图形化控制台,您可以看到应用由一系列事件驱动的步骤组成。
官方微信
联系客服
400-826-7010
7x24小时客服热线
分享
  • QQ好友
  • QQ空间
  • 微信
  • 微博
返回顶部