ALIYUN::ApiGateway::Api

更新时间:
复制 MD 格式

ALIYUN::ApiGateway::Api类型用于创建API。

语法

{
  "Type": "ALIYUN::ApiGateway::Api",
  "Properties": {
    "ErrorCodeSamples": List,
    "Description": String,
    "ServiceConfig": Map,
    "SystemParameters": List,
    "ServiceParameters": List,
    "OpenIdConnectConfig": Map,
    "RequestConfig": Map,
    "AuthType": String,
    "Visibility": String,
    "Tags": List,
    "ResultSample": String,
    "ResultType": String,
    "ApiName": String,
    "FailResultSample": String,
    "DisableInternet": Boolean,
    "ForceNonceCheck": Boolean,
    "ConstParameters": List,
    "GroupId": String,
    "ServiceParametersMap": List,
    "RequestParameters": List,
    "AppCodeAuthType": String,
    "ResultBodyModel": String,
    "AllowSignatureMethod": String,
    "WebSocketApiType": String,
    "ResultDescriptions": String
  }
}

属性

属性名称

类型

必须

允许更新

描述

约束

ApiName

String

是

是

API名称。

长度为4~50个字符。必须以英文字母或汉字开头。可包含英文字母、汉字、数字和下划线(_)。

说明

API分组内的API名称不允许重复。

GroupId

String

是

否

API分组编号。

无

RequestConfig

Map

是

是

Consumer向网关发送API请求的相关配置项。

更多信息,请参见RequestConfig属性。

ResultSample

String

否

是

后端服务返回应答的示例。

无

ResultType

String

否

是

后端服务返回应答的格式。

取值:

  • JSON(默认值)

  • TEXT

  • BINARY

  • XML

  • PASSTHROUGH

ServiceConfig

Map

是

是

网关向后端服务发送API请求的相关配置项。

更多信息,请参见ServiceConfig属性。

Visibility

String

是

是

API是否公开。

取值:

  • PUBLIC:公开。

  • PRIVATE:不公开。

AllowSignatureMethod

String

否

是

当AuthType为APP认证时,需要传该值明确签名算法。

取值:

  • HmacSHA256(默认值)

  • HmacSHA1

AppCodeAuthType

String

否

是

AppCode认证方式。

AuthType取值为APP时该参数生效,取值:

  • DEFAULT(默认值):随分组设置。

  • DISABLE:不允许。

  • HEADER:允许AppCode的Header认证。

  • HEADER_QUERY:允许AppCode的Header及Query认证。

AuthType

String

否

是

API安全认证类型。

取值:

  • APP:只允许已授权的App调用。

  • ANONYMOUS:允许匿名调用,网关不会对调用者做身份认证,也无法根据用户需求设置流量控制。若所在分组要上架云市场,建议将该API转移至其他分组,或将类型设置为私有,或选择阿里云App认证方式。

  • APPOPENID:支持第三方账号认证OpenID Connect,而且只允许已授权的App调用。当设置此项时,参数OpenIdConnectConfig必须指定。

ConstParameters

List

否

是

指定API的常量参数。

更多信息,请参见ConstParameters属性。

Description

String

否

是

API描述信息。

最多支持180个字符。

DisableInternet

Boolean

否

是

是否禁止公网调用API。

取值:

  • true:禁止。

  • false:允许。

ErrorCodeSamples

List

否

是

后端服务返回的错误码示例。

更多信息,请参见ErrorCodeSamples属性。

FailResultSample

String

否

是

后端服务失败返回应答的示例。

无

ForceNonceCheck

Boolean

否

是

请求时是否强制检查X-Ca-Nonce。

取值:

  • true:强制检查。

  • false:不强制检查。

OpenIdConnectConfig

Map

否

是

第三方账号认证OpenID Connect相关配置项。

更多信息,请参见OpenIdConnectConfig属性。

RequestParameters

List

否

是

Consumer向网关发送API请求的参数描述。

更多信息,请参见RequestParameters属性。

ResultBodyModel

String

否

是

API的返回结果。

无

ResultDescriptions

