阿里云API网关(4)快速入门(开放 API)
网关指南: https://help.aliyun.com/document_detail/29487.html?spm=5176.doc48835.6.550.23Oqbl
网关控制台: https://apigateway.console.aliyun.com/?spm=5176.doc42740.2.2.Q4z5ws#/cn-hangzhou/apis/list
使用二级域名访问我开放的api
一、创建api分组
API 分组是 API 的管理单元,先创建 API 分组,然后在分组下创建 API。
分组有 Region 属性,API 选定分组就选定了 Region,不可更改。
分组创建时,会绑定一个唯一的二级域名,您可以访问该二级域名调用该分组下测试中的 API。
若要开放 API 服务,您需要为分组绑定独立域名,独立域名需要在阿里云系统备案并且 CNAME 到该分组的二级域名上,用户访问独立域名时会调用该分组下线上的 API。
如果您的 API 支持 HTTPS 协议,您还需要为该独立域名上传 SSL 证书。

二、绑定域名和证书
域名是绑定在 API 分组上面的,API 网关通过域名来定位到一个唯一的 API 分组,再通过Path+HTTPMethod 确定唯一的 API。
如果您需要开放 API 则需要为分组绑定独立域名。独立域名需要满足以下几点:
- 独立域名需要在 阿里云备案 或者在 阿里云备案接入。
- 独立域名要 CNAME 解析到该分组的二级域名上,然后操作绑定。先解析,后绑定,否则绑定操作会报错。
- 若您需要将其他分组的独立域名变更到当前分组,需要先变更解析,才能成功绑定。
若该分组下的 API 支持 HTTPS 协议,您还需要为该独立域名上 SSL 证书。不支持文件上传,需要填写证书名称、内容和私钥。
三、创建api
API 分组创建完成您就可以创建 API 了,创建 API 是定义 API 请求的过程。您需要在创建中依次定义以下内容:
- API 的基本信息:分组、API 名称、API 类型、API 认证方式、描述。
- API 请求:协议、Method、Path、入参。
- API 服务:后端服务协议、后端服务 Method、后端服务地址、后端服务 Path、服务超时时间、参数映射、系统参数、常量参数。
- API 返回结果:返回类型及示例,目前网关对于返回结果不做处理,直接透传给请求者。后续会支持用户定制化、格式化的定义返回信息。
至此完成 API 的创建,并且具备开放的条件。操作详细说明请看 使用手册(开放API)。




四、发布api
完成 API 创建后,需要进行调试、测试和正式上线 API。
操作步骤:
1.调试
您要把 API 发布到测试环境,然后在 API 网关控制台的调试页面上调试 API。
调试时,会跳过 APP 鉴权 和 签名校验 环节,只是调试 API 的请求链路是否正确。
如果您勾选了 Mock,就是把返回结果定义为一个常量,然后调试时不会真的去请求后端服务,而会直接返回常量结果。这种 Mock 调试模式,不要求后端服务完备。
如果未勾选 Mock,则网关会真实地请求后端服务。返回信息里可能有网关的 X-Ca 开头的返回信息,也会有底层服务真实返回的信息。

