通过API Gateway高效管理您的GraphQL API - API7.ai

作者:API传播员 · 2026-01-05 · 阅读时间:6分钟
本文介绍了DeGraphQL插件在Apache APISIX API网关中的应用,帮助开发者将GraphQL API转换为REST API,降低学习成本并支持多种场景如前端试用、后端迁移和微服务通信。插件提供请求验证、查询解析和响应转换功能,通过实际演示展示如何高效管理GraphQL API流量。

学习目标

通过本文,您将学习并找到以下问题的答案:

  • 什么是 DeGraphQL 插件?
  • DeGraphQL 插件的主要用例和功能是什么?
  • 如何使用 DeGraphQL 插件?
  • 如何高效管理 GraphQL API 流量?

为什么要使用 DeGraphQL 插件?

DeGraphQL 插件为开发者提供了多种场景下的解决方案,以下是一些典型的使用用例:

  1. 现有客户习惯于使用 REST API

    如果您的客户不熟悉 GraphQL API 转换为 REST API,从而降低学习成本

  2. 前端团队试用 GraphQL 功能

    前端团队可以在无需后端团队搭建新的 GraphQL 服务器的情况下,直接试用现有的 GraphQL API 功能。

  3. 无法更改后端

    当后端由第三方管理或是现有的 GraphQL API 无法修改时,DeGraphQL 插件可以帮助您实现灵活的 API 管理

  4. 评估 GraphQL 的适用性

    如果您已有 REST API 基础设施,但想评估 GraphQL 是否适合您的需求,DeGraphQL 插件可以帮助您在两者间进行对比和过渡。

  5. 后端迁移中的临时解决方案

    后端代码库逐步迁移到 GraphQL 的过程中,您可以立即使用 GraphQL,而无需等待迁移完成。

  6. 多微服务的无缝通信

    在多个微服务同时使用 REST 和 GraphQL 的情况下,DeGraphQL 插件可以帮助实现两者之间的平滑通信。


DeGraphQL 插件的功能

DeGraphQL 插件提供了多种功能,使开发者能够轻松配置和管理 GraphQL API:

请求验证

DeGraphQL 插件可以验证传入的 GraphQL 请求,确保它们符合预定义的条件。这包括检查查询结构、强制输入类型约束等,从而保证 API 接收到的请求始终有效且格式正确。

查询解析

插件支持解析 GraphQL 查询,提取特定信息并根据查询内容动态调整 API 行为。例如,可以根据查询参数选择合适的后端服务或修改响应内容。

响应转换

在将 GraphQL 响应返回给客户端之前,插件可以对其进行转换。这对于规范数据结构、移除敏感信息或添加额外数据等场景非常有用。


如何使用 DeGraphQL 插件(演示)

接下来,我们通过一个实际演示来了解如何使用 DeGraphQL 插件。我们将使用一个免费的公共 GraphQL API:https://countries.trevorblades.com/,该 API 提供有关国家、大洲和语言的信息。

访问上述链接后,您会看到一个 GraphQL 游乐场,您可以在其中编写查询。例如,我们的目标是将以下 GraphQL 查询转换为简单的 REST 调用,并将其作为 JSON 数据发送:

通过 Apache APISIX API 网关,REST 请求将被路由到 GraphQL API。例如,所有对 /country-info 路径的 REST 请求(带有国家代码的查询)都将被转换并传递给 https://countries.trevorblades.com/graphql


启动并运行 Apache APISIX

在使用 DeGraphQL 插件之前,您需要安装 Apache APISIX。以下是安装的基本步骤:

先决条件

  • Docker:用于安装容器化的 etcd 和 APISIX。
  • curl:用于向 APISIX 发送请求进行验证。您也可以使用 Postman 等工具与 API 交互。

通过以下快速入门脚本,您可以轻松安装并启动 APISIX:

# 快速启动脚本
docker run ...

启动后,您将看到“✔ APISIX 准备好了!”的提示消息。接下来,您可以通过 APISIX 的 Admin API 配置上游、插件和路由。


创建上游

上游配置定义了 APISIX 如何将请求代理到目标 GraphQL API。以下是一个示例配置:

{
  "upstream": {
    "type": "roundrobin",
    "nodes": {
      "https://countries.trevorblades.com/graphql": 1
    }
  }
}

创建插件配置

接下来,我们设置插件配置,使用 proxy-rewritedegraphql 两个插件来重写请求的主机和 URI,并对 GraphQL API 进行查询

以下是插件配置示例:

{
  "plugins": {
    "proxy-rewrite": {
      "uri": "/graphql"
    },
    "degraphql": {
      "query": "{ country(code: "$code") { name, capital } }",
      "variables": {
        "code": "$code"
      }
    }
  }
}

使用 DeGraphQL 插件创建路由

在完成插件配置后,我们需要创建一个新路由,并将其与上游关联。以下是路由配置示例:

{
  "uri": "/country-info",
  "plugins": {
    "proxy-rewrite": { ... },
    "degraphql": { ... }
  },
  "upstream_id": "your-upstream-id"
}

测试 DeGraphQL 插件激活

完成配置后,您可以使用以下 curl 命令测试:

curl -X POST http://127.0.0.1:9080/country-info 
-H "Content-Type: application/json" 
-d '{"code": "US"}'

您将收到类似以下的响应:

{
  "data": {
    "country": {
      "name": "United States",
      "capital": "Washington, D.C."
    }
  }
}

响应转换

通过 APISIX 的响应重写插件,您可以对返回的 JSON 数据进行转换。例如,移除 currency 键值对,仅保留其他字段:

{
  "plugins": {
    "response-rewrite": {
      "remove": ["currency"]
    }
  }
}

再次发送请求后,您将看到转换后的响应。


总结

DeGraphQL 插件是任何使用 Apache APISIX 构建 GraphQL API 的开发者的必备工具。它不仅功能强大,还能轻松集成到现有的 API 网关中,为 GraphQL 提供特定支持。通过使用 DeGraphQL 插件,您可以显著提升 API 的性能、可靠性和可扩展性。

原文链接: https://api7.ai/blog/manage-graphql-api-with-api-gateway