跳到主要内容
版本: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. 在控制台侧边栏中进入默认网关组,然后点击 Services。
  2. 点击 Add Service,再点击 Add Manually。
  3. 配置服务:
字段值
名称demo-api
服务类型HTTP(Layer 7 protocol)
上游协议HTTP
如何查找上游Use Nodes
  1. 点击 Add Node,并进行如下配置:
字段值
主机httpbin.org
端口80
权重100
  1. 点击 Add 创建服务。
  2. 点击 demo-api 服务,然后点击 Add Route。
  3. 配置路由:
字段值
名称get-request
路径/get
方法GET
  1. 点击 Add。

导入 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. 在默认网关组中,进入 Services 并点击 Add Service。
  2. 选择 Import OpenAPI,在 OpenAPI Specification 字段中上传 openapi.yaml。
  3. 将 Service Type 保持为 HTTP(Layer 7 protocol),将 Scheme 设为 HTTP,并在 How to find the upstream 中选择 Use Nodes。
  4. 点击 Add Node,填写上游主机、端口和权重。本教程使用 httpbin.org、80 和 100。
  5. 点击 Next,检查根据规范生成的服务和路由,然后点击 Add。

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

第 2 步:验证代理​

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

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

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

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

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

  1. 在默认网关组中,进入 Services 并点击 demo-api 服务。
  2. 点击 Plugins,再点击 Enable Plugin。
  3. 搜索 key-auth 并启用它。
  4. 使用默认配置并点击 Submit。

不带密钥测试​

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

预期响应:

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

第 4 步:创建消费者​

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

  1. 在控制台侧边栏中进入 Consumers,然后点击 Create Consumer。
  2. 配置消费者:
字段值
名称test-consumer
  1. 点击 Submit 创建消费者。
  2. 点击 test-consumer 消费者以打开它,然后选择 Credentials 选项卡。
  3. 点击 Create Credential,并选择 key-auth 作为类型。
  4. 配置凭证:
字段值
名称test-consumer-key
密钥my-secret-api-key
  1. 点击 Submit。

使用 API Key 测试​

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

预期响应:200 OK。

第 5 步:启用限流​

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

  1. 在默认网关组中,进入 Services 并点击 demo-api 服务。
  2. 点击 Plugins,再点击 Enable Plugin。
  3. 搜索 limit-count 并按如下配置:
{
"count": 5,
"time_window": 60,
"rejected_code": 429,
"key_type": "var",
"key": "consumer_name",
"policy": "local"
}
  1. 点击 Submit。

测试限流​

快速连续发送多个请求:

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

后续步骤​