网关指南: 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

http://66bc382db8344b3b93056c696fab49a8-cn-hangzhou.alicloudapi.com/LsqGrp1/LsqApi1?access_token=2689594c-ca7e-4b54-a20a-43b538f2b3c7

一、创建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 请求的过程。您需要在创建中依次定义以下内容:

  1. API 的基本信息:分组、API 名称、API 类型、API 认证方式、描述。
  2. API 请求:协议、Method、Path、入参。
  3. API 服务:后端服务协议、后端服务 Method、后端服务地址、后端服务 Path、服务超时时间、参数映射、系统参数、常量参数。
  4. 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 授权,不需要您再配置。

  • 无购买行为时的授权操作需要以下几个步骤:

    1. 获知待授权的 APP 的 AppID 或者 APP 所有者的阿里云邮箱账号。
    2. 在授权操作页面,选择一个或者多个准备开放调用权限的 API,选定 测试/线上。
    3. 选定 API 后,用 AppID 或者阿里云邮箱账号搜索到 APP。
    4. 确认授权。

注意:授权是区分环境的,同一个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

签名计算方法步骤如下:

组织参与加签的数据

  1. String stringToSign=
  2. HTTPMethod + "\n" + //Method全大写
  3. Content-MD5 + "\n" + //Content-MD5 需要判断是否为空,如果为空则跳过,但是为空也需要添加换行符 "\n"
  4. Headers + //Headers 如果为空不需要添加"\n",不为空的Headers中包含了"\n",详见下面组织Headers的描述
  5. Url

计算签名

  1. Mac hmacSha256 = Mac.getInstance("HmacSHA256");
  2. byte[] keyBytes = secret.getBytes("UTF-8");
  3. hmacSha256.init(new SecretKeySpec(keyBytes, 0, keyBytes.length, "HmacSHA256"));
  4. 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

  1. String url =
  2. Path +
  3. "?" +
  4. Key1 + "=" + Value1 +
  5. "&" + Key2 + "=" + Value2 +
  6. ...
  7. "&" + KeyN + "=" + ValueN
  8. 注意:这里 Query 或 Form 参数的 Value 可能有多个,多个的时候只取第一个 Value 参与签名计算
  • 调试模式

    为了方便后端签名接入与调试,可以开启 Debug 模式进行调试,具体方法如下:

    1. 请求API网关的 Header 中添加 X-Ca-Request-Mode = debug

    2. 后端服务在 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)的更多相关文章

  1. 阿里云API网关(2)开放 API 并接入 API 网关

    网关指南: https://help.aliyun.com/document_detail/29487.html?spm=5176.doc48835.6.550.23Oqbl 网关控制台: https ...

  2. 阿里云RDS for MySQL 快速入门——笔记

    1初始化配置 1.1设置白名单 创建RDS实例后,需要设置RDS实例的白名单,以允许外部设备访问该RDS实例.默认的白名单只包含默认IP地址127.0.0.1,表示任何设备均无法访问该RDS实例. 设 ...

  3. 阿里云数据库MySQL版快速上手!

    MySQL是全球最受欢迎的开源数据库,其在各Web应用中均有广泛部署.阿里云数据库MySQL版基于Alibaba的MySQL源码分支,经过双11高并发.大数据量的考验,拥有优良的性能和吞吐量.除此之外 ...

  4. 微服务架构学习与思考(10):微服务网关和开源 API 网关01-以 Nginx 为基础的 API 网关详细介绍

    微服务架构学习与思考(10):微服务网关和开源 API 网关01-以 Nginx 为基础的 API 网关详细介绍 一.为什么会有 API Gateway 网关 随着微服务架构的流行,很多公司把原有的单 ...

  5. 微服务架构学习与思考(11):开源 API 网关02-以 Java 为基础的 API 网关详细介绍

    微服务架构学习与思考(11):开源 API 网关02-以 Java 为基础的 API 网关详细介绍 上一篇关于网关的文章: 微服务架构学习与思考(10):微服务网关和开源 API 网关01-以 Ngi ...

  6. 15分钟在阿里云Kubernetes服务上快速建立Jenkins X Platform并运用GitOps管理应用发布

    本文主要介绍如何在阿里云容器服务Kubernetes上快速安装部署Jenkins X Platform并结合demo实践演示GitOps的操作流程. 注意:本文中使用的jx工具.cloud-envir ...

  7. 云计算之路-阿里云上:用上了开放缓存服务OCS

    你知道在我们使用的云服务器中哪台最贵吗?跑memcached的缓存服务器(12G内存).你知道保证网站访问速度的功臣之一是谁吗?跑memcached的缓存服务器. 用云服务器这么高贵的内存跑memca ...

  8. springcloud(十六):服务网关 zuul 快速入门

    服务网关是微服务架构中一个不可或缺的部分.通过服务网关统一向外系统提供REST API的过程中,除了具备服务路由.均衡负载功能之外,它还具备了权限控制等功能.Spring Cloud Netflix中 ...

  9. IPsecVPN:阿里云VPN网关和深信服防火墙打通公有云和公司内网

    简介 目前许多公司网络环境为混合云(私有云,IDC,公司内网融合)的状态,通过内网ip的访问使得工作更加方便,需求也更为迫切,而本文介绍的即是实现私有云和公司内网互通的一种方法,希望对有此需求的小伙伴 ...

  10. Spring Cloud(六)服务网关 zuul 快速入门

    服务网关是微服务架构中一个不可或缺的部分.通过服务网关统一向外系统提供REST API的过程中,除了具备服务路由.均衡负载功能之外,它还具备了权限控制等功能.Spring Cloud Netflix中 ...