String

否

是

结果描述。

无

ServiceParameters

List

否

是

网关向后端服务发送API请求的参数描述。

更多信息,请参见ServiceParameters属性。

ServiceParametersMap

List

否

是

Consumer向网关发送请求的参数和网关向后端服务发送请求的参数的映射关系。

更多信息,请参见ServiceParametersMap属性。

SystemParameters

List

否

是

API的系统参数。

更多信息,请参见SystemParameters属性。

Tags

List

否

是

标签。

最多支持添加20个标签。

更多信息,请参见Tags属性。

WebSocketApiType

String

否

是

双向通信API类型。

取值:

  • COMMON:普通API。

  • REGISTER:注册API。

  • UNREGISTER:注销API。

  • NOTIFY:下行通知。

Tags语法

"Tags": [
  {
    "Key": String,
    "Value": String
  }
]  

Tags属性

属性名称

类型

必须

允许更新

描述

约束

Key

String

是

否

标签键。

长度为1~128个字符,不能以aliyun和acs:开头,不能包含http://或者https:// 。

Value

String

否

否

标签值。

长度为0~128个字符,不能以aliyun和acs:开头,不能包含http://或者https:// 。

ErrorCodeSamples语法

"ErrorCodeSamples": [
  {
    "Message": String,
    "Code": String,
    "Description": String
  }
]

ErrorCodeSamples属性

属性名称

类型

必须

允许更新

描述

约束

Code

String

是

是

错误码。

无

Message

String

是

是

错误信息。

无

Description

String

否

是

错误描述。

无

ServiceConfig语法

"ServiceConfig": {
  "ServiceTimeOut": Integer,
  "FunctionComputeConfig": Map,
  "VpcConfig": Map,
  "MockResult": String,
  "MockStatusCode": Integer,
  "ServiceHttpMethod": String,
  "ServiceProtocol": String,
  "ServiceVpcEnable": String,
  "ServiceAddress": String,
  "ContentTypeValue": String,
  "MockHeaders": List,
  "ContentTypeCatagory": String,
  "ServicePath": String,
  "Mock": String
}

ServiceConfig属性

属性名称

类型

必须

允许更新

描述

约束

ContentTypeCatagory

String

否

是

调用后端HTTP服务时,ContentType头的取值策略。

取值:

  • DEFAULT:使用API网关默认值。

  • CUSTOM:自定义。

  • CLIENT(默认值):使用客户端上行的ContentType头。

ContentTypeValue

String

否

是

当后端服务是HTTP,ContentTypeCatagory取值为DEFAULT或CUSTOM时,ContentType头的取值。

无

FunctionComputeConfig

Map

否

是

后端服务为函数计算。

函数计算后端相关的配置项,请参见FunctionComputeConfig。

更多信息,请参见FunctionComputeConfig属性。

Mock

String

否

是

是否采取Mock模式。

取值:

  • TRUE:采取Mock模式。

  • FALSE(默认值):不采取Mock模式。

MockHeaders

List

否

是

启用Mock时,自定义的Mock响应头相关信息。

更多信息,请参见MockHeader。

更多信息,请参见MockHeaders属性。

MockResult

String

否

是

启用Mock模式时返回的结果。

无

MockStatusCode

Integer

否

是

状态码。

以兼容HTTP 1.1 Response Status Code的格式返回。

ServiceAddress

String

否

是

后端服务地址。

例如:后端服务完整地址为http://example.com:8080/object/add?key1=value1&key2=value2,后端服务地址指http://example.com:8080。

ServiceHttpMethod

String

否

是

调用后端服务HTTP协议时的方法。

取值:

  • GET(默认值)

  • POST

  • DELETE

  • PUT

  • HEAD

  • TRACE

  • PATCH

  • CONNECT

  • OPTIONS

  • ANY

ServicePath

String

否

是

后端服务路径。

例如:后端服务完全地址为http://example.com:8080/object/add?key1=value1&key2=value2, 后端服务路径指/object/add。

ServiceProtocol

String

否

是

后端服务协议类型。

