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

时间:2023-03-09 15:45:34
阿里云API网关(2)开放 API 并接入 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网关:https://help.aliyun.com/document_detail/48777.html?spm=5176.doc29464.6.545.8kpfId

类似于web-service,可以包含多个操作。API 网关上,一个API分组下可以有多个 API。

下面以一个 API 配置流程作为例子,假如数据市场开放一个服务。

  • 服务名称:已开放的 API 服务信息查询。
  • 服务描述:您通过调用 API 可以查询已经开放的 API 的列表、详细信息等。

例1:Path 中没有动态参数。

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

例2:Path 中有动态参数。

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

后端前端的灵活映射:

前端:您调用 API 时,API 请求从您到网关的部分。

后端:请求到达网关后,网关到实际后端服务的部分。

  1. 后端host ≠ 前端域名。
  2. 后端path ≠ 前端 path。
  3. 客户传入参数的位置和名称 ≠ 实际后端服务接收参数的位置和名称(注意 body 只能前后端都为二进制或者都为 form)。

    API 网关可以做全方位的前后都映射。

那么上面这个例子该要怎么配置,基本步骤流程如下(以例 2 为例):

一、前端配置

步骤 1: 创建分组

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

步骤 2: 绑定域名

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

  1. 创建分组之后,到分组详情页面获取该分组的二级域名,如上图。
  2. 去购买对外独立域名 globalservice.api.com 的网站,将独立域名 CNAME 解析到分组的二级域名上。
  3. 解析 CNAME 完成后,回到分组详情页面,点击绑定域名,将 globalservice.api.com 绑定到该分组。
  4. 由于后端是 https,所以还需要上传 SSL 证书,不支持上传文件,需要把内容复制进来。

步骤 3: 创建 API_基本信息

基本信息这一步完成的是 API 分组选定、 API 名称设置、API 认证方式和类型的选择,完善 API 描述文案。

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

  1. 如上图所示,进入 API 列表页。

  2. 选择跟 API 分组同一个区域。

  3. 注意安全认证。

    • APP:表示客户调用您的 API 时由 API 网关对其 APPkey 和 Secret 做验证,您不需要认证客户的身份。
    • 无认证:表示任何人只要获取了调用方式就可以调用您的 API,且无法区分调用者进行计量。无认证的 API 不建议上架数据市场。
  4. API 类型。

    • 公开:意味着任何人在“发现 API”页面可以看见该 API,且上架数据市场时,分组内公开类型的 API 才会上架。
    • 私有:意味着任何人不会看见该 API,除非某个 APP 获得了授权。所在分组上架数据市场时,不包括组内私有类型的 API。

步骤4: 创建 API_定义 API 请求

定义 API 请求这一步完成的是第三方使用者调用数据市场上的 API 时的请求样式,即前端。

首先配置协议、Path、Method。如下图:

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

  1. 配置协议。

    • 在前端配置中可以同时支持 HTTP/HTTPS 协议,后端如果要支持 https,需要给独立域名匹配 SSL 证书。
  2. 配置请求 path。

    • Path 就是您调用 API 时,Url 中 .com 后到 ? 之前的部分,Path 包含动态参数的情况在后续的后端配置步骤中详细说明。

      举例说明:

      1. 比如您调用的 Url 前部分为:
      2. https://globalservice.api.com/getapilist?command=...
      3. 那么您的 Path 就是:
      4. /getapilist
  3. 由于要示范带有 Body 的 API ,所以此处将 Method 选为 Post。

步骤5: API 网关_入参配置

入参定义是指您调用 API 时,需要传入的参数的说明。

API 网关入参配置是支持混排的,把所有参数在一起配置,然后选择参数的位置是 Header、Query 还是 Body,甚至是在 Path上。仍以上面的初始假设为例,入参配置如下图:

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

  1. 需要注意所有参数的名称会校验是否唯一。
  2. 再次注意这一步配置的是您调用 API 时的入参,也就是前端的展现样式。配置这一步中的5个参数需要您把 Url中 在 ? 后面的部分以 keyvalue 形式传入 command 和 region,配置在 Query 上。另外几个参数 key1、key2、group,需要用户在 Body Form 传入,配置在 Body 上。
  3. 左侧有快捷键可以快速调整参数顺序,跟定义展示有关。

至此,前端入参就配置完成了,下一步骤配置后端服务定义。

二、后端配置

创建API_定义API后端服务

定义 API 后端服务 这一步完成的是后端服务接收 API 请求的样式定义。即用户按照上一步教程的完成前端配置发送 API 调用到 API 网关,然后 API 网关通过解析您的映射规则,按照您的要求去请求您的后端,保证后端服务最低成本的改造和最高的兼容。

也就是说这一步配置的是网关请求您的后端时,网关的请求样式定义,来符合您后端的既定格式。

步骤1:首先配置后端基础定义,包括后端服务地址、后端请求 Path、后端 Method、超时时间。

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

  1. 后端服务地址,就是您后端服务的http(s)://host:port,也可以是一个域名。这个例子中的后端服务地址就是https://a.b.com:8080。
  2. 后端请求 Path,即网关访问后端时用的 Path,是 Url 中后端服务地址后到?前的内容,这里的后端请求Path就是 /region/group。
  3. 注意,这里前端的 Path 是 /getapilist,可以和后端不一样,而且后端的 Path 中需要有参数传入。这个报错下一部分说明。
  4. 后端的 Method 也可以跟前端不一样,这里建议最好一致,这里仍然是 POST。

