创建API
操作场景
API提供者把API接口配置在API网关中,开放后端能力。
创建API主要分为四个步骤:设置基本信息、定义API请求、定义后端服务和定义返回结果。
API网关服务基于REST的API架构,API的开放和调用需要遵循RESTful相关规范。
前提条件
- 已创建API分组。如果未创建API分组,可在本操作页面中创建API分组。
- 如果后端服务需要使用VPC通道,请先创建VPC通道,或在本操作页面中创建VPC通道。
设置基本信息
- 进入共享版控制台。
- 单击“开放API > API管理”,进入到API列表信息页面。
- 单击“新建API”,进入“新建API”页面。填写如表1所示信息。
图1 基本信息
表1 基本信息 信息项
描述
API名称
API名称,根据规划自定义。建议您按照一定的命名规则填写API名称,方便您快速识别和查找。
所属分组
API所属分组。
如果尚未创建API分组,单击“新建分组”,为API新创建一个分组。
网关响应
网关响应指API网关未能成功处理API请求,从而产生的错误响应。
API网关提供默认的网关响应(default)。如果您需要自定义响应状态码或网关响应内容,可在API分组管理中新增网关响应,按照您自己的响应内容,符合JSON格式即可。
类型
API类型:
- 公开:选择“公开”类型时,API支持上架。
- 私有:选择“私有”类型时,当该API所在分组上架时,该API不会上架。
安全认证
API认证方式:
- APP认证:表示由API网关服务负责接口请求的安全认证。
- 华为IAM认证:表示借助IAM服务进行安全认证。
- 自定义认证:用户有自己的认证系统或服务(如使用OAuth认证),可选择“自定义认证”。
- 无认证:表示不需要认证。
各种认证方式下的API调用稍有不同,具体请参考调用API。
推荐使用APP认证方式。
须知:- 认证方式为华为IAM认证时,任何API网关租户均可以访问此API,可能存在恶意刷流量,导致过量计费的风险。
- 认证方式为无认证时,任何公网用户均可以访问此API,可能存在恶意刷流量,导致过量计费的风险。
- 认证方式为自定义认证时,需要在函数工作流服务中写一段函数,对接用户自己的认证系统或服务。如果当前Region没有上线函数工作流服务,则不支持自定义认证。
支持简易认证
仅当“安全认证”选择“APP认证”时可配置。
简易认证指APP认证方式下调用API时,在HTTP请求头部消息增加一个参数X-Apig-AppCode,而不需要对请求内容签名,API网关也仅校验AppCode,不校验请求签名,从而实现快速响应。
注意仅支持HTTPS方式调用,不支持HTTP方式。具体使用请参考为简易认证添加AppCode。
说明:如果首次创建API未开启简易认证,那么之后开启简易认证,需要重新发布API。请参考发布API发布。
自定义认证
“安全认证”选择“自定义认证”时需要配置。
自定义认证需要提前创建,可单击右侧的“新建自定义认证”链接创建。
标签
标签主要用于对API添加分类属性,方便在创建了大量API后,快速过滤和查找。
描述
API的描述。
- 单击“下一步”,进入“定义API请求”页面。
定义API请求
- 在“定义API请求”页面,填写如表2所示信息。
图2 定义API请求
表2 定义API请求 信息项
描述
域名
系统默认分配的一个子域名。
请求协议
分为三种类型:
- HTTP
- HTTPS
- HTTP&HTTPS
传输重要或敏感数据时推荐使用HTTPS
API网关支持WebSocket数据传输,请求协议中的HTTP相当于WebSocket的ws,HTTPS相当于WebSocket的wss。
请求Path
接口请求的路径。
格式如:/users/{userId}/projects
- {}中的变量为请求参数,表示匹配"/"之间的一整段,不支持匹配"/"之间的一部分,例如/abc{userId}。如果匹配模式为绝对匹配,则尾部的请求参数可以添加“+”号,例如/users/{p+},其中变量p匹配1或多段"/"之间的部分。
- 请求Path中包含请求参数时,必须设置对应的入参定义。
- 内容区分大小写。
匹配模式
分为两种模式:
Method
接口调用方式:GET、POST、DELETE、PUT、PATCH、HEAD、OPTIONS、ANY
- 其中ANY表示该API支持任意请求方法。
- 当“Method”为“POST”/“PUT”/“PATCH”/“ANY”时,您可以在“请求体内容描述”中增加对于请求体的描述信息。
支持跨域(CORS)
是否开启跨域访问CORS(cross-origin resource sharing)。
CORS允许浏览器向跨域服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。
CORS请求分为两类:
- 简单请求:头信息之中,增加一个Origin字段。
- 非简单请求:在正式通信之前,增加一次HTTP查询请求。
开启CORS(非简单请求)时,您需要单独创建一个“Method”为“OPTIONS”的API,具体步骤请参见开启跨域访问。
请求体内容描述
仅当“请求方法”选择“POST”、“PUT”、“PATCH”或“ANY”时可配置。
填写API请求中请求体的描述信息,用于帮助API调用者理解如何正确封装API请求。
- (可选)设置入参定义。
入参定义是指您调用API时,需要传入的参数的说明。
- 单击“添加入参定义”,弹出“添加入参定义”对话框。
- 输入如表3所示信息。
表3 入参定义 信息项
描述
参数名
参数的名称,如果参数在“PATH”位置,那么参数名称需要和“请求Path”中的名称相同。
说明:- 参数名不能是x-apig- 、x-sdk-开头,不区分大小写。
- 参数名不能是x-stage,不区分大小写。
- 参数位置为HEADER时,参数名不能是“Authorization”和“X-Auth-Token”,不区分大小写,也不支持下划线。
参数位置
选择参数在请求中的位置。参数位置有如下三种:PATH、HEADER、QUERY。
说明:当您定义了PATH中的参数时,该参数需要在“请求Path”中同步定义。
类型
字段的类型,包含STRING和NUMBER。
说明:入参如果为boolean,请选择STRING。
必填
请求API时,此参数是否为必填。如果选择“是”,API网关将校验请求中是否包含此参数,如果不包含,则拒绝该请求。
透传
请求参数是否透传到后端服务。
默认值
“必填”为“否”时,默认值生效。请求中不包含此参数时,API网关自动增加默认值发送给后端服务。
枚举
请求参数的枚举值,请求参数的值只能从枚举值中选择,多个枚举值间用英文逗号隔开。
最小长度
参数值的最小长度,仅允许输入数字。
最大长度
参数值的最大长度,仅允许输入数字。
示例
参数值的填写示例。
描述
对于此参数的描述。
- 单击“确定”,完成入参定义的设置。
- 单击“下一步”,进入“定义后端服务”页面。
定义后端服务
API网关支持定义多个策略后端,即满足一定条件后转发给指定的API后端服务,用以满足不同的调用场景。例如为了区分普通调用与特殊调用,可以定义一个“策略后端”,通过调用方的源IP地址,为特殊调用方分配专用的后端服务。
除了定义一个默认的API后端服务,一个API共可以定义5个策略后端。
- 定义默认后端。
添加策略后端前必须定义一个默认后端,当不满足任何一个策略后端的API请求,都将转发到默认的API后端。
在“定义后端服务”页面,选择API后端服务类型。
表4 HTTP/HTTPS类型定义后端服务 服务参数
参数说明
协议
HTTP或HTTPS,定义的后端服务协议须与用户的后端业务协议保持一致。
说明:- API网关支持WebSocket数据传输,请求协议中的HTTP相当于WebSocket的ws,HTTPS相当于WebSocket的wss。
- 传输重要或敏感数据时推荐使用HTTPS。
请求方式
接口调用方式,包括GET、POST、DELETE、PUT、PATCH、HEAD、OPTIONS、ANY。
其中ANY表示该API支持任意请求方法。
使用VPC通道
是否使用VPC通道访问后端服务。
- 如果使用VPC通道,选择已创建的VPC通道名称。
VPC通道中,云服务器的安全组必须允许100.125.0.0/16网段访问,否则将导致健康检查失败及业务不通。
- 如果不使用VPC通道,需要设置后端服务地址。
填写后端服务的访问地址,格式:“主机:端口”。主机为后端服务的访问IP地址/域名,未指定端口时,HTTP协议默认使用80端口,HTTPS协议默认使用443端口。
如果后端服务地址中需要携带环境变量,则使用“#变量名#”的形式将环境变量添加到后端服务地址中,如#ipaddress#。支持添加多个环境变量,如#ipaddress##test#。
自定义host头域(可选)
仅当“使用VPC通道”选择“使用”时可配置。
在请求被发送到VPC通道中主机前,允许您自定义请求的Host头域,默认将使用请求中原始的Host头域。
后端请求Path
后端服务的路径,即服务的uri,可以包含路径参数,以{路径参数}形式表示,比如/getUserInfo/{userId}。
如果请求路径中含有环境变量,则使用#变量名#的方式将环境变量定义到请求路径中,如/#path#。支持创建多个环境变量,如/#path##request#。
后端超时
后端服务请求的超时时间,可填写范围1ms~60000ms。
如果在API调试过程中,遇到后端响应超时之类的错误,请适当调大后端超时时间,以便排查原因。
后端认证
当您的后端服务需要对API调用增加自己的认证,则需要开启后端认证。
后端认证需要先添加一个自定义认证,自定义认证通过函数工作流服务实现,在函数工作流服务中编写一个函数,实现您的认证鉴权流程,或者使用函数调用您的统一鉴权服务。
说明:后端认证依赖函数工作流服务,此功能仅在部分区域开放。
表5 FunctionGraph类型定义后端服务 服务参数
参数说明
FunctionURN
函数请求唯一标识。
单击“添加”,添加所需的FunctionURN。
版本或别名
支持选择函数的版本或别名,函数的版本或别名功能请参考《函数工作流 FunctionGraph用户指南》的“版本管理”和“别名管理”章节。
调用类型
- Synchronous:同步调用。指后端函数工作流服务收到调用请求后立即执行并返回调用结果,客户端发送请求后同步等待,收到后端响应后关闭连接。
- Asynchronous:异步调用。客户端不关注请求调用的结果,服务端收到请求后将请求排队,排队成功后请求就返回,服务端在空闲的情况下会逐个处理排队的请求。
后端超时
参考表4中的后端超时。
后端认证
参考表4中的后端认证。
表6 Mock类型定义后端服务 服务参数
参数说明
Mock自定义返回码
选择API响应的HTTP状态码,如果当前实例不支持,请联系技术支持升级实例。
Mock返回结果
Mock一般用于开发调试验证。在项目初始阶段,后端服务没有搭建好API联调环境,可以使用Mock模式,将预期结果固定返回给API调用方,方便调用方进行项目开发。
后端认证
参考表4中的后端认证。
请求头参数
自定义API响应的响应头信息。
单击“添加header参数”,并填写参数名、参数值和参数描述。
- 如果“后端请求Path”中设置了环境变量,在API调试页面将无法调试API。
- 如果“后端请求Path”中设置了环境变量,则必须在待发布环境上配置变量名和变量值,否则变量无法赋值,API将无法正常调用。
- 环境变量名严格区分大小写。
- (可选)添加后端策略。
添加多个后端策略后,通过不同的策略条件,请求被转发到不同的后端服务中。
- 单击“添加策略后端”。
- 策略后端增加的参数,具体如表7所示,其他参数说明参见表4。
图3 添加后端策略
表7 后端策略参数 信息项
描述
后端策略名称
您自定义的名称,用于识别不同的后端策略。
生效方式
- 满足任一条件:只要满足策略条件中的任意一项,此后端策略就可以生效。
- 满足全部条件:只有满足所有的策略条件,此后端策略才生效。
策略条件
使后端策略生效的条件,具体如表8所示。
表8 策略条件 信息项
描述
条件来源
- 源地址:以访问API的请求地址作为策略条件来源。
- 请求入参:以请求入参参数作为策略条件来源。
须知:选择“请求入参”作为策略条件时,入参需要在API前端请求中配置好,如在Header中添加一个参数。
参数名称
- 当“条件来源”为“请求入参”时,需要设置。选择已创建的入参参数名称。
参数位置
仅在“条件来源”为“请求入参”时,展示请求入参的参数位置。
条件类型
仅在“条件来源”为“请求入参”时,需要设置。
- 相等:请求参数值必须为输入值时,条件成立。
- 枚举:请求参数值只需要和枚举值中任何一个值相同,条件成立。
- 匹配:请求参数值只需要和正则表达式中任何一个值相同,条件成立。
条件值
- “条件类型”为“相等”时,输入一个值。
- “条件类型”为“枚举”时,输入多个值,以英文逗号隔开。
- “条件类型”为“匹配”时,输入一个范围,例如:[0-5]。
- “条件来源”为“源地址”时,输入一个或多个IP地址,以英文逗号隔开。
- (可选)配置后端服务参数。
将调用API时传入的参数映射到后端服务对应的位置。
- 在“后端服务参数”右侧单击,通过以下任意一种方法配置后端服务参数。
- 单击“导入入参定义”,系统自动添加已创建的所有入参参数。
- 单击“添加后端参数映射”,按照需求添加您所需要的后端参数映射。
- 根据后端服务实际的参数名称和参数位置修改映射关系,如图4所示。
- 参数在“PATH”位置,那么参数名称需要和“后端请求Path”中的名称相同。
- 调用API的请求参数名称、位置可以与后端参数名称、位置不同。
- 参数名不能是x-apig- 、x-sdk-开头,不区分大小写。
- 参数名不能是x-stage,不区分大小写。
- 参数位置为HEADER时,参数名不区分大小写,也不支持下划线。
- 如上图,test01和test03在调用API时分别配置于PATH和QUERY位置,后端服务通过映射,将在HEADER位置接收test01和test03的值。test02在调用API时配置于HEADER位置,后端服务通过映射,将在PATH位置以参数名test05来接收test02的值。
例如,test01为abc,test02为def,test03为xyz。
调用API请求:
curl -ik -H 'test02:def' -X GET https://www.example01.com/v1.0/abc?test03=xyz
后端服务请求:
curl -ik -H 'test01:abc' -H 'test03:xyz' -X GET https://www.example02.com/v1.0/def
- 在“后端服务参数”右侧单击,通过以下任意一种方法配置后端服务参数。
- (可选)设置常量参数。
如果后端服务需要接收API调用者不可见的常量,可以通过设置常量参数来实现。API网关在请求后端服务时,将常量参数增加到指定请求位置,并将请求发送给后端服务。
常量参数会明文展示,为防止信息泄露,请谨慎配置。
- 在“常量参数”右边单击,显示常量参数列表。
- 单击“添加常量参数”,输入如表9所示信息。
图5 添加常量参数
表9 常量参数 信息项
描述
常量参数名
常量参数的名称,如果参数在“PATH”位置,那么参数名称需要和“后端请求Path”中的名称相同。
说明:- 参数名不能是x-apig- 、x-sdk-开头,不区分大小写。
- 参数名不能是x-stage,不区分大小写。
- 参数位置为HEADER时,参数名不区分大小写,也不支持下划线。
参数位置
选择参数在请求中的位置。
参数位置有如下三种:PATH、QUERY、HEADER
参数值
输入参数的值。
描述
对于此常量参数的描述。
- API网关将包含常量参数的请求发送给后端服务前,会对特殊参数值进行百分号编码,请确保后端服务支持百分号编码。例如,参数值[apig],在百分号编码后变为%5Bapig%5D。
- “PATH”位置的参数值会对如下字符进行百分号编码:ASCII码为0到31的字符、?、>、<、/、%、#、"、[、\、]、^、`、{、|、}、空白符、ASCII码为127到255的字符。
- “QUERY”位置的参数值会对如下字符进行百分号编码:ASCII码为0到31的字符、>、=、<、+、&、%、#、"、[、\、]、^、`、{、|、}、空白符、ASCII码为127到255的字符。
- (可选)设置系统参数。
系统参数指API网关服务处理API请求时的系统运行时参数信息,包括网关内置参数、前端认证参数、后端认证参数等,API的后端服务获取到这些信息,可以用于做一些辅助性的访问控制或提供自定义认证能力。
- 在“系统参数”右边单击,显示系统参数列表。
- 单击“添加系统参数”,输入如表10所示信息。
图6 添加系统参数
表10 系统参数 信息项
描述
系统参数类型
- 网关内置参数:API网关支持配置的参数。
- 前端认证参数:前端自定义认证返回结果中的参数。在基本信息中,使用“自定义认证”后,才可以选择此参数类型。
- 后端认证参数:后端自定义认证返回结果中的参数。在定义后端服务中,开启“后端认证”后,才可以选择此参数类型。
系统参数名称
- “系统参数类型”为“网关内置参数”时,支持选择如下参数:
- sourceIp:API调用者的源地址。
- stage:API调用的部署环境。
- apiId:API的ID。
- appId:API调用者的APP ID。
- requestId:当次调用API所生成的请求ID。
- serverAddr:网关服务器的地址 。
- serverName:网关服务器的名称。
- handleTime:本次调用API的处理时间。
- providerAppId:API提供者的应用ID。
- “系统参数类型”为“前端认证参数”/“后端认证参数”时,此参数名称必须和自定义认证函数返回结果中的参数名称一致。
自定义认证函数的编写以及返回结果参数的获取方法,请参考《API网关开发指南》。
后端参数名称
将系统参数映射到后端参数中。设置需要映射的后端参数名称。
说明:- 参数名不能为x-apig- 、x-sdk-开头,不区分大小写。
- 参数名不能是x-stage,不区分大小写。
- 参数位置为HEADER时,参数名不支持下划线且名称重复时不区分大小写。
后端参数位置
设置需要映射的后端参数位置。
描述
对于此系统参数的描述。
- 单击“下一步”,进入“返回结果基础定义”页面。
定义返回结果
- 在“返回结果基础定义”页面,填写如表11所示信息。
- 单击“完成”,完成API的创建。
API创建完成后,在API列表页面单击API名称,查看API详细信息。
后续操作
您创建完API后,通过调试API,验证服务是否正常。