取值:

  • HTTP

  • HTTPS

  • FunctionCompute

ServiceTimeOut

Integer

否

是

后端服务超时时间。

单位:毫秒。

ServiceVpcEnable

String

否

是

是否使用专有网络。

取值:

  • TRUE:使用。

  • FALSE(默认值):不使用。

VpcConfig

Map

否

是

启用VPC通道时的相关配置项。

更多信息,请参见VpcConfig属性。

VpcConfig语法

"VpcConfig": {
  "InstanceId": String,
  "VpcId": String,
  "Port": Integer
}

VpcConfig属性

属性名称

类型

必须

允许更新

描述

约束

InstanceId

String

是

是

专用网络中的实例ID。

目前只支持ECS实例和SLB实例。

Port

Integer

是

是

实例对应的端口号。

无

VpcId

String

是

是

专有网络ID。

无

SystemParameters语法

"SystemParameters": [
  {
    "DemoValue": String,
    "ParameterName": String,
    "ServiceParameterName": String,
    "Location": String,
    "Description": String
  }
]

SystemParameters属性

属性名称

类型

必须

允许更新

描述

约束

Location

String

是

是

参数位置。

无

ParameterName

String

是

是

系统参数名称。

取值:

  • CaClientIp

  • CaDomain

  • CaRequestHandleTime

  • CaAppId

  • CaRequestId

  • CaHttpSchema

  • CaProxy

ServiceParameterName

String

是

是

后端参数名称。

无

DemoValue

String

否

是

示例。

无

Description

String

否

是

参数描述。

无

ServiceParameters语法

"ServiceParameters": [
  {
    "ParameterType": String,
    "Location": String,
    "ServiceParameterName": String
  }
]

ServiceParameters属性

属性名称

类型

必须

允许更新

描述

约束

Location

String

是

是

参数位置。

取值:

  • BODY

  • HEAD

  • QUERY

  • PATH

ParameterType

String

是

是

后端参数数据类型。

取值:

  • STRING:字符。

  • NUMBER:数值。

  • BOOLEAN:布尔。

ServiceParameterName

String

是

是

后端参数名称。

无

OpenIdConnectConfig语法

"OpenIdConnectConfig": {
  "OpenIdApiType": String,
  "PublicKey": String,
  "PublicKeyId": String,
  "IdTokenParamName": String
}

OpenIdConnectConfig属性

属性名称

类型

必须

允许更新

描述

约束

OpenIdApiType

String

是

是

OpenID Connect模式。

取值:

  • IDTOKEN:先获取授权API,再颁发Token。当设置此项时,参数PublicKeyId和PublicKey必须指定。

  • BUSINESS:先获取业务API,再进行Token验证。当设置此项时,参数IdTokenParamName必须指定。

IdTokenParamName

String

否

是

Token对应的参数名称。

无

PublicKey

String

否

是

公钥。

无

PublicKeyId

String

否

是

公钥ID。

无

RequestConfig语法

"RequestConfig": {
  "RequestMode": String,
  "RequestPath": String,
  "PostBodyDescription": String,
  "RequestProtocol": String,
  "RequestHttpMethod": String,
  "BodyFormat": String
}

RequestConfig属性

属性名称

类型

必须

允许更新

描述

约束

RequestHttpMethod

String

是

是

请求方式。

取值:

  • GET(默认值)

  • POST

  • DELETE

  • PUT

  • HEADER

  • TRACE

  • PATCH

  • OPTIONS

RequestMode

String

是

是

请求模式。

取值:

  • MAPPING(默认值):入参映射。

  • PASSTHROUGH:入参透传。

RequestPath

String

是

是

请求地址。

例如:API的完全地址为http://example.com:8080/object/add?key1=value1&key2=value2,请求地址指/object/add。

RequestProtocol

String

是

是

API支持的协议类型。

取值:

  • HTTP

  • HTTPS

多个协议类型以半角逗号(,)隔开,例如:HTTP,HTTPS。

BodyFormat

String

否

是

POST、PUT或PATCH请求时,表示数据以何种方式传递给服务器。

