后端使用函数计算
所有文档

          API网关

          后端使用函数计算

          介绍

          函数计算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做解码操作
          上一篇
          跨域资源共享CORS
          下一篇
          私有网络VPC开放API