2.测试
为了模拟真实的用户请求,您可以自己创建一个 APP,操作您的 API 给这个 APP 授权。
然后按照真实的请求场景,写代码或者基于网关提供的 SDK 样例 请求 API。
您可以将 API 发布到测试或者线上环境,在绑定独立域名之前,可以直接访问二级域名来进行测试调用。请求时注意指定环境,若不指定则默认为访问线上。参见 API 调用示例。
调用API的方法,请您查看 使用手册(调用 API)。
3.发布
完成测试后,您就可以把 API 开放出去了。
要上架到 API 市场则必须将 API 发布到线上,且 API 的类型应为公开。
对外开放的 API,应在所属分组上绑定独立域名,直接访问二级域名有流控限制为1000次/天。
API 网关支持对测试/线上的 API 做版本管理,您可以发布 API、下线 API 还可以切换版本,切换版本是实时生效。
五、授权给应用
应用(APP)代表请求者的身份。当您的客户或者您自己测试调用 API 时,都需要创建 APP 作为请求者的身份,然后由您操作给 APP 授权。
如果您的 API 已经上架云市场,购买者能够给自己的 APP 授权,不需要您再配置。
无购买行为时的授权操作需要以下几个步骤:
- 获知待授权的 APP 的 AppID 或者 APP 所有者的阿里云邮箱账号。
- 在授权操作页面,选择一个或者多个准备开放调用权限的 API,选定 测试/线上。
- 选定 API 后,用 AppID 或者阿里云邮箱账号搜索到 APP。
- 确认授权。
注意:授权是区分环境的,同一个API、同一个APP,在两个环境需要分别授权,避免因为授权的环境和请求的环境不一致,导致报错。
六、安全服务
接下来您可以配置安全防护设置。目前 API 网关为您提供后端服务签名密钥和流量控制策略两种安全措施。
后端服务签名密钥主要是用于您后端验证网关的身份,在网关请求您后端时,保障您后端的安全。
签名密钥的 Key 和 Secret 都是您自定义的,您将创建的密钥绑定到 API 上后,相当于网关请求这个 API 时需要出示这一对 Key 和 Secret,您后端通过验证签名字符串来验证网关的身份。具体后端签名密钥的说明请参见 后端签名密钥说明文档。
流量控制策略用于您管控 API 服务的流量,详见 流量控制策略。
您还可以在控制台进行更多 API 生命周期的管理操作,如 API 下线、API 版本切换、API调 用情况监控和预警等。更多详情请您查看 使用手册(开放API)。
七、附录
1、后端签名秘钥说明文档
概述
- API 网关提供后端 HTTP 服务签名验证功能,创建签名密钥并将签名密钥绑定到 API 即可开启后端签名(请妥善保管此密钥,API 网关会对密钥进行加密存储来保障密钥的安全性)。
- 开启后端签名后 API 网关到后端HTTP服务的请求将会添加签名信息,后端 HTTP 服务读取 API 网关的签名字符串,然后对收到的请求进行本地签名计算,比对网关与本地签名结果是否一致。
- 所有您定义的参数都会参与签名,包括您录入的业务参数、您定义的常量系统参数和 API 网关系统参数(如 CaClientIp 等)。
- 后端对 API 网关的签名字符串校验后,如果校验失败,建议返回 errorcode = 403;errormessage = “InvalidSignature”。
- 若您的后端服务为VPC环境,且通过内网对接(专属网络VPC环境开放API),您无需使用后端签名,通道自身是安全的。
读取 API 网关签名方法
网关计算的签名保存在 Request 的 Header 中,Header 名称:X-Ca-Proxy-Signature
后端 HTTP 服务加签方法
签名计算的详细 demo(JAVA)请参照链接:https://github.com/aliyun/api-gateway-demo-sign-backend-java。
签名计算方法步骤如下:
组织参与加签的数据
String stringToSign=HTTPMethod + "\n" + //Method全大写Content-MD5 + "\n" + //Content-MD5 需要判断是否为空,如果为空则跳过,但是为空也需要添加换行符 "\n"Headers + //Headers 如果为空不需要添加"\n",不为空的Headers中包含了"\n",详见下面组织Headers的描述Url
计算签名
Mac hmacSha256 = Mac.getInstance("HmacSHA256");byte[] keyBytes = secret.getBytes("UTF-8");hmacSha256.init(new SecretKeySpec(keyBytes, 0, keyBytes.length, "HmacSHA256"));String sign = new String(Base64.encodeBase64(Sha256.doFinal(stringToSign.getBytes("UTF-8")),"UTF-8"));
secret 为绑定到 API 上的签名密钥
补充说明
Content-MD5
Content-MD5 是指 Body 的 MD5 值,只有 HttpMethod 为 PUT 或者 POST 且 Body 为非 Form 表单时才计算 MD5,计算方式为:
String content-MD5 = Base64.encodeBase64(MD5(bodyStream.getbytes(“UTF-8”)));
Headers
Headers 指所有参与签名计算的 Header的Key、Value。参与签名计算的 Header 的 Key 从 Request Header 中读取,Key为:”X-Ca-Proxy-Signature-Headers”,多个 Key 用英文逗号分割。
Headers 组织方法:
先对所有参与签名计算的 Header 的 Key 按照字典排序,然后将 Header 的 Key 转换成小写后按照如下方式拼接:
String headers = HeaderKey1.toLowerCase() + “:” + HeaderValue1 + “\n”+ HeaderKey2.toLowerCase() + “:” + HeaderValue2 + “\n”+ … HeaderKeyN.toLowerCase() + “:” + HeaderValueN + “\n”
Url
Url指 Path+Query+Body 中 Form 参数,组织方法:如果有 Query 或 Form 参数则加 ?,然后对 Query+Form 参数按照字典对 Key 进行排序后按照如下方法拼接,如果没有 Query 或 Form 参数,则 Url = Path
String url =Path +"?" +Key1 + "=" + Value1 +"&" + Key2 + "=" + Value2 +..."&" + KeyN + "=" + ValueN注意:这里 Query 或 Form 参数的 Value 可能有多个,多个的时候只取第一个 Value 参与签名计算
调试模式
为了方便后端签名接入与调试,可以开启 Debug 模式进行调试,具体方法如下:
请求API网关的 Header 中添加 X-Ca-Request-Mode = debug
后端服务在 Header 中读取 X-Ca-Proxy-Signature-String-To-Sign 即可,因为 HTTP Header 中值不允许有换行符,因此换行符被替换成了 “|”。
注意:X-Ca-Proxy-Signature-String-To-Sign 不参与后端签名计算。
时间戳校验
如果后端需要对请求进行时间戳校验,可以在 API 定义中选择系统参数 “CaRequestHandleTime” ,值为网关收到请求的格林威治时间。
2、流量控制策略
流量控制策略和 API 分别是独立管理的,操作两者绑定后,流控策略才会对已绑定的 API 起作用。
在已有的流量控制策略上,可以额外配置特殊用户和特殊应用(APP),这些特例也是针对当前策略已绑定的API生效。
流量控制策略可以配置对 API、用户、应用三个对象的流控值,流控的单位可以是分钟、小时、天。使用流量控制策略您需要了解以下几点:
流量控制策略可以涵盖下表中的维度:
API 流量限制 该策略绑定的API在单位时间内被调用的次数不能超过设定值,单位时间可选分钟、小时、天,如5000次/分钟。 APP 流量限制 每个APP对该策略绑定的任何一个API在单位时间内的调用次数不能超过设定值。如50000次/小时。 用户流量限制 每个阿里云账号对该策略绑定的任何一个 API 在单位时间内的调用次数不能超过设定值。一个阿里云账号可能有多个 APP,所以对阿里云账号的流量限制就是对该账号下所有 APP 的流量总和的限制。如 50 万次/天。 此外,您可以在流控策略下添加特殊应用(APP)和特殊用户。对于特例,流控策略基础的 API 流量限制 依然有效,您需要额外设定一个阈值作为该 APP 或者该用户的流量限制值,该值不能超过策略的 API流量限制 值,同时流控策略基础的 APP流量限制 和 用户流量限制 对该 APP 或用户失效。
与签名密钥相似,当您创建流量控制策略时,需要选择 Region,Region 一旦选定不可更改,且仅能被应用于同一个 Region 下的 API。
由于 API 网关限制,当您设置 API 流量限制 值时,考虑每个 API 分组的默认流控上限是500QPS(该值可以通过提交工单申请提高)。
绑定 API。您可以将策略绑定于多个 API,流控策略的限制值和特例将对该策略绑定的每一个 API 单独生效。当您绑定 API 时,如果该 API 已经与某个策略绑定,您的此次操作将替换之前的策略,实时生效。
特殊对象。如果您想要添加特殊应用或者特殊用户,您需要获得应用 ID 即 AppID 或者用户的阿里云邮箱账号。
在 API 网关控制台,您可以完成对流量控制策略的创建、修改、删除、查看等基本操作。还有流控策略与 API 的绑定解绑,流量控制策略特殊对象的添加删除等操作。
阿里云API网关(4)快速入门(开放 API)的更多相关文章
- 阿里云API网关(2)开放 API 并接入 API 网关
网关指南: https://help.aliyun.com/document_detail/29487.html?spm=5176.doc48835.6.550.23Oqbl 网关控制台: https ...
- 阿里云RDS for MySQL 快速入门——笔记
1初始化配置 1.1设置白名单 创建RDS实例后,需要设置RDS实例的白名单,以允许外部设备访问该RDS实例.默认的白名单只包含默认IP地址127.0.0.1,表示任何设备均无法访问该RDS实例. 设 ...
- 阿里云数据库MySQL版快速上手!
MySQL是全球最受欢迎的开源数据库,其在各Web应用中均有广泛部署.阿里云数据库MySQL版基于Alibaba的MySQL源码分支,经过双11高并发.大数据量的考验,拥有优良的性能和吞吐量.除此之外 ...
- 微服务架构学习与思考(10):微服务网关和开源 API 网关01-以 Nginx 为基础的 API 网关详细介绍
微服务架构学习与思考(10):微服务网关和开源 API 网关01-以 Nginx 为基础的 API 网关详细介绍 一.为什么会有 API Gateway 网关 随着微服务架构的流行,很多公司把原有的单 ...
- 微服务架构学习与思考(11):开源 API 网关02-以 Java 为基础的 API 网关详细介绍
微服务架构学习与思考(11):开源 API 网关02-以 Java 为基础的 API 网关详细介绍 上一篇关于网关的文章: 微服务架构学习与思考(10):微服务网关和开源 API 网关01-以 Ngi ...
- 15分钟在阿里云Kubernetes服务上快速建立Jenkins X Platform并运用GitOps管理应用发布
本文主要介绍如何在阿里云容器服务Kubernetes上快速安装部署Jenkins X Platform并结合demo实践演示GitOps的操作流程. 注意:本文中使用的jx工具.cloud-envir ...
- 云计算之路-阿里云上:用上了开放缓存服务OCS
你知道在我们使用的云服务器中哪台最贵吗?跑memcached的缓存服务器(12G内存).你知道保证网站访问速度的功臣之一是谁吗?跑memcached的缓存服务器. 用云服务器这么高贵的内存跑memca ...
- springcloud(十六):服务网关 zuul 快速入门
服务网关是微服务架构中一个不可或缺的部分.通过服务网关统一向外系统提供REST API的过程中,除了具备服务路由.均衡负载功能之外,它还具备了权限控制等功能.Spring Cloud Netflix中 ...
- IPsecVPN:阿里云VPN网关和深信服防火墙打通公有云和公司内网
简介 目前许多公司网络环境为混合云(私有云,IDC,公司内网融合)的状态,通过内网ip的访问使得工作更加方便,需求也更为迫切,而本文介绍的即是实现私有云和公司内网互通的一种方法,希望对有此需求的小伙伴 ...
- Spring Cloud(六)服务网关 zuul 快速入门
服务网关是微服务架构中一个不可或缺的部分.通过服务网关统一向外系统提供REST API的过程中,除了具备服务路由.均衡负载功能之外,它还具备了权限控制等功能.Spring Cloud Netflix中 ...
随机推荐
- 微信小程序腾讯云php后台解决方案
微信小程序腾讯云php后台解决方案 微信小程序前段需要添加必要的文件以配合后端 (1)wafer2-client-sdk sdk提供了几种接口包括登陆,获取用户openid,图片上传等 (2)conf ...
- Cesium剖面分析
- go语言defer panic recover用法总结
defer defer是go提供的一种资源处理的方式.defer的用法遵循3个原则 在defer表达式被运算的同时,defer函数的参数也会被运算.如下defer的表达式println运算的同时,其入 ...
- Java-Integer源码分析
除了两种浮点型,剩下的几种基本数据类型的包装类几乎都实现了常量池,有好处用数据的时候直接去拿,没有再去创建,坏处是在程序编译的时候就存入大量数据不管用不用到.下面是一篇很好的文章,很详细,转自:htt ...
- js对象系列【二】深入理解js函数,详解作用域与作用域链。
这次说一下对象具体的一个实例:函数,以及其对应的作用域与作用域链.简单的东西大家查下API就行了,这里我更多的是分享自己的理解与技巧.对于作用域和作用域链,相信绝大多数朋友看了我的分享都能基本理解,少 ...
- Axis1.4之定制发布服务
将axis1.4_home\webapps目录下的axis文件夹拷贝到tomcat_home\webapps目录下.然后在tomcat_home\webapps\axis\WEB-INF\lib下添加 ...
- Mycat 介绍
Mycat 是什么 Mycat是什么?从定义和分类来看,它是一个开源的分布式数据库系统,是一个实现了 MySQL协议的的Server,前端用户可以把它看作是一个数据库代理,用 MySQL客户端工具和命 ...
- 用Arduino制作一个二维码显示器
先上图 场景是这样的, 这几天给CS系统做一个微信支付的功能, 但是生成的二维码是在前台的电脑上..不可能让用户跑到前台的电脑上去扫描...然后拿出了N年前买的Arduino 做了一个二维码显示器. ...
- 巧用linux版powershell,管理linux下的docker
大家好,我把用powershell的docker马甲命令的好处,放在了页面下方,从第五章开始. powershell 传教士 原创文章 始于 2017-09-07 允许转载,但必须保留名字和出处,否则 ...
- JSON字符串转为JSON对象
在数据传输流程中,json是以文本,即字符串的形式传递的,而JS操作的是对象,所以,JSON对象(js对象)和JSON字符串之间的相互转换是关键. JSON可以有两种格式,一种是对象格式的,另一种是数 ...