取值:

  • FORM:表单形式。

  • STREAM:字节流形式。

当RequestMode值为MAPPING时,该参数有效。

PostBodyDescription

String

否

是

请求体的描述。

无

ServiceParametersMap语法

"ServiceParametersMap": [
  {
    "RequestParameterName": String,
    "ServiceParameterName": String
  }
]

ServiceParametersMap属性

属性名称

类型

必须

允许更新

描述

约束

RequestParameterName

String

是

是

前端参数名称。

该参数取值必须存在于RequestParameters中,即RequestParameters.ApiParameterName。

ServiceParameterName

String

是

是

后端参数名称。

无

RequestParameters语法

"RequestParameters": [
  {
    "ParameterType": String,
    "Required": String,
    "Description": String,
    "DemoValue": String,
    "MinLength": Integer,
    "DefaultValue": String,
    "RegularExpression": String,
    "MaxValue": Integer,
    "MinValue": Integer,
    "JsonScheme": String,
    "ApiParameterName": String,
    "Location": String,
    "DocShow": String,
    "MaxLength": Integer,
    "EnumValue": String,
    "DocOrder": Integer
  }
]

RequestParameters属性

属性名称

类型

必须

允许更新

描述

约束

ApiParameterName

String

是

是

参数名称。

无

Location

String

是

是

参数位置。

取值:

  • BODY

  • HEAD

  • QUERY

  • PATH

ParameterType

String

是

否

参数类型。

取值:

  • String:字符。

  • Int:整型。

  • Long:长整型。

  • Float:单精度浮点型。

  • Double:双精度浮点型。

  • Boolean:布尔。

Required

String

是

是

是否必填。

取值:

  • REQUIRED:必填。

  • OPTIONAL:选填。

DefaultValue

String

否

是

默认值。

无

DemoValue

String

否

是

示例值。

无

Description

String

否

是

参数描述。

无

DocOrder

Integer

否

是

文档中的顺序。

无

DocShow

String

否

是

API网关生成的SDK或文档是否可见。

取值:

  • PUBLIC

  • PRIVATE

EnumValue

String

否

是

当ParameterType为Int、Long、Float、Double或String时,允许输入的散列值。

不同的值用半角逗号(,)分隔,例如:1,2,3,4,9或A,B,C,E,F。

JsonScheme

String

否

是

当ParameterType为String时,该参数进行JSON验证。

无

MaxLength

Integer

否

是

当ParameterType为 String时,参数的最大长度限定。

无

MaxValue

Integer

否

是

当ParameterType为Int、Long、Float、Double 时,参数的最大值限定。

无

MinLength

Integer

否

是

当ParameterType为String时,参数的最小长度限定。

无

MinValue

Integer

否

是

当ParameterType为 Int、Long、Float、Double 时,参数的最小值限定。

无

RegularExpression

String

否

是

当ParameterType为String时,该参数通过正则表达式进行验证。

无

ConstParameters语法

"ConstParameters": [
  {
    "ConstValue": String,
    "ServiceParameterName": String,
    "Description": String,
    "Location": String
  }
]

ConstParameters属性

属性名称

类型

必须

允许更新

描述

约束

ConstValue

String

是

是

参数值。

无

Location

String

是

是

参数位置。

取值:

  • BODY

  • HEAD(默认值)

ServiceParameterName

String

是

是

后端参数名称。

无

Description

String

否

是

参数描述。

无

FunctionComputeConfig语法

"FunctionComputeConfig": {
 "FcRegionId": String,
 "RoleArn": String,
 "ServiceName": String,
 "FunctionName": String,
 "Qualifier": String,
 "ContentTypeValue": String,
 "ContentTypeCatagory": String,
 "FcBaseUrl": String,
 "FcType": String,
 "Method": String,
 "OnlyBusinessPath": Boolean,
 "Path": String,
 "FcVersion": String
}

FunctionComputeConfig属性

属性名称

类型

必须

允许更新

描述

约束

ContentTypeCatagory

String

否

是

调用后端服务HTTP服务时,ContentType头的取值策略。