随机推荐

  1. vc的环境变量配置和缺少mspdb60.dll的解决方法

    vc的编译器是cl.exe,我们如果在vc中编译就不用配置环境,但是如果要在任何位置用命令提示符打开编译器cl.exe来编译程序,那么就要配置环境了. 下面我就讲讲vc的环境变量配置和缺少mspdb6 ...

  2. C# 值类型与引用类型的异同

    int,bool,decimal等为值类型 List,Stream等为引用类型 用等号设置一个值类型变量等于另一个变量时,会完成复制,之后这两个变量相互之间没有任何影响: 对引用使用等号时,这两个引用 ...

  3. delphi GDI 图片压缩代码 据说是位图缩放保持原图视觉效果最好的算法

    delphi 图片压缩代码 据说是位图缩放保持原图视觉效果最好的算法 若有更好的,请大神留言我也学习下,感谢! uses WinAPI.GDIPAPI, WinAPI.GDIPOBJ; var  Bi ...

  4. EOS 新增的 WebAssembly 解释器,是什么鬼?

    Daniel Larimer 在最近的博客中透露,EOS 新增了官方的 WebAssembly 解释器,用来解释执行 WebAssembly 智能合约,加上之前的编译执行,EOS 智能合约有了两种执行 ...

  5. c++趣味之为变参模板的每个参数执行单独函数

    对于c++11以后出现的可变参数模板,一般我们都统一处理所有的参数.而当需要为每个参数执行不同的操作或调用不同的函数时,语法上是没有直接支持的. 可变参数的模板语法: template<type ...

  6. Docker + webpack 打包前端项目

    码云代码地址: https://gitee.com/caonimashi/docker_deployment_front_end    构建基础镜像: 1.下载一个 Apline Linux 操作系统 ...

  7. Linux 如何使用echo指令向文件写入内容

    0.前言     本文总结如何使用echo命令向文件中写入内容,例如使用echo指令覆盖文件内容,使用echo指令向文件追加内容,使用echo指令往文件中追加制表符.     echo向文件中输出内容 ...

  8. 在react中引入下拉刷新和上拉加载

    1. 首先引入插件 import ReactPullLoad, {STATS} from 'react-pullload' 2. 初始化: constructor(props) { super(pro ...

  9. linux --> ubuntu和mac通过samba共享

    ubuntu和mac通过samba共享 如果想快速配置,直接跳到第五步. 一.安装smb 执行下列命令 sudo apt-get install samba sudo apt-get install ...

  10. [poj3687]Labeling Balls_拓扑排序

    Labeling Balls poj-3687 题目大意:给出一些球之间的大小关系,求在满足这样的关系下,编号小的尽量比编号大的球的方案. 注释:1<=N(球的个数)<=200,1< ...