腾讯云API网关后端使用函数计算的配置

配置方式

函数计算配置

腾讯云API网关使用函数计算作为后端时,腾讯云API网关收到客户端的http/https请求后,会将请求信息封装成符合函数计算输入的event格式。网关调用CFC时函数接受到的event格式(适用于js/python)如下:

{ "path": "HTTP请求的路径","httpMethod": "HTTp请求的方法", "headers": {请求头},"queryStringParameters": {query string 参数},"pathParameters": {代理路径参数},"requestContext": {请求上下文},"body": "请求体","isBase64Encoded": "请求体是否为Base64编码" }

注意:腾讯云API网关接入时,event定义中的path与CFC http触发器的event定义略有不同。腾讯云API网关接入时,包含resource字段表示在腾讯云API网关中定义的请求路径,pathParameters表示匹配到的路径参数,而path表示的为函数计算本身的请求路径。

函数计算处理事件后,需要将计算结果封装成固定格式,以便于腾讯云API网关使用这些信息构造成http response。网关调用CFC时函数需要的返回格式(适用于js/python)如下:

{ "isBase64Encoded": true|false, "statusCode": httpStatusCode, "headers": { "headerName": "headerValue", ... }, "body": "..."}

JAVA情况下,函数的输入为InputStream,输出为OutputStream。InputStream转为Json后的格式与event格式一致,返回的结果通过UTF-8编码后写到OutputStream中即可。

网关配置

基本的腾讯云API配置方法请参考腾讯云API开放指南。

在配置腾讯云API后端时,后端服务类型选择『函数计算』

选择函数计算后,在后端服务地址中输入函数的BRN,其他配置与普通后端的配置方法一致

函数的BRN可通过如下步骤获取。

点击『查看函数计算列表』。

点击具体函数进入函数详情。

选择版本后,在BRN一栏点击『复制』按钮复制函数BRN。

Body传递规则

网关到函数

网关需要将客户端请求中的body封装到为json格式的入参event中的"body"字段,对于不同的body格式,处理方式不同。如果客户端到网关的body为key-value形式的请求,body将直接处理为json;对body为text形式的请求,网关发往后端为string;对于发往后端为包含文件等二进制的情况,则经过Base64编码后以字符串形式放到event的body字段。具体处理如下:

按Json处理
  • application/json
  • application/x-www-form-urlencoded
按字符串处理
  • text/*
  • application/xml
  • application/rss+xml
  • application/problem+xml
  • application/atom+xml
按二进制处理(经过Base64Encode)
  • multipart/form-data
  • 其他所有情况

函数到网关

函数返回跟业务需求选择是否进行Base64编码,并在isBase64Encoded说明body是否经过编码。如果函数返回的body经过Base64编码,则网关会进行Base64解码后再讲body返回给腾讯云API用户。

注意:如果返回给网关的Header未给定Conten-Type,则网关返回给用户时默认使用application/json;charset=UTF-8。

测试方式

特别的需要注意以下几点:

  • 函数的调用是否正常
  • 发往函数的event中path/query/header/body的内容是否正确
  • 有参数映射的情况下发往函数的请求映射是否正确
  • 返回的header是否符合预期
  • 不同content-type对编码的处理是否正确
  • 对函数返回的body进行编码,确认网关层面是否有对body做解码操作

标签