跳到主要内容
版本:3.10.x

教程:通过插件代理和管理 API 请求

本教程以快速开始为基础,带你完成一个贴近实际的场景:通过 API7 网关代理 API 请求,并使用插件实施身份认证和限流。

你将学到:

  1. 为后端 API 创建服务和路由
  2. 添加 key-auth 插件以要求 API Key(API 密钥)身份认证
  3. 创建带有凭证的消费者
  4. 添加 limit-count 插件以实施限流
  5. 测试完整配置

预计用时:约 15 分钟

前置条件:已运行的 API7 网关实例。如果尚未设置,请先完成快速开始。如果要跟随 Admin API 示例,请在开始前从控制台获取 Token。

第 1 步:创建服务和路由​

创建一个将请求代理到 httpbin.org 的服务。你可以手动添加,也可以导入 OpenAPI 规范来创建服务及其路由。

  1. 在控制台侧边栏中进入 default 网关组,然后点击 服务。
  2. 点击 新增服务,再点击 手动新增。
  3. 配置服务:
字段值
名称demo-api
服务类型HTTP(七层)
上游协议HTTP
如何找到上游使用节点
  1. 点击 新增节点,并进行如下配置:
字段值
主机httpbin.org
端口80
权重100
  1. 点击 新增 创建服务。
  2. 点击 demo-api 服务,然后点击 新增路由。
  3. 配置路由:
字段值
名称get-request
路径/get
方法GET
  1. 点击 新增。

导入 OpenAPI 规范​

控制台支持通过 OpenAPI 3.0 或 3.1 规范创建服务及其路由。例如,将以下内容保存为 openapi.yaml:

openapi.yaml
openapi: 3.0.0
info:
title: demo-api
version: 1.0.0
paths:
/get:
get:
operationId: get-request
responses:
"200":
description: Successful response

在控制台中:

  1. 在 default 网关组中,进入 服务 并点击 新增服务。
  2. 选择 导入 OpenAPI,在 OpenAPI 规范 字段中上传 openapi.yaml。
  3. 将 服务类型 保持为 HTTP(七层),将 上游协议 设为 HTTP,并在 如何找到上游 中选择 使用节点。
  4. 点击 新增节点,填写上游主机、端口和权重。本教程使用 httpbin.org、80 和 100。
  5. 点击 下一步,检查根据规范生成的服务和路由,然后点击 新增。

规范中的路径会生成该服务下的路由。接着按照第 2 步验证 /get 路由,再为导入的服务配置插件。

第 2 步:验证代理​

在添加插件前,测试路由以验证基本配置:

curl -i "http://localhost:9080/get"

你应收到包含 HTTPBin 响应正文的 200 OK 响应,这表示代理工作正常。

第 3 步:启用 key-auth 插件​

key-auth 插件要求消费者提供有效的 API Key。

  1. 在 default 网关组中,进入 服务 并点击 demo-api 服务。
  2. 点击 插件,再点击 新增插件。
  3. 搜索 key-auth 并启用它。
  4. 使用默认配置并点击 新增。

不带密钥测试​

curl -i "http://localhost:9080/get"

预期响应:

HTTP/1.1 401 Unauthorized
{"message":"Missing API key in request"}

第 4 步:创建消费者​

创建一个带有 API Key 凭证的消费者:

  1. 在控制台侧边栏中进入 消费者,然后点击 新增消费者。
  2. 配置消费者:
字段值
名称test-consumer
  1. 点击 新增 创建消费者。
  2. 点击 test-consumer 消费者以打开它,然后选择 认证凭据 选项卡。
  3. 选择 Key Authentication,然后点击 新增 Key Authentication 凭据。
  4. 配置凭证:
字段值
名称test-consumer-key
Keymy-secret-api-key
  1. 点击 新增。

使用 API Key 测试​

curl -i "http://localhost:9080/get" -H "apikey: my-secret-api-key"

预期响应:200 OK。

第 5 步:启用限流​

添加 limit-count 插件,以限制消费者可以发出的请求数量。

  1. 在 default 网关组中,进入 服务 并点击 demo-api 服务。
  2. 点击 插件,再点击 新增插件。
  3. 搜索 limit-count 并按如下配置:
{
"count": 5,
"time_window": 60,
"rejected_code": 429,
"key_type": "var",
"key": "consumer_name",
"policy": "local"
}
  1. 点击 新增。

测试限流​

快速连续发送多个请求:

for i in $(seq 1 6); do
echo "Request $i:"
curl -s -o /dev/null -w "HTTP %{http_code}\n" \
http://localhost:9080/get -H "apikey: my-secret-api-key"
done

预期输出:

Request 1: HTTP 200
Request 2: HTTP 200
Request 3: HTTP 200
Request 4: HTTP 200
Request 5: HTTP 200
Request 6: HTTP 429

后续步骤​