后端使用函数计算
介绍
函数计算CFC(Cloud Function Compute)提供基于事件触发、全托管的云端计算能力。由于其“无服务器”特性,您仅需要开发业务代码并上传,无需关注和配置服务器资源。 使用API网关,您可直接将函数计算作为您的后端,在无需关注后端服务资源的同时,使用API网关的流控、认证、访问控制等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做解码操作