步骤2:配置后端服务参数,其实主要是映射。

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

  1. 如上图,这一步会把上一步配置的前端入参拉取过来,需要变更的是左侧标红的两列,当然如果前后端一致就不用变化了。
  2. 需要注意的是 region、group,这里的前端是配置在 Query 和 Body 里面,而后端从 Path 以接收。上面配置 Path 时报错了,按照图示更改之后,报错就会消失了。
  3. 根据后端实际的参数名和接收位置进行调整。图示左侧标红的部分是针对后端需要修改的,右侧不能修改的是既定前端配置。当然如果前端有变化还可以回去上一步修改。

配置完成如下图:

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

注意 Path 中的参数位置选择 Parameter Path。

常量参数和系统参数 API 的请求者不可见,由网关在请求后端服务时添加上。

常量参数。比如您的后端需要接收一个常量,但是这个常量您不希望被您的客户看见,那么就设置一个常量参数,可以在 Header 或者 Query 里面接收。

系统参数。比如您需要获取客户调用 API 时用的 APP 的 ID 来做日志统计,您在系统参数配置,可以在 Header 或者 Query 里面接收。强烈建议后端接收 CaRequestId 字段,每个请求一个 ID 唯一,便于问题定位和建立全量日志。如下图:

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

创建 API _定义返回结果

目前返回结果在 API 网关是不做解析的,API 网关直接转发给 API 的请求者。

三、发布上线

完成前后端配置之后,就完成了 API 定义的配置。接下来还需要做调试、测试、线上发布。然后就可以上架云市场了。

步骤 1:调试

在 API 网关控制台,进入 API 的管理,有个调试页面。在该页面可以设定入参来简单调试,调试默认调用的是测试环境的 API,所以需要把 API 发布到测试环境。如下图:

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

  1. 页面可以支持 Mock 或者非 Mock 两种调试。
  2. 选择 Mock,需要写定返回结果,Mock 下调试不会真的去调用后端,但是会把访问后端之前的参数、Path 寻址都校验掉。
  3. 不选择 Mock 则会真实调用后端服务,右侧会返回真实的请求结果,这个结果可以是 API 网关返回的也可以是您后端返回的,看具体情况。

步骤 2:测试

这里区别于调试的就是需要真实的模拟 API 使用者的场景来调用测试环境的 API。测试环境的 API 可以通过分组的二级域名进行访问,此时可以尚未绑定独立域名。

API 需要发布到测试环境,需要创建 APP 并操作授权后,才能真实模拟 API 调用。

发布 API 到测试环境,发布成功后在 API 列表环境的测试后面显示 运行中。

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

创建 APP。

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

查看应用 ID,应用 ID 后面要用于搜索 APP。

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

授权使该 APP 可以调用该 API,授权要注意区分环境。

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

更多说明:

  1. 至此,您已经能够使用您创建的 APP 的 Key 和 Secret 模拟第三方客户调用了。Key 和 Secret 在控制台应用详情查看。具体调用说明请参见 快速入门(调用 API)
  2. APP 是 API 使用者调用 API 的身份,每一个 API 的使用者都需要申请 APP。具体调用说明请参见 快速入门(调用 API)
  3. APP 和 API 之间的鉴权关系通过授权来实现,就是哪个 APP 有调用哪个 API 的权限。授权的完成可以通过 API 开放者主动授权和数据市场完成购买两种方式。具体请参见 快速入门(调用 API)

步骤 3:线上发布后上架数据市场

  1. 您需要准备一个独立域名。该独立域名不能与您后端服务地址相同,但是可以为现有域名的二级、三级甚至更多级的域名。
  2. 该域名需要解析到分组的二级域名上。比如您要把某一组 API 上架数据市场,那么就要将独立域名 CNAME 解析到该分组的二级域名上。
  3. 该域名需要在阿里云 备案,或者原备案不在阿里云但是完成在阿里云的 备案接入
  4. 在 API 网关控制台,把准备好的域名绑定到分组上。
  5. 操作 API 发布到线上环境,然后就可以在数据市场走上架流程了。请参见 数据市场上架引导

步骤4: 辅助 CheckList

  1. 调试、测试调不通,检查服务地址和 Path 配置是否正确。
  2. 返回结果不对,API 网关支持您把后端的 a 映射成前端的 b,检查映射是否正确。
  3. 调不通,检查绑定的独立域名是否在阿里云备案,或者是否在阿里云接入备案。
  4. 调不通,检查绑定的独立域名是否正确 CNAME 解析到相应的二级域名上。
  5. 如果 Invalid Url 报错,检查在调试、测试 API 时, API 是否已经发布到测试环境(环境后显示“运行中”才是发布完成)。
  6. 如果 Invalid Url 报错,检查上架数据市场时,API 是否已经发布到线上(环境后显示“运行中”才是发布完成)。
  7. 在重新更改了定义后,调用发现没生效时,检查是否重新操作了发布。
  8. 上架数据市场的 API 不能选择 无认证,不能选择 私有。

参考一下:https://help.aliyun.com/document_detail/29468.html?spm=5176.doc29466.6.543.dS7JPu