网关指南: 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. C语言编程之道--读书笔记

    C语言语法 const int nListNum =sizeof(aPrimeList)/sizeof(unsigned);//计算素数表里元素的个数 1:#define INM_MAX 32767 ...

  2. Intellij IDEA debug模式下项目启动慢/无法启动的事件解决过程记录

    项目无法启动了 简单的介绍一下事件过程:周一的早上,收到前端同事抛过来的一个任务,说是一个接口无法正常返回数据,于是就让他把参数发过来,我想试着在本地重现一下并且将问题修复掉,这种情况肯定是要通过de ...

  3. 第一周Python讲课内容--日记

    1.python的发展史,由荷兰人Guido van Rossum于1989年发明,第一个公开发行版发行于1991年...... 2.第一个helloword程序的开始 3.变量的含义,赋值传参数的作 ...

  4. 使用Angular CLI进行Build (构建) 和 Serve

    第一篇文章是: "使用angular cli生成angular5项目" : http://www.cnblogs.com/cgzl/p/8594571.html 第二篇文章是: & ...

  5. oracle中增加pga和sga

    修改oracle数据库SGA和PGA大小 个人原创,允许转载,请注明出处,作者,否则追究法律责任. SGA的大小:一般物理内存20%用作操作系统保留,其他80%用于数据库.SGA普通数据库可以分配40 ...

  6. C语言第二次博客作业---分支结构

    一,PTA实验作业 题目1.计算分段函数 本题目要求计算下列分段函数f(x)的值: 1.实验代码 double x,result; scanf("%lf",&x); if( ...

  7. maven项目与普通项目的区别

    maven项目 1:创建方式不同 (web项目举例) 第一种: 第二种: 2:目录结构  稍有不同 3:Pom文件 添加依赖信息,需要那个jar包的时候  加入哪个jar包的依赖,要不然无法使用这个j ...

  8. 远程通信的几种选择(RPC,Webservice,RMI,JMS的区别)

    RPC(Remote Procedure Call Protocol) RPC使用C/S方式,采用http协议,发送请求到服务器,等待服务器返回结果.这个请求包括一个参数集和一个文本集,通常形成&qu ...

  9. Python中四种样式的99乘法表

    1.常规型. #常规型 i=1 while i<=9: j=1 while j<=i: print(''%d*%d=%2d''%(i,j,i*j),end='') i+=1 #等号只是用来 ...

  10. linux --> Makefile编写

    Makefile编写 单目录 测试程序在同一个文件中,共有func.h.func.c.main.c三个文件,Makefile写法如下所示: CC = gcc CFLAGS = -g -Wall mai ...