取值:

  • DEFAULT:使用API网关默认的值。

  • CUSTOM:自定义。

  • CLIENT(默认值):使用客户端上行的ContentType的头。

FcVersion

String

否

否

支持函数计算的版本。

取值:

  • 2.0

  • 3.0

ContentTypeValue

String

否

是

调用后端HTTP服务,ContentTypeCatagory的值为DEFAULT或者CUSTOM时,ContentType头的取值。

无

FcBaseUrl

String

否

是

触发器地址。

以http://或https://开头。

FcRegionId

String

否

是

函数计算所在地域ID。

无

FcType

String

否

是

函数类型。

取值:

  • FCEvent(默认值)。

  • HttpTrigger。

FunctionName

String

否

是

函数计算定义的FunctionName。

无

Method

String

否

是

HTTP请求方式。

取值:

  • GET(默认值)

  • POST

  • DELETE

  • PUT

  • HEAD

  • PATCH

  • OPTIONS

  • ANY

OnlyBusinessPath

Boolean

否

是

是否只传递自定义的后端请求路径给后端。

取值:

  • true

  • false

Path

String

否

是

后端请求路径。

参数必须放在方括号中,例如:/ getUserInfo / [userId]。

Qualifier

String

否

是

函数计算的别名。

无

RoleArn

String

否

是

RAM授权给API网关访问函数计算的ARN。

无

ServiceName

String

否

是

函数计算定义的ServiceName。

无

MockHeaders语法

"MockHeaders": [
  {
    "HeaderValue": String,
    "HeaderName": String
  }
]    

MockHeaders属性

属性名称

类型

必须

允许更新

描述

约束

HeaderName

String

是

是

响应头名称。

无

HeaderValue

String

是

是

响应头值。

无

返回值

Fn::GetAtt

  • ApiId:API ID。

  • Arn:阿里云资源名称。

示例

说明

请您按照实际情况更改下列脱敏的参数取值,例如InstanceId。

YAML格式

ROSTemplateFormatVersion: '2015-09-01'
Description: Test ApiGateway Api
Parameters: {}
Resources:
  RamRole:
    Type: ALIYUN::RAM::Role
    Properties:
      RoleName: TestRole
      Policies:
        - PolicyName: TestPolicy
          PolicyDocument:
            Version: '1'
            Statement:
              - Action:
                  - fc:InvokeFunction
                Resource:
                  - '*'
                Effect: Allow
      AssumeRolePolicyDocument:
        Version: '1'
        Statement:
          - Action: sts:AssumeRole
            Effect: Allow
            Principal:
              Service:
                - apigateway.aliyuncs.com
  FCService:
    Type: ALIYUN::FC::Service
    Properties:
      ServiceName: TestService
      InternetAccess: true
  Function:
    Type: ALIYUN::FC::Function
    DependsOn: FCService
    Properties:
      Handler: index.handler
      Runtime: python3
      Code:
        SourceCode: "def handler(event, context):\n\treturn {'isBase64Encode': False, 'statusCode': 200, 'body': 'Hello World!', 'headers': {'Content-type': 'aplication/json'}}\n"
      FunctionName: mytest
      ServiceName:
        Fn::GetAtt:
          - FCService
          - ServiceName
      MemorySize: 128
  Group:
    Type: ALIYUN::ApiGateway::Group
    Properties:
      InstanceId: api-shared-vpc-***
      GroupName: TestGroup
  Api:
    DependsOn:
      - RamRole
      - Group
    Type: ALIYUN::ApiGateway::Api
    Properties:
      AppCodeAuthType: HEADER_QUERY
      AuthType: APP
      ServiceConfig:
        FunctionComputeConfig:
          fcRegionId:
            Ref: ALIYUN::Region
          qualifier: LATEST
          roleArn:
            Fn::GetAtt:
              - RamRole
              - Arn
          serviceName:
            Fn::GetAtt:
              - FCService
              - ServiceName
          functionName:
            Fn::GetAtt:
              - Function
              - FunctionName
        ServiceProtocol: FunctionCompute
        ContentTypeCatagory: CLIENT
      RequestConfig:
        RequestMode: MAPPING
        RequestHttpMethod: POST
        RequestProtocol: HTTP,HTTPS
        RequestPath: /test
        BodyFormat: FORM
      ResultSample: ''
      Visibility: PRIVATE
      ResultType: JSON
      ApiName: TestApi
      GroupId:
        Fn::GetAtt:
          - Group
          - GroupId
  App:
    Type: ALIYUN::ApiGateway::App
    Properties:
      Description: Test Create App
      AppName: TestApp
