通过API网关访问HTTP协议的后端服务

本文将快速引导您如何在API网关中,访问后端服务为HTTP协议的服务,并如何使用“阿里云APP”认证中的AppKey和AppSecret进行调用。

前提条件

说明

本例API网关的后端服务选择的是专有网络VPC的ECS实例且ECS实例与API网关region相同,ECS中部署了Apache服务可参见部署Apache服务,使用默认80端口。

配置流程

您需要依次完成以下步骤:

  1. 创建后端服务

  2. 创建分组

  3. 创建API

  4. 创建应用和API授权

  5. 调试API

  6. 调用API

创建后端服务

API网关允许将后端服务配置为region内的资源,简化管理流程。您只需在API网关控制台新建后端服务,并在其环境中配置不同的后端服务地址。随后,在创建API时,直接选用已配置的后端服务即可。

  1. 登录API网关控制台,选择地域并在左侧导航栏选择API管理 > 后端服务,单击右上角创建后端服务

  2. 创建后端服务弹框中,填写名称httpd-online类型选择HTTP(s)服务,单击确定

  3. 后端服务列表页面,单击httpd-online 的后端服务,选择线上,单击右上角创建

  4. 基本信息页面,输入后端服务地址为http://192.168.*.***:80,单击发布

    image

    说明

    http://192.168.*.***:80 是创建ECS实例的私网IP地址。

创建分组

API分组是API的管理单元,因此需要先创建API分组,然后在分组下创建API。

  1. 登录API网关控制台,选择地域并在左侧导航栏选择API管理 > 分组管理,单击右上角创建分组

  2. 创建分组弹框页面,选择实例,输入分组名称httpd-demoBasePath/,单击确定

    image

说明
  • 分组列表查看创建的分组,单击分组名称可以进入到分组详情页,进行绑定域名修改基本信息变更分组实例等操作。

  • API分组会自动分配公网二级域名,此二级域名仅供调试使用,如果直接访问此域名,每天有1000次的限制(海外Region及中国香港限制100次/天)。因此建议为分组绑定自己的独立域名后使用。

创建API

  1. 登录API网关控制台,选择地域并在左侧导航栏选择API管理 > 分组管理

  2. 分组列表页面下,单击所创建的httpd-demo分组操作列下的API管理

  3. API列表页面,单击右上角创建API

  4. 创建API页面的基本信息栏,配置如下信息,单击下一步

    配置项

    示例值

    分组

    httpd-demo

    API名称

    httpd-test

    安全认

    阿里云APP

    AppCode认证

    允许APPcode(header&Query)认证

    签名算法

    HMAC_SHA256

    image

  5. 定义API请求栏,配置如下信息,单击下一步

    image

    说明

    定义客户端(如浏览器、手机APP或其他的业务系统)如何请求您的API,需要确定的内容包括请求协议、请求Path、HTTP Method、入参请求模式、和入参定义。在本例中,入参请求方式选择入参透传,表示客户端发送过来的参数API网关不做处理,直接透传给后端。

  6. 定义API后端服务栏,配置如下信息,单击下一步

    配置项

    示例值

    后端配置

    选择使用已有的后端服务

    后端服务类型

    选择HTTP(s)服务

    后端服务

    httpd-online

    后端请求Path

    /

    HTTP Method

    GET

    后端超时

    10000

    image

    说明

    定于API网关收到客户端的请求后,进行何种参数映射、处理方式,以及连接到后端地址。本例中,选择了后端服务类型为HTTP(S)服务。

  7. 定义返回结果栏,单击创建

  8. 在创建成功之后弹框中单击发布

    image

  9. 在发布弹框中发布的环境选择线上,输入请填写变更备注,单击发布

    image

    说明

    对API进行过修改后,都需要发布到对应的环境,API网关内置了三个环境(线上预发测试),发布配置才能够生效。

创建应用和API授权

应用(APP)是调用API服务时的身份。在本例创建API时,认证方式选择的是“阿里云APP认证”,因此在API发布后,还需要创建APP,并将APP和API的授权关系建立好,才能够正常访问。

创建应用

  1. 登录API网关控制台,选择地域并在左侧导航栏选择API调用 > 应用管理

  2. 应用与授权页面,单击右上角创建APP

  3. 创建应用页面,输入应用名称,单击确定

    image

  4. 应用与授权页面,单击已创建好的httpd应用名称,进入应用详情页面,可以看到阿里云APP下有两种认证方式,AppKeyAppCodeAppKey方式有一组AppKeyAppSecret,您可以理解为账号密码,调用API的时候需要将AppKey做为参数传入,AppSecret用于签名计算,网关会校验这对密钥对您进行身份认证。

    image

对API进行授权

  1. 登录API网关控制台,选择地域并在左侧导航栏选择API管理 > API列表

  2. 在API列表页面,找到已创建好的http-testAPI,单击操作image> 授权

  3. 在授权页面,选择选择要授权的环境线上。搜索之前创建的应用,单击添加确定,提示授权成功,即成功授权。

    image

调试API

API网关提供了在线调试的功能,因此一般建议在API网关上完成API配置之后,可以先通过此功能确认API是否配置成功,然后再通过客户端进行调用。

  1. 登录API网关控制台,在左侧导航栏选择API调用 > 调式

  2. 在调试页面选择,所创建的httpd-testAPI,验证方式选择使用AppSecret,然后单击发送请求,即可看到如下图信息说明配置成功。

    image

调用API

通过以上步骤,您已经创建API、创建APP、建立了授权关系,调试API完成,并将API发布到线上环境,下面介绍如何通过调用API网关提供的SDK,来在您的业务系统中调用发布好的API。

方式一: 使用SDK调用

  1. 登录API网关控制台,在左侧导航栏选择API调用 > SDK

  2. SDK/文档自动生成页面,选择Node.js 然后单击查看Node.js版签名代码示例

  3. 通过npm安装API网关的Node.js示例SDK,$ npm install aliyun-api-gateway -S

    在如下的代码片段中,将YOUR_APP_KEYYOUR_APP_SECRET填写为本例中创建的APPKey的对应信息。

    // 导入网关nodejs sdk
    const Client = require('aliyun-api-gateway').Client;
    // 实例化一个认证对象,入参需要传入授权应用的AppKey,AppSecret
    const client = new Client('YOUR_APP_KEY','YOUR_APP_SECRET');
    async function get() {
    // API分组的域名,测试阶段可以使用公网二级域名,但有一定的访问限制,建议正式环境绑定您的独立域名
      var url = 'YOUR_GROUP_DOMAIN';
      var result = await client.get(url, {
    //请求响应体类型部分 API 可以根据指定的响应类型来返回对应数据格式,建议手动指定此请求头 
        headers: {
          accept: 'application/json'
        },
      });
      console.log(JSON.stringify(result));
    }
    get().catch((err) => {
      console.log(err.stack);
    });                

方式二: 使用curl来调用

登录API网关控制台,选择地域并在左侧导航栏选择API调用 > 应用管理,在应用与授权页面找到授权的APP,单击进入获取APPCode。然后按照以下示例调用API。

curl -i -X GET "http://3fbf0648d01e4aa5a1d*******-cn-hangzhou.alicloudapi.com" -H "Authorization:APPCODE c404eca23959492b9f0e4d4d15****"

image