API网关用户指南(开放API)用户指南(开放API)API网关(APIGateway),提供高性能、高可用的API托管服务,帮助您对外开放您部署在ECS、容器服务等阿里云产品上的应用,为您提供完整的API发布、管理、维护生命周期管理.
您只需简单操作,即可快速、低成本、低风险的开放数据或服务.
在API网关您可以:管理您的API您可以对API的整个生命周期进行管理,包括API的创建、测试、发布、下线、版本切换等操作.
便捷转换数据支持自定义映射规则,您可以配置映射将调用请求转换成后端需要的格式.
预设请求校验您可以预先设置参数类型、参数值(范围、枚举、正则、JsonSchema)校验,由网关帮助您过滤掉非法请求,减少您的后端对非法请求的处理成本.
灵活控制流量您可以对API、用户、应用设置按分钟、小时、天的调用量控制.
您还可以设置特例用户或者应用,对某个用户或应用单独配置流量控制.
轻松安全防护支持Appkey认证,HMAC(SHA-1,SHA-256)算法签名.
支持SSL/TSL加密,并借助阿里云盾防病毒、防攻击.
全面监控与报警为您提供可视化API实时监控,包括:调用量、调用方式、响应时间、错误率,并支持历史情况查询,以便统筹分析.
您还可以配置预警方式(短信、Email),订阅预警信息,以便实时掌握API运行情况.
降低开放成本API网关用户指南(开放API)1--i.
ii.
iii.
--为您自动生成API文档和SDK(服务端、移动端),降低API开放成本.
创建API即录入API的定义,支持"入参映射"和"入参透传"两种请求模式.
创建API创建API需要录入API的基本信息、服务信息、请求信息、返回信息.
此外,网关支持您配置常量参数、系统参数,这些参数对您的用户不可见,但是网关可以在中转时将常量参数、系统参数加入请求中,传递至后端服务,满足您后端的一些业务需求.
比如您需要网关每次向您发送请求都带有一个keywordaligateway,您就可以把aligateway配置为常量参数,并指定接收的位置.
第一部分:定义请求的基本信息API基本信息包括API分组、API名称、安全认证方式、API类型、描述.
API创建时需要选择分组.
分组是API的管理单元,创建API之前您需要先创建分组(API分组的详细说明见API开放),选择分组即选择Region.
API名称:API名称标识,需要手工录入.
安全认证方式:是API请求的认证方式,目前支持阿里云APP、OpenIDConnect和无认证三种认证方式.
阿里云APP:认证方式即要求请求者调用该API时能够通过对APP的身份认证.
OpenIDConnect:是一套基于OAuth2.
0协议的轻量级规范,提供通过RESTfulAPIs进行身份交互的框架.
可以使用OpenIDConnect和您的自有账号系统无缝对接,详细介绍请参照OpenIDConnect.
无认证:认证方式即任何人知晓该API的请求定义后,均可发起请求,网关不对其做身份验证,均会转发至您后端服务.
(强烈不建议使用此模式)API类型分为公开和私有两种.
1.
私有类型的API,当所在分组上架云市场时,默认不包括该类型的API.
如果有用户想要调用您的API,您需要主动操作授权,否则用户无渠道获取API信息.
2.
公开类型的API,所有用户均有机会在发现API页面看到API的部分信息.
公开类型的API都会跟API分组上架到云市场,供用户购买和调用.
描述:API功能描述,会生成在API文档中.
第二部分:定义API请求这部分是定义用户如何请求您的API,包括协议、Method、Path、入参的定义.
协议.
API调用支持HTTP/HTTPS协议.
API网关用户指南(开放API)2-i.
a.
b.
qqc.
qqqqqqqqqa.
b.
c.
-qqqqqqqqMethod.
支持标准的HTTPMethod,可选择PUT、GET、POST、DELETE、HEAD.
Path.
Path指相对于服务host,API的请求路径.
请求Path可以与后端服务实际Path不同,您可以随意撰写合法的有明确语义的Path给用户使用.
您可以在请求Path中配置动态参数,即要求用户在Path中传入参数,同时您的后端又可以不在Path中接收,可以映射为在Query、Header等位置接收.
在开放API接入API网关中,有详细的举例说明,更有清晰的截图展示.
入参请求模式.
网关对入参的处理模式,支持"入参映射"和"入参透传"两种模式.
入参映射:既API网关在接收到您的API请求时,通过映射关系将请求转换成您后端需要的格式.
使用入参映射模式:定义方式:此类API需要在定义时添加前后端参数映射关系.
使用场景同一接口,在API网关定义不同的API,以服务差异化的用户;通过API网关规范化陈旧系统接口.
实现功能支持您配置前端和后端的全映射,即参数混排.
可以让API的消费者在Query传入参数,后端从Header里接收等.
参数名称转换参数位置转换可以定义参数的校验规则,实现请求参数的预校验,降低后端处理非法请求的压力.
参数长度校验参数数值大小校验参数正则校验参数JsonSchame校验入参透传:即API网关在接收到API请求后,不对请求进行处理,直接转发到后端服务.
此模式下:无法实现参数校验无法生成详细的API调用文档自动生成的SDK不包含请求入参入参.
定义您API的请求入参,包含参数名、参数位置、类型、是否必填、默认值、示例、描述等信息.
入参透传模式下不需要录入参数.
参数名.
展示给用户的参数名称.
参数位置.
参数在请求中的位置,包含Head、Query、Body、Path(ParameterPath),当您在Path中配置了动态参数,存在参数位置为ParameterPath的同名参数.
类型.
字段的类型,支持:String、Int、Long、Float、Double、Boolean.
是否必填.
指此参数是否为必填指,当选择为是时,网关会校验用户的请求中是否包含了此参数,若不存在则拒绝用户请求.
默认值.
当"是否必填"为否时生效,在用户请求中不包含此参数时,网关自动添加默认值给后端服务.
若用户传递,则按用户请求传递给后端服务.
示例.
指参数的填写示例,生成API文档、上架API市场时的参数示例.
描述.
参数的用途描述及使用的注意事项,生成API文档、上架API市场时的参数描述.
参数校验规则.
每个入参后可点击编辑更多配置校验规则.
如参数值的长度、取值大小、API网关用户指南(开放API)3-qq------枚举、正则、JsonShcame等等.
网关会参照校验规则对请求做初步校验,如果入参不合法,则不会到达您的后端服务,大大的降低了后端服务的压力.
第三部分:定义后端服务信息这部分主要是定义一些参数的前后端映射,具体描述的是您后端真实服务的API配置.
用户请求到达网关后,网关会根据您的后端配置映射为对应实际后端服务的请求形式,去请求您的后端.
包括后端服务地址、后端Path、后端超时时间、参数映射、常量参数、系统参数.
后端服务类型.
目前支持HTTP/HTTPS、FunctionCompute两种.
HTTP/HTTPS.
若您的服务为HTTP/HTTPS服务,则选择此项.
注意若您是HTTPS服务,后端服务必须有SSL证书.
FunctionCompute.
为阿里云函数计算,使用方法请参照:以函数计算作为API网关后端服务VPC通道.
当您的后端服务在VPC中时,需要使用此通道,使用方法:专属网络VPC环境开放API后端服务地址.
后端服务的host,可以是一个域名,也可以是http(s)://host:port的形式.
填写时,必须填写http://、https://后端Path.
Path是您的API服务在您后端服务器上的请求路径,实际请求路径.
若您后端Path需要接收动态参数,那么需要声明该参数是调用者从哪个位置哪个参数传入的,即声明映射关系.
后端超时时间.
指API请求到达网关后,网关去调API后端服务的响应时间.
由网关请求后端开始到网关收到后端返回结果.
该值不能超过30秒.
超过该值网关会放弃请求后端服务,并给用户返回相应的错误信息.
参数映射.
网关支持参数在前端、后端的全映射,包括名称映射和位置映射.
位置映射包括Path、Header、Query、Body的混排映射.
也就是说,您可以将您的后端服务通过映射完成包装成更规范、更专业的API形态.
这部分就是在声明前后端API映射关系的.
在开放API接入API网关中,有详细的举例说明,更有清晰的截图展示.
注意前后端参数名称不能重复.
常量参数.
比如您需要网关每次请求您后端时都带有标记apigateway,那么您可以直接将标记配置为常量参数.
常量参数对您的用户不可见,请求达到网关后,网关会自动在指定位置加上该参数再去请求您的后端.
系统参数.
指API网关的系统参数,这些参数默认不会传递给您,但是如果您需要获取,您可以在API里配置接收位置和名称.
具体内容如下表:参数名称参数含义CaClientIp发送请求的客户端IPCaDomain发送请求的域名CaRequestHandleTime请求时间(格林威治时间)CaAppId请求的APP的IDCaRequestIdRequestIdCaApiNameAPI名称CaHttpSchema用户调用API使用的协议,http或者httpsCaProxy代理(AliCloudApiGateway)API网关用户指南(开放API)4---注意:您所有录入的参数,包括Path中的动态参数、Headers参数、Query参数、Body参数(非二进制)、常量参数、系统参数,参数名称保证全局唯一.
即如果您同时在Headers和Query里各有一个名为name的参数,是不允许的.
第四部分定义返回结果您需要录入返回ContentType、返回结果示例、失败返回结果示例和错误码定义,将会生成API文档和在API市场的展示.
API调试API定义录入完成后,您可以在API调试页面调试API,以确定API的可用性.
发布完成以上定义后,您就完成了API的创建.
下一步您可以测试、发布、开放API服务到市场,还可以为API绑定签名密钥和流量控制等安全配置.
API创建完成后,您就可以开放API服务了.
要开放API服务您需要绑定一个在阿里云系统备案成功的独立域名,且该域名要完成CNAME解析.
而独立域名是绑定在API分组上面的,所以在这个部分为您详细说明一下开放API服务需要了解的API分组和域名.
第一部分:API分组API分组是API的管理单元.
您创建API之前,需要先创建分组,然后在某个分组下创建API.
分组包含名称、描述、区域(Region)、域名几大属性.
分组的区域(Region)在分组创建时选定不可更改.
创建API时,如果选定分组那么Region也一同选定,不可更改.
每个账号API分组个数上限为50个,每个分组API个数上限为200个.
域名.
分组创建时,系统会为分组分配一个二级域名.
如果需要开放API服务,您需要为分组绑定一个在阿里云系统备案成功的独立域名,且将独立域名CNAME到相应的二级域名上.
每个分组最多只能绑定5个独立域名.
具体请看下文——域名及证书.
第二部分:环境管理关于环境需要理解两个概念,环境和环境变量.
环境是API分组上的一个配置,每个分组有若干个环境.
API录入后,未经发布时,就只是API定义.
发布到某个环境后才是能够对外提供服务的API.
API网关用户指南(开放API)5----环境变量是在环境上用户可创建可管理的一种变量,该配置是固定于环境上的.
如在线上环境创建变量,变量名为Path,变量值为/stage/release.
在API定义中的Path位置,写作#Path#,即配置为变量标识,变量名为Path.
那么将该API发布到线上环境时,该API在线上环境的运行定义,Path处的#Path#,会取值为/stage/release.
而将该API发布到其他环境时,若环境上没有环境变量#Path#,则无法取值,那么API就无法调用.
使用环境变量可以解决后端服务需要区分环境的问题,通过不同的环境上配置不同的服务地址和Path,来调用不同的后端服务,同时API的定义配置又是一套.
使用时需要注意以下几点:在API定义中配置了变量标识后,在API列表—管理—调试页面将无法调试.
变量名严格区分大小写.
如果在API定义中设置了变量,那么一定要在要发布的环境上配置变量名和变量值,否则变量无赋值,API将无法正常调用.
第三部分:域名及证书API网关通过域名来定位到一个唯一的API分组,再通过Path+HTTPMethod确定唯一的API.
如果要开放API服务,您需要了解二级域名和独立域名.
二级域名是分组创建时系统分配的,唯一且不可更改.
在您还没有独立域名之前,您可以通过访问二级域名来测试调用您的API.
二级域名仅能用于测试,默认每天只能请求1000次.
独立域名即自定义域名,是您开放API服务需要绑定的,用户通过访问您的独立域名来调用您开放的API服务.
您可以为一个分组绑定多个独立域名,上限为5个.
对于独立域名的配置您需要注意以下几点:独立域名不必须是根域名,可以是二级、三级域名.
独立域名如果尚未备案,则可以在阿里云做首次备案.
独立域名若已在其他系统备案,则需要在阿里云做备案接入.
独立域名需要CNAME解析到分组的二级域名上.
满足上述的备案和解析两个要求,域名才能成功绑定.
当您的API服务支持HTTPS协议时,需要为该域名上传SSL证书,在分组详情页面进行添加即可.
SSL证书上传不支持文件上传,需要填写证书名称、内容和私钥.
API网关用户指南(开放API)6---------第四部分:测试、线上、授权通过上述操作您已经完成API的创建和域名绑定,接下来就可以将API发布到测试或者线上环境,进行调试和开放了.
其中一个重要的环节是授权,授权即授予某个APP可以调用某个API的权限.
当您完成API创建之后,您就可以将API发布到测试或者线上,并给自己创建的APP授权,通过访问二级域名来调用指定环境中的API,进行测试.
成功绑定独立域名之后,您的API就可以在市场上架,供客户购买、调用.
您还可以不经过购买将API授权给合作伙伴的APP,供其调用.
至此,您完成API服务的开放.
在API创建到开放的整个过程中,您还可以随时操作API的创建、修改、删除、查看、测试、发布、下线、授权、解除授权、发布历史及版本切换等操作.
API定义就是指您创建API时对API的请求结构的各方面定义.
您可以在控制台完成API定义的查看、编辑、删除、创建、复制.
您需要注意以下几点:当您需要编辑某个API的定义时,如果该API已经发布,对定义的修改不会对线上产生影响,定义修改后需要再次发布才能把修改后的定义同步到线上环境.
当您想要删除某个API,如果该API已经发布,则不允许直接删除API定义,需要先将API下线,然后删除.
API网关为您提供了复制定义的功能.
您可以从测试环境/线上环境复制线上的定义覆盖当前的最新定义,然后重新点击编辑进行修改.
API发布管理当您完成API的创建后,您可以将API发布到测试或者线上.
也可以将测试或者线上的API下线.
您需要注意以下几点:API创建完成后,发布到某环境,通过二级域名或者独立域名访问时,需要在请求的Header指定要请求的环境,参见请求示例.
当您要发布某个API时,如果该API在测试或者线上已经有版本在运行,您的此次发布将使测试或者线上的该API被覆盖,实时生效.
但是历史版本及定义会有记录,您可以快速回滚.
您可以将测试或者线上的某个API下线,下线之后,与策略、密钥、APP的绑定或者授权关系依然存在,再次上线时会自动生效.
如果要解除关系,需要专门操作删除.
API授权管理您的API如果上架到市场,那么购买者有权利操作给自己的某个APP授权.
如果不经过购买行为,您需要在线下跟合作伙伴建立使用关系,那么您需要通过授权来建立API和APP的权限关系.
您将API发布到线上环境后,需要给客户的APP授权,客户才能用该APP进行调用.
您有权对此类授权操作建立或者解除某个API与某个APP的授权关系,API网关会对权限关系进行验证.
操作授权时,您需要注意以下几点:您可以将一个或者多个API授权给一个或者多个APP.
批量操作时,建议不要同时操作多个分组下的API.
API网关用户指南(开放API)7------1.
2.
批量操作时,先选择API后选择环境.
比如一个API在测试和线上均有发布,最后选择了测试,就只会将测试下的该API授权.
您可以通过客户提供给您的AppID或者阿里云邮箱账号来定位APP.
当您需要解除某个API下某个APP的授权时,您可以查看API的授权列表,在列表页进行解除.
历史与版本切换您可以查看您每个API的发布历史记录,包括每次发布的版本号、说明、环境、时间和具体定义内容.
查看历史时,您可以选定某个版本然后操作切换到此版本,该操作会使该版本直接在指定环境中替换之前的版本,实时生效.
什么是签名密钥签名密钥是由您创建的一对Key和Secret,相当于您给网关颁发了一个账号密码,网关向您后端服务请求时会将密钥计算后一起传过去,您后端获取相应的字符串做对称计算,就可以对网关做身份验证.
使用时您需要了解以下几点:创建密钥时需要选择Region,Region一旦选定不能更改,而且密钥只能被绑定到同一个Region下的API上.
一个API仅能绑定一个密钥,密钥可以被替换和修改,可以与API绑定或者解绑.
您将密钥绑定到API之后,由网关抛向您服务后端的该API的请求均会加上签名信息.
您需要在后端做对称计算来解析签名信息,从而验证网关的身份.
具体HTTP加签说明请查看文档——后端签名密钥说明文档密钥泄露修改替换当您遇到如下情况:您的某一个密钥发生了泄露,您可能想要保留该密钥与API的绑定关系,但是想要修改密钥的Key和Secret.
当您操作将密钥应用于API时,可能该API已经绑定了某个密钥,需要替换密钥.
以上两种情况都建议按照下面的流程来操作:先在后端同时支持两个密钥:原来的密钥和即将修改或替换的密钥,确保切换过程中的请求能够通过签名验证,不受修改或替换的影响.
后端配置完备后,完成修改,确定新Key和Secret生效后再将之前已泄露或废弃的密钥删除.
流量控制策略和API分别是独立管理的,操作两者绑定后,流控策略才会对已绑定的API起作用.
API网关用户指南(开放API)8在已有的流量控制策略上,可以额外配置特殊用户和特殊应用(APP),这些特例也是针对当前策略已绑定的API生效.
流量控制策略可以配置对API、用户、应用三个对象的流控值,流控的单位可以是分钟、小时、天.
使用流量控制策略您需要了解以下几点:流量控制策略可以涵盖下表中的维度:在一个流控策略里面,这三个值可以同时设置.
请注意,用户流量限制应不大于API流量限制,APP流量限制应不大于用户流量限制.
即APP流量限制:"API网关用户指南(开放API)21-------service-name为:阿里云产品名称,请填写apigatewayaction-name为:API接口名称,请参照下表,支持通配符*第三部分:Resource(操作对象列表)Resource通常指操作对象,API网关中的API分组、流控策略、应用都被称为Resource,书写格式:其中:acs:AlibabaCloudService的首字母缩写,表示阿里云的公有云平台service-name为:阿里云产品名称,请填写apigatewayregion:地区信息,可以使用通配符*号来代替,*表示所有区域account-id:账号ID,比如1234567890123456,也可以用*代替relative-id:与API网关相关的资源描述部分,这部分的格式描述支持类似于一个文件路径的树状结构.
示例:书写:请结合API网关的API手册来查看下表"Action":"apigateway:Describe*"表示所有的查询操作"Action":"apigateway:*"表示API网关所有操作acs::::acs:apigateway:$regionid:$accountid:apigroup/$groupIdacs:apigateway:*:$accountid:apigroup/action-name资源(Resource)AbolishApiacs:apigateway:$regionid:$accountid:apigroup/$groupIdAddTrafficSpecialControlacs:apigateway:$regionid:$accountid:trafficcontrol/$trafficcontrolidCreateApiacs:apigateway:$regionid:$accountid:apigroup/$groupIdCreateApiGroupacs:apigateway:$regionid:$accountid:apigroup/*CreateTrafficControlacs:apigateway:$regionid:$accountid:trafficcontrol/*DeleteAllTrafficSpecialControlacs:apigateway:$regionid:$accountid:trafficcoAPI网关用户指南(开放API)22ntrol/$trafficcontrolidDeleteApiacs:apigateway:$regionid:$accountid:apigroup/$groupIdDeleteApiGroupacs:apigateway:$regionid:$accountid:apigroup/$groupIdDeleteDomainacs:apigateway:$regionid:$accountid:apigroup/$groupIdDeleteDomainCertificateacs:apigateway:$regionid:$accountid:apigroup/$groupIdDeleteTrafficControlacs:apigateway:$regionid:$accountid:trafficcontrol/$trafficcontrolIdDeleteTrafficSpecialControlacs:apigateway:$regionid:$accountid:trafficcontrol/$trafficcontrolIdDeployApiacs:apigateway:$regionid:$accountid:apigroup/$groupIdDescribeApiacs:apigateway:$regionid:$accountid:apigroup/$groupIdDescribeApiErroracs:apigateway:$regionid:$accountid:apigroup/$groupIdDescribeApiGroupDetailacs:apigateway:$regionid:$accountid:apigroup/$groupIdDescribeApiGroupsacs:apigateway:$regionid:$accountid:apigroup/*DescribeApiLatencyacs:apigateway:$regionid:$accountid:apigroup/$groupIdDescribeApiQpsacs:apigateway:$regionid:$accountid:apigroup/$groupIdDescribeApiRulesacs:apigateway:$regionid:$accountid:apigroup/$groupIdDescribeApisacs:apigateway:$regionid:$accountid:apigroup/$groupIdDescribeApisByRuleacs:apigateway:$regionid:$accountid:trafficcontrol/$trafficcontrolIdoracs:apigateway:$regionid:$accountid:secretkey/$secretKeyIdDescribeApiTrafficacs:apigateway:$regionid:$accountid:apigroup/$groupidDescribeAppsByApiacs:apigateway:$regionid:$accountid:apigroup/$groupIdAddBlackListacs:apigateway:$regionid:$accountid:blacklist/*DescribeBlackListsacs:apigateway:$regionid:$accountid:blacklist/*API网关用户指南(开放API)23DescribeDeployedApiacs:apigateway:$regionid:$accountid:apigroup/$groupIdDescribeDeployedApisacs:apigateway:$regionid:$accountid:apigroup/$groupIdDescribeDomainacs:apigateway:$regionid:$accountid:apigroup/$groupIdDescribeDomainResolutionacs:apigateway:$regionid:$accountid:apigroup/$groupIdDescribeHistoryApiacs:apigateway:$regionid:$accountid:apigroup/$groupIdDescribeHistoryApisacs:apigateway:$regionid:$accountid:apigroup/*DescribeRulesByApiacs:apigateway:$regionid:$accountid:group/$groupIdDescribeSecretKeysacs:apigateway:$regionid:$accountid:secretkey/*DescribeTrafficControlsacs:apigateway:$regionid:$accountid:trafficcontrol/*ModifyApiacs:apigateway:$regionid:$accountid:apigroup/$groupIdModifyApiGroupacs:apigateway:$regionid:$accountid:apigroup/$groupIdModifySecretKeyacs:apigateway:$regionid:$accountid:secretkey/$secretKeyIdRecoverApiFromHistoricalacs:apigateway:$regionid:$accountid:apigroup/$groupIdRefreshDomainacs:apigateway:$regionid:$accountid:apigroup/$groupIdRemoveAccessPermissionByApisacs:apigateway:$regionid:$accountid:apigroup/$groupIdRemoveAccessPermissionByAppsacs:apigateway:$regionid:$accountid:apigroup/$groupIdRemoveAllBlackListacs:apigateway:$regionid:$accountid:blacklist/*RemoveApiRuleacs:apigateway:$regionid:$accountid:apigroup/$groupId(acs:apigateway:$regionid:$accountid:secretkey/$secretKeyIdoracs:apigateway:$regionid:$accountid:trafficcontrol/$trafficcontrolId)RemoveAppsFromApiacs:apigateway:$regionid:$accountid:apigroup/$groupIdRemoveBlackListacs:apigateway:$regionid:$accountid:blacklist/$blacklistidAPI网关用户指南(开放API)24---使用阿里云专属网络VPC,可以构建出一个隔离的网络环境,并可以自定义IP地址范围、网段、路由表和网关等;此外,也可以通过专线/VPN/GRE等连接方式实现云上VPC与传统IDC的互联,构建混合云业务.
API网关也支持您部署在专属网络VPC中的服务开放API.
在开始此文章之前,请确认您已经了解专属网络VPC的使用方法.
若您的后端服务在VPC环境,需要进行授权API网关访问才可开放相应API.
创建API流程如下:1授权与绑定VPC开放VPC环境的API,需要您先授权API网关可访问您VPC内的服务.
授权时需指定API网关可以访问的资源+端口,如:SLB的443端口、ECS的80端口.
授权成功后,API网关将通过内网访问VPC内部资源此授权只会被用作API网关访问相应后端资源API网关不可访问未被授权的资源或者端口例如:只将VPC1中SLB1的80端口授权给API网关,那么API网关只能访问vpc1中SLB1的80端口SetAccessPermissionByApisacs:apigateway:$regionid:$accountid:apigroup/$groupIdSetAccessPermissionsacs:apigateway:$regionid:$accountid:apigroup/$groupIdSetApiRuleacs:apigateway:$regionid:$accountid:apigroup/$groupId(acs:apigateway:$regionid:$accountid:secretkey/$secretKeyIdoracs:apigateway:$regionid:$accountid:trafficcontrol/$trafficcontrolId)SetDomainacs:apigateway:$regionid:$accountid:apigroup/$groupIdSetDomainCertificateacs:apigateway:$regionid:$accountid:apigroup/$groupIdSwitchApiacs:apigateway:$regionid:$accountid:apigroup/$groupIdCreateSecretKeyacs:apigateway:$regionid:$accountid:secretkey/*DeleteSecretKeyacs:apigateway:$regionid:$accountid:secretkey/$secretKeyIdAPI网关用户指南(开放API)25----1.
1准备VPC环境1)购买VPC环境的,SLB、ECS,并搭建服务,可以参照VPC使用手册2)查询VPC信息,需要准备如下VPC信息VPCID:您后端服务所在的VPCID实例ID:您后端所在的实例ID,可以是ECS或者SLB的实例ID,若使用了SLB,请填写SLB的实例ID端口号:调用您后端服务所使用的端口号1.
2授权API网关访问进入【API网关控制台】-【开放API】-【VPC授权】,点击"创建授权"进入授权页面,填写相应信息VPC名称:为此条授权的名称标识,供创建API时选择后端地址使用,所以为了便于后续管理,请保证此名称的唯一.
API网关用户指南(开放API)26--点击确定,完成授权若您有多个VPC,或者要授权多个实例、端口,请重复如上步骤2创建API创建API的流程与其他类型API方式一致,请参照:创建API.
在选择后端服务地址时,请选择:VPC通道:请选择"使用VPC通道"VPC授权:请选按需求选择所创建的授权其他部分内容,与其他API定义方式一致API网关用户指南(开放API)27---保存后,则API创建完成.
3安全组授权视情况必需:对于后端使用SLB,或者没有改动过ECS安全组授权策略的用户,可以跳过此步.
若您API的后端服务为ECS,且您修改过安全组"内网入方向"访问策略,需要增加问策略允许如下IP段访问(请根据服务所区域配置).
3API测试可以到通过以下方式测试您的API调试API下载SDK使用API调用Demo区域方向IP杭州内网入方向100.
104.
13.
0/24北京内网入方向100.
104.
106.
0/24深圳内网入方向100.
104.
8.
0/24上海内网入方向100.
104.
8.
0/24香港内网入方向100.
104.
175.
0/24新加坡内网入方向100.
104.
175.
0/24API网关用户指南(开放API)281.
2.
3.
4解除授权若您授权的资源或者端口不再提供服务,请删除相应授权.
5FAQ使用此功能是否有额外费用否,此功能免费使用,无额外费用产生.
是否可以绑定多个VPC可以,若您的后端服务在多个VPC,可以添加多个授权.
为什么我无法授权我的VPC请确认,VPCID、实例ID和端口号的正确,并保证授权策略和VPC在同一个区域.
授权API网关后,我的VPC安全么当您的VPC授权API网关可访问,网关与VPC的网络联通.
在安全方面做了限制,不会造成VPC的安全问题.
安全控制授权操作:只有VPC的所有者能够操作授权.
授权后API网关与VPC建立专享通道:他人不可使用此同道.
授权是针对某个资源的端口:无其他端口或资源的访问权限.
在项目开发过程中,往往是多个合作方一同开发,多个合作方相互依赖,而这种依赖在项目过程中会造成相互制约,理解误差也会影响开发进度,甚至影响项目的工期.
所以在开发过程中,一般都会使用Mock来模拟最初预定的返回结果,来降低理解偏差,从而提升开发效率.
API网关也支持Mock模式的简单配置.
API网关用户指南(开放API)29配置Mock在API编辑页面——后端基础定义,来配置Mock.
选择Mock模式可以选择使用Mock或者不使用Mock,选择使用Mock时会进行二次确认填写Mock返回结果Mock返回结果,可以填写您真实的返回结果.
目前支持是Json、XMl、文本等格式作为Mock返回结果.
如{"result":{"title":"API网关Mock测试",}API网关用户指南(开放API)30保存后Mock设置成功,请根据实际需要发布到测试或线上环境进行测试,也可以在API调试页面进行调试.
调试可以在调试API页面发起API调用来测试设置结果:这表示Mock设置成功.
解除Mock若您需要解除Mock,可以将第一幅图中的Mock,修改为不使用Mock即可,而Mock返回结果中的值不会被清除,以便您进行下一次的Mock.
修改完成后请发布,只有发布后才会真正生效.
函数计算(FunctionCompute)是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传,函数计算准备计算资源,并以弹性伸缩的方式运行用户代码.
而用户只需根据实际代码运行所消耗的资源付费.
详细了解请查看函数计算帮助文档.
API网关与函数计算对接,可以让您以API形式开放您的函数,并且解决认证、流量控制、数据转换等问题(查看API网关功能),让您的函数服务可以安全、简单的以API形式对外开放.
1实现原理API网关调用函数服务时,会将API的相关数据包装为一个Map形式传给函数计算服务,函数计算服务处理后,需要按照图中OutputFormat的格式返回statusCode,headers,body等相关数据,APIgateway再将函数计算返回的内容映射到statusCode,header,body等位置返回给客户端.
}API网关用户指南(开放API)312快速配置API配置方法:2.
1创建函数计算的Function1)到函数计算控制台创建Service.
去往函数计算控制台.
如果您已经创建过Function,可以忽略此步.
2)在刚创建的Service下创建Function,点击"新建函数".
并输入您的代码,详细操作请参照创建函数.
API网关用户指南(开放API)323)触发器页面点击"跳过"即可,最后点击完成.
2.
2配置跨服务授权Role和policy在此步,您需要将此函数的调用权限授权给API网关.
1)到RAM控制台创建角色,去往RAM控制台.
在"角色管理"页面,点击"创建角色".
API网关用户指南(开放API)332)绑定角色授权策略API网关用户指南(开放API)34该授权策略能访问账号下所有的Function.
如果想限制授权范围,可以按照下面步骤新创建自定义策略,然后绑定.
3)创建自定义策略.
在"策略管理"页面,点击"新建授权策略".
API网关用户指南(开放API)35图中策略内容为:其中的Resource代表要授权的资源,需要更改为自己账号下的资源.
当限定到某个具体的Function时,格式为"acs:fc:*:[AccountId]:services/[ServiceName]/functions/[FunctionName]".
当要授权某个账号下的所有Function时,可以为"acs:fc:*:[AccountId]:services/*"注意:当授权策略为单个Function时,后续更改Function,还需要重新修改该策略或者新增策略.
2.
3配置函数计算作为API后端服务{"Version":"1","Statement":[{"Effect":"Allow","Action":["fc:InvokeFunction"],"Resource":["acs:fc:*:1227466664334133:services/apitest/functions/*"]}]}API网关用户指南(开放API)36--在API编辑中,在选择API后端服务时,选择"FunctionCompute".
区域:函数计算对应的区域,当API和函数计算区域相同时,API通过内网调用函数计算,当区域不一样时,则走公网.
RoleArn:因为最终是由API网关去调用函数计算,为跨服务调用,因此需要用户授权后,API网关才能成功调用.
RoleArn为授权角色上的Arn.
可到RAM控制台角色详情中查看.
3API网关和函数计算对接的格式要求3.
1API网关给函数计算的输入格式当以函数计算作为API网关的后端服务时,API网关会把请求参数通过一个固定的Map结构传给函数计算的入参event,函数计算通过如下结构去获取需要的参数,然后进行处理,该结构如下:需要特别说明的是:当isBase64Encoded=true时,表明API网关传给函数计算的body内容是经过Base64编码的,函数计算需要先对body内容进行Base64解码后再处理.
反之,isBase64Encoded=false时,表明API网关没有对body内容进行Base64编码.
3.
2函数计算给API网关的输出格式同时,函数计算需要将输出内容通过如下JSON格式返回给API网关,方便API网关解析.
{"path":"apirequestpath","httpMethod":"requestmethodname","headers":{allheaders,includingsystemheaders},"queryParameters":{queryparameters},"pathParameters":{pathparameters},"body":"stringofrequestpayload","isBase64Encoded":"true|false,indicateifthebodyisBase64-encode"}API网关用户指南(开放API)37说明:1)当body内容为二进制时,需在函数计算中对body内容进行Base64编码,同时设置isBase64Encoded=true.
如果body无需Base64编码,isBase64Encoded可以设置为false.
API网关会对isBase64Encoded=true的body内容进行Base64解码后再透出给客户端.
2)在nodejs版本的函数计算中,callback需要根据不同的情况进行设置.
当返回一个成功的请求,callback{null,{"statusCode":200,"body":"…"}}.
需要抛一个异常时,callback{newError('internalservererror'),null}.
当返回一个客户端错误callback{null,{"statusCode":400,"body":"paramerror"}}.
3)如果函数计算返回不符合上面的格式要求,API网关将返回503ServiceUnavailable给客户端.
3.
3示例如在函数计算中配置一个demo程序:这是一个撞墙式返回程序的代码示例,会原装返回您所有的请求内容.
{"isBase64Encoded":true|false,"statusCode":httpStatusCode,"headers":{responseheaders},"body":".
.
.
"}module.
exports.
handler=function(event,context,callback){varresponseCode=200;console.
log("request:"+JSON.
stringify(event.
toString()));//将event转化为JSON对象event=JSON.
parse(event.
toString());varisBase64Encoded=false;//根据用户输入的statusCode返回,可用于测试不同statusCode的情况if(event.
queryParameters!
==null&&event.
queryParameters!
==undefined){if(event.
queryParameters.
httpStatus!
==undefined&&event.
queryParameters.
httpStatus!
==null&&event.
queryParameters.
httpStatusconsole.
log("Receivedhttpstatus:"+event.
queryParameters.
httpStatus);responseCode=event.
queryParameters.
httpStatus;}}//如果body是Base64编码的,FC中需要对body内容进行解码if(event.
body!
==null&&event.
body!
==undefined){if(event.
isBase64Encoded!
==null&&event.
isBase64Encoded!
==undefined&&event.
isBase64Encoded){event.
body=newBuffer(event.
body,'base64').
toString();}}//input是API网关给FC的输入内容varresponseBody={message:"HelloWorld!
",input:event};API网关用户指南(开放API)38以POSTform形式请求如下一个API的url,path为:API网关返回内容://对body内容进行Base64编码,可根据需要处理varbase64EncodeStr=newBuffer(JSON.
stringify(responseBody)).
toString('base64');//FC给API网关返回的格式,须如下所示.
isBase64Encoded根据body是否Base64编码情况设置varresponse={isBase64Encoded:true,statusCode:responseCode,headers:{"x-custom-header":"headervalue"},body:base64EncodeStr};console.
log("response:"+JSON.
stringify(response));callback(null,response);};/fc/test/invoke/[type].
POSThttp://test.
alicloudapi.
com/fc/test/invoke/testparam1=aaa¶m2=bbb"X-Ca-Signature-Headers":"X-Ca-Timestamp,X-Ca-Version,X-Ca-Key,X-Ca-Stage","X-Ca-Signature":"TnoBldxxRHrFferGlzzkGcQsaezK+ZzySloKqCOsv2U=","X-Ca-Stage":"RELEASE","X-Ca-Timestamp":"1496652763510","Content-Type":"application/x-www-form-urlencoded;charset=utf-8","X-Ca-Version":"1","User-Agent":"Apache-HttpClient\/4.
1.
2(java1.
6)","Host":"test.
alicloudapi.
com","X-Ca-Key":"testKey","Date":"Mon,05Jun201708:52:43GMT","Accept":"application/json","headerParam":"testHeader"{"bodyParam":"testBody"}200Date:Mon,05Jun201708:52:43GMTContent-Type:application/json;charset=UTF-8Content-Length:429Access-Control-Allow-Origin:*Access-Control-Allow-Methods:GET,POST,PUT,DELETE,HEAD,OPTIONS,PATCHAccess-Control-Allow-Headers:X-Requested-With,X-Sequence,X-Ca-Key,X-Ca-Secret,X-Ca-Version,X-Ca-Timestamp,X-Ca-Nonce,X-Ca-API-Key,X-Ca-Stage,X-Ca-Client-DeviceId,X-Ca-Client-AppId,X-Ca-Signature,X-Ca-Signature-Headers,X-Forwarded-For,X-Ca-Date,X-Ca-Request-Mode,Authorization,Content-Type,Accept,Accept-Ranges,Cache-Control,Range,Content-MD5Access-Control-Max-Age:172800X-Ca-Request-Id:16E9D4B5-3A1C-445A-BEF1-4AD8E31434ECx-custom-header:headervalueAPI网关用户指南(开放API)394.
多环境可以通过API网关的环境管理功能来实现测试环境的管理.
目前每个API分组可以有三个环境:测试、预发和线上(后续会开放多个,实现自助管理).
API网关,为避免用户测试、线上不停变化后端地址,增加环境级变量参数的来实现请求的自动路由.
环境级变量参数,即在每个环境中可以自定义公共常量参数.
当用户发API调用时,可以在放置请求任意位置,传递给后端服务,以实现网关对请求的路由.
API网关将适配您请求中的环境参数信息来区分请求环境.
4.
1配置方法4.
1.
1定义环境变量1)您可以在【开放API】-【API分组】菜单找到环境配置按钮:{"message":"HelloWorld!
","input":{"body":"{\"bodyParam\":\"testBody\"}","headers":{"X-Ca-Api-Gateway":"16E9D4B5-3A1C-445A-BEF1-4AD8E31434EC","headerParam":"testHeader","X-Forwarded-For":"100.
81.
146.
152","Content-Type":"application/x-www-form-urlencoded;charset=UTF-8"},"httpMethod":"POST","isBase64Encoded":false,"path":"/fc/test/invoke/test","pathParameters":{"type":"test"},"queryParameters":{"param1":"aaa","param2":"bbb"}}}API网关用户指南(开放API)402)在测试、预发、线上环境,分别新增一个变量.
Name:是变量的名称,可以自行定义,但要保持三个环境中都有相同的变量名称.
小提示:您如果有多个API,建议Name标识有实际意义,以便后续查询.
Value:对应你在函数服务中的Service或者Function名称.
注意:请按您实际的名称填写,否则可能造成无法调用.
下面以Service为例介绍:比如:我有个函数服务,测试、预发、线上的名称分别为:TestServiceD、PreServiceD、ServiceD.
那么我需要测试、预发、线上分别定义一个Service的变量,并填写相应Value函数名称,也可以同理录入,您可以录入一个叫Function的环境变量.
4.
1.
2定义API在定义API是可以在Service、Function的位置用"#"隔开,输入您环境变量的Name,如图:API网关用户指南(开放API)41注意:使用多环境后,将暂时无法使用"调试"功能4.
2调用多环境API发布您的API后,您即可发起API调用.
4.
1正式环境直接发起您的API调用,即调用测试环境.
4.
2预发环境您只需要在调用API时,在Header中增加入参X-Ca-Stage:RELEASE即可访问预发环境的API.
4.
2测试环境您只需要在调用API时,在Header中增加入参X-Ca-Stage:TEST即可访问测试环境的API.
5.
FAQ为什么我无法录入我已有的Function函数计算服务由很严格的权限控制机制,所以您必须授权API网关可以使用,因此请在确认您的Function存在,并且可用的情况下,检查一下授权关系是否存在.
API网关用户指南(开放API)42--我是否可以将多个Function作为API的后端服务不可以,目前API和Function是一对一的关系存在.
API网关支持HTTP2.
0API网关支持HTTP2.
0新特性,支持API请求多路复用、支持请求头压缩.
多路复用(MultiPlexing):消除了HTTP1.
x中并行处理和发送请求及响应时对多个连接的依赖.
可客户端和服务器可以把HTTP消息分解为互不依赖的帧,然后乱序发送,最后再在另一端把它们重新组合起来.
从而避免不必要的延迟,提升效率,在请求量比较大的场景,客户端也可以轻松使用少量连接完成大量请求数据的传输.
header压缩:如上文中所言,HTTP1.
x的header带有大量信息,而且每次都要重复发送.
HTTP2.
0使在客户端和服务器端使用"首部表"来跟踪和存储之前发送的键值对,对于相同的数据,不再通过每次请求和响应发送;"首部表"在HTTP2.
0的连接存续期内始终存在,由客户端和服务器共同渐进地更新;每个新的首部键值对要么追加到当前表的末尾,要么替换表中之前的值.
从而减少每次请求的数据量.
API网关用户指南(开放API)43-如何开启HTTP2.
0新建的API分组(2017年7月14日以后)HTTPS的API都可以使用HTTP2协议进行客户端和API网关的通信.
(由于HTTP2.
0只许在HTTPS下运行,所以需要您开启HTTPS方可启用HTTP2.
0)存量API分组您需稍做等待,后续将提供功能手动开启.
HTTPS在HTTP的基础上加入了SSL协议,对信息、数据加密,用来保证数据传输的安全.
现如今被广泛使用.
API网关也支持使用HTTPS对您的API请求进行加密.
可以控制到API级别,即您可以强制您的API只支持HTTP、HTTPS或者两者均支持.
如果您的API需要支持HTTPS,以下为操作流程:步骤1:准备您需要准备如下材料:一个自有可控域名.
为这个域名申请一个SSL证书SSL证书会包含两部分内容:XXXXX.
key、XXXXX.
pem,可以使用文本编辑器打开API网关用户指南(开放API)44示例:KEYPEM步骤2:绑定SSL证书准备好以上材料,需要进行如下操作进行,登陆API网关管理控制台【开放API】-【分组管理】,单击您需要绑定SSL证书的分组,查看分组详情在绑定SSL证书,您首先需要您在API分组上绑定【独立域名】【独立域名】-添加SSL证书-----BEGINRSAPRIVATEKEY-----MIIEpAIBAAKCAQEA8GjIleJ7rlo86mtbwcDnUfqzTQAm4b3zZEo1aKsfAuwcvCud.
.
.
.
-----ENDRSAPRIVATEKEY----------BEGINCERTIFICATE-----MIIFtDCCBJygAwIBAgIQRgWF1j00cozRl1pZ+ultKTANBgkqhkiG9w0BAQsFADBP.
.
.
-----ENDCERTIFICATE-----API网关用户指南(开放API)45------证书名称:用户自定义名称,以供后续识别证书内容:证书的完整内容,需要复制XXXXX.
pem中的全部内容私钥:证书的私钥,需要复制XXXXX.
key中的内容.
点击【确定】后,完成SSL证书的绑定.
步骤3:API配置调整绑定SSL证书后,您可以按API控制不同的访问方式,支持HTTP、HTTPS、HTTP和HTTPS三种,出于安全考虑,建议全部配置成HTTPS.
可以在【开放API】-【API列表】找到相应API,【API定义】-编辑-【请求基础定义】中进行修改.
API支持的协议包括:HTTP:只允许HTTP访问,不允许HTTPSHTTPS:只允许HTTPS访问,不允许HTTPHTTP和HTTPS:两者均可调整后,API支持HTTPS协议配置完成.
您的API将支持HTTPS访问.
hosteons当前对美国洛杉矶、达拉斯、纽约数据中心的VPS进行特别的促销活动:(1)免费从1Gbps升级到10Gbps带宽,(2)Free Blesta License授权,(3)Windows server 2019授权,要求从2G内存起,而且是年付。 官方网站:https://www.hosteons.com 使用优惠码:zhujicepingEDDB10G,可以获得: 免费升级10...
弘速云怎么样?弘速云是创建于2021年的品牌,运营该品牌的公司HOSU LIMITED(中文名称弘速科技有限公司)公司成立于2021年国内公司注册于2019年。HOSU LIMITED主要从事出售香港vps、美国VPS、香港独立服务器、香港站群服务器等,目前在售VPS线路有CN2+BGP、CN2 GIA,该公司旗下产品均采用KVM虚拟化架构。可联系商家代安装iso系统,目前推出全场vps新开7折,...
弘速云元旦活动本公司所销售的弹性云服务器、虚拟专用服务器(VPS)、虚拟主机等涉及网站接入服务的云产品由具备相关资质的第三方合作服务商提供官方网站:https://www.hosuyun.com公司名:弘速科技有限公司香港沙田直营机房采用CTGNET高速回国线路弹性款8折起优惠码:hosu1-1 测试ip:69.165.77.50地区CPU内存硬盘带宽价格购买地址香港沙田2-8核1-16G20-...