Outputs: {}

JSON格式

{
  "ROSTemplateFormatVersion": "2015-09-01",
  "Description": "Test ApiGateway Api",
  "Parameters": {
  },
  "Resources": {
    "RamRole": {
      "Type": "ALIYUN::RAM::Role",
      "Properties": {
        "RoleName": "TestRole",
        "Policies": [
          {
            "PolicyName": "TestPolicy",
            "PolicyDocument": {
              "Version": "1",
              "Statement": [
                {
                  "Action": [
                    "fc:InvokeFunction"
                  ],
                  "Resource": [
                    "*"
                  ],
                  "Effect": "Allow"
                }
              ]
            }
          }
        ],
        "AssumeRolePolicyDocument": {
          "Version": "1",
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": [
                  "apigateway.aliyuncs.com"
                ]
              }
            }
          ]
        }
      }
    },
    "FCService": {
      "Type": "ALIYUN::FC::Service",
      "Properties": {
        "ServiceName": "TestService",
        "InternetAccess": true
      }
    },
    "Function": {
      "Type": "ALIYUN::FC::Function",
      "DependsOn": "FCService",
      "Properties": {
        "Handler": "index.handler",
        "Runtime": "python3",
        "Code": {
          "SourceCode": "def handler(event, context):\n\treturn {'isBase64Encode': False, 'statusCode': 200, 'body': 'Hello World!', 'headers': {'Content-type': 'aplication/json'}}\n"
        },
        "FunctionName": "mytest",
        "ServiceName": {
          "Fn::GetAtt": [
            "FCService",
            "ServiceName"
          ]
        },
        "MemorySize": 128
      }
    },
    "Group": {
      "Type": "ALIYUN::ApiGateway::Group",
      "Properties": {
        "InstanceId": "api-shared-vpc-***",
        "GroupName": "TestGroup"
      }
    },
    "Api": {
      "DependsOn": [
        "RamRole",
        "Group"
      ],
      "Type": "ALIYUN::ApiGateway::Api",
      "Properties": {
        "AppCodeAuthType": "HEADER_QUERY",
        "AuthType": "APP",
        "ServiceConfig": {
          "FunctionComputeConfig": {
            "fcRegionId": {
              "Ref": "ALIYUN::Region"
            },
            "qualifier": "LATEST",
            "roleArn": {
              "Fn::GetAtt": [
                "RamRole",
                "Arn"
              ]
            },
            "serviceName": {
              "Fn::GetAtt": [
                "FCService",
                "ServiceName"
              ]
            },
            "functionName": {
              "Fn::GetAtt": [
                "Function",
                "FunctionName"
              ]
            }
          },
          "ServiceProtocol": "FunctionCompute",
          "ContentTypeCatagory": "CLIENT"
        },
        "RequestConfig": {
          "RequestMode": "MAPPING",
          "RequestHttpMethod": "POST",
          "RequestProtocol": "HTTP,HTTPS",
          "RequestPath": "/test",
          "BodyFormat": "FORM"
        },
        "ResultSample": "",
        "Visibility": "PRIVATE",
        "ResultType": "JSON",
        "ApiName": "TestApi",
        "GroupId": {
          "Fn::GetAtt": [
            "Group",
            "GroupId"
          ]
        }
      }
    },
    "App": {
      "Type": "ALIYUN::ApiGateway::App",
      "Properties": {
        "Description": "Test Create App",
        "AppName": "TestApp"
      }
    }
  },
  "Outputs": {
  }
}