函数工作流 FUNCTIONGRAPH-构建程序:请求参数代码定义示例

时间:2024-04-29 16:22:26

请求参数代码定义示例

在FunctionGraph中开发函数,以python2.7语言为例,函数代码需要满足如下条件。

函数有明确的接口定义,如下所示:

def handler (event, context)
  • 入口函数名(handler):入口函数名称,需和函数执行入口处用户自定义的入口函数名称一致。
  • 执行事件(event): 函数执行界面由用户输入的执行事件参数, 格式为JSON对象。
  • 上下文环境(Context):Runtime提供的函数执行上下文,其接口定义在SDK接口说明。
执行事件(event)支持三种请求参数定义,格式为:
  • Header中的请求参数:event["headers"]["参数名"]
  • Query中的请求参数:event["queryStringParameters"]["参数名"]
  • 您自定义的用户数据:event["user_data"]
函数代码获取的三种请求参数与API网关自定义认证中的参数关系如下所示:
  • Header中的请求参数:对应自定义认证中参数位置为Header的身份来源,其参数值在您调用使用该前端自定义认证的API时传入
  • Query中的请求参数:对应自定义认证中参数位置为Query的身份来源,其参数值在您调用使用该前端自定义认证的API时传入
  • 您自定义的用户数据:对应自定义认证中的用户数据,其参数值在您创建自定义认证时输入
  • 函数的返回值不能大于1M,必须满足如下格式:
    {     "statusCode":200,
          "body": "{\"status\": \"allow\", \"context\": {\"user\": \"abc\"}}" 
     }

其中,body字段的内容为字符串格式,json解码之后为:

{
	"status": "allow/deny",
	"context": {
		"user": "abc"
	}
}

“status”字段为必选,用于标识认证结果。只支持“allow”或“deny”,“allow”表示认证成功,“deny”表示认证失败。

“context”字段为可选,只支持字符串类型键值对,键值不支持JSON对象或数组。

context中的数据为您自定义的字段,认证通过后作为认证参数映射到API网关后端参数中,其中context中的参数名称与系统参数名称必须完全一致,且区分大小写,context中的参数名称必须以英文字母开头,支持英文大小写字母、数字、下划线和中划线,且长度为1 ~ 32个字符。

Header中的请求参数定义代码示例

# -*- coding:utf-8 -*-
import json
def handler(event, context):
    if event["headers"].get("auth")=='abc':
        resp = {
            'statusCode': 200,
            'body': json.dumps({
                "status":"allow",
                "context":{
                    "user":"success"
                }
            })
        }
    else:
        resp = {
            'statusCode': 200,
            'body': json.dumps({
                "status":"deny",
            })   
        }
    return json.dumps(resp)

Query中的请求参数定义代码示例

# -*- coding:utf-8 -*-
import json
def handler(event, context):
    if event["queryStringParameters"].get("test")=='abc':
        resp = {
            'statusCode': 200,
            'body': json.dumps({
                "status":"allow",
                "context":{
                    "user":"abcd"
                }
            })
        }
    else:
        resp = {
            'statusCode': 200,
            'body': json.dumps({
                "status":"deny",
            })   
        }
    return json.dumps(resp)

用户数据定义代码示例

# -*- coding:utf-8 -*-
import json
def handler(event, context):
    if event.get("user_data")=='abc':
        resp = {
            'statusCode': 200,
            'body': json.dumps({
                "status":"allow",
                "context":{
                    "user":"abcd"
                }
            })
        }
    else:
        resp = {
            'statusCode': 200,
            'body': json.dumps({
                "status":"deny",
            })   
        }
    return json.dumps(resp)
support.huaweicloud.com/bestpractice-functiongraph/functiongraph_05_1027.html