检查云服务发出的 API 请求

将应用程序与云服务集成时,可能面临的挑战之一是了解云服务如何与它使用的 API 交互。 在排查问题或尝试了解云服务的工作原理时,能够检查 API 请求尤其重要。 通常情况下,这很困难,因为你无权访问云服务的运行时,并且可能也无法访问云 API 的监视工具。 通过使用开发代理和开发隧道,可以检查云服务向云 API 发出的 API 请求。

重要

在继续之前,请安装开发隧道并配置要使用的工具。

云服务如何调用云 API

将应用程序与云服务集成时,云服务会在云中调用 API。 下图演示了此方案:

显示云服务如何调用云 API 的关系图。

若要检查云服务问题的 API 请求,需要访问云 API 的监视工具。 通常,你无权访问这些工具。 可以使用过渡环境来解决此限制。 但是,设置和维护过渡环境非常耗时。 更重要的是,如果你不拥有云 API,则根本无法设置过渡环境。

使用开发代理和开发隧道检查 API 请求

通过使用开发代理和开发隧道,可以检查云服务向云 API 发出的 API 请求。

显示如何使用 开发隧道 和开发代理检查云 API 调用的关系图。

而不是直接调用云 API,而是将云服务配置为调用在本地计算机上运行的开发隧道(1)。 将开发隧道配置为使用开发代理截获的主机标头。 每次云服务调用开发隧道时,都会将请求传递给拦截它(2) 的开发代理。 使用开发代理 重写Plugin,可以更改截获请求的 URL,并将其转发到云 API (3)。 云 API 处理请求并返回对开发代理(4)的响应。 开发代理将响应传递给开发隧道(5),后者将其转发到云服务(6)。 由于请求通过本地计算机路由,因此可以检查其信息,包括 URL、标头和正文,以及来自云 API 的响应。

场景

假设你想要检查云服务向位于 https://jsonplaceholder.typicode.com的演示 JSONPlaceholder API 发出的 API 请求。 通过组合开发代理和开发隧道,可以截获请求并检查其信息。

可以使用开发隧道检查工具或使用开发代理 DevToolsPlugin 来检查请求。 这两种工具都使用 Chrome Dev Tools 显示有关截获的请求和响应的信息。 使用开发隧道检查工具时,会看到开发隧道 URL 作为请求 URL。 相比之下,使用开发代理 DevToolsPlugin 时,你将了解如何使用本地 URL 或重写 URL 截获请求。

使用开发代理、开发隧道和开发隧道检查工具检查 API 请求

  1. 配置开发代理以截获对https://jsonplaceholder.typicode.com以下项的请求:http://jsonplaceholder.typicode.local

    {
      "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v0.24.0/rc.schema.json",
      "plugins": [
        {
          "name": "RewritePlugin",
          "enabled": true,
          "pluginPath": "~appFolder/plugins/dev-proxy-plugins.dll",
          "configSection": "rewritePlugin"
        }
      ],
      "urlsToWatch": [
        "https://jsonplaceholder.typicode.com/*",
        "http://jsonplaceholder.typicode.local/*"
      ],
      "rewritePlugin": {
        "rewritesFile": "devproxy-rewrites.json"
      },
      "logLevel": "information",
      "newVersionNotification": "stable",
      "showSkipMessages": true
    }
    

    配置文件使用 RewritePlugin 重写截获请求的 URL。 它还将开发代理配置为截获对 https://jsonplaceholder.typicode.com URL 和 http://jsonplaceholder.typicode.local URL 的请求。

    注意

    虽然不需要使用 .local 域,但最好帮助你区分实际请求和截获的请求。 另请注意,对于 .local 域,使用 HTTP 协议,而不是 HTTPS。 开发隧道不支持将请求路由到本地计算机上的自定义主机标头的 HTTPS,这就是为什么需要使用 HTTP 的原因。

  2. 创建一个名为 devproxy-rewrites.json 更改截获请求 URL 的重写文件:

    {
      "rewrites": [
        {
          "in": {
            "url": "^http://jsonplaceholder.typicode.local(.*)"
          },
          "out": {
            "url": "https://jsonplaceholder.typicode.com$1"
          }
        }
      ]
    }
    

    重写文件将截获的请求的 URL 更改为 http://jsonplaceholder.typicode.local https://jsonplaceholder.typicode.com

  3. 通过在命令行 devproxy中运行来启动开发代理。

    运行开发人员代理的命令行的屏幕截图。

  4. 通过在命令行 devtunnel host --host-header jsonplaceholder.typicode.local --port-numbers 8000 --allow-anonymous中运行来启动开发隧道。

    运行开发代理和开发隧道的命令行的屏幕截图。

    使用此命令,在计算机上打开新的开发隧道。 将其映射到开发人员代理侦听传入请求的 8000 端口。 还可以指定开发代理截获的主机标头。

  5. 请注意可用于配置云服务来调用本地计算机的开发隧道的 URL,例如 https://tunnel_id-8000.euw.devtunnels.ms

  6. 在 Web 浏览器中,打开开发隧道检查 URL,例如 https://tunnel_id-8000-inspect.euw.devtunnels.ms

  7. 通过在命令行中运行,使用开发隧道 URL 模拟调用云 API 的云服务: curl https://tunnel_id-8000.euw.devtunnels.ms/posts/1

    注意

    请注意,主机名对应于计算机上的开发隧道的 URL。 该路径与要检查的 API 的路径匹配。

    运行开发代理和开发隧道的命令行的屏幕截图,以及调用开发隧道的 curl。

  8. 请注意开发代理如何截获请求,并将其转发到云 API,最终将响应返回到客户端。

  9. 在 Web 浏览器中,请注意有关截获的请求和来自云 API 的响应的信息。

    Web 浏览器的屏幕截图,其中显示了截获的请求的开发隧道检查工具。

    注意

    请注意,记录的请求 URL 是开发隧道的 URL。 记录的主机标头是开发代理截获的主机标头。

  10. 在命令行中按 Ctrl+C 关闭开发隧道并停止开发代理。

使用开发代理和 DevToolsPlugin 检查 API 请求

检查云服务问题的 API 请求的另一种方法是使用开发代理 DevToolsPlugin。 使用 DevToolsPlugin 和开发隧道检查工具之间的区别在于,DevToolsPlugin 演示如何使用本地 URL 或重写 URL 截获请求。

将开发代理配置为使用 DevToolsPlugin 通过截获的 URL 检查 API 请求

首先,我们将开发代理配置为检查云 API 请求。 让我们将 DevToolsPlugin 配置为在开发代理重写 URL 之前显示有关 URL 的信息。

  1. 更新开发代理配置文件以使用 DevToolsPlugin:

    {
      "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v0.24.0/rc.schema.json",
      "plugins": [
        {
          "name": "DevToolsPlugin",
          "enabled": true,
          "pluginPath": "~appFolder/plugins/dev-proxy-plugins.dll"
        },
        {
          "name": "RewritePlugin",
          "enabled": true,
          "pluginPath": "~appFolder/plugins/dev-proxy-plugins.dll",
          "configSection": "rewritePlugin"
        }
      ],
      "urlsToWatch": [
        "https://jsonplaceholder.typicode.com/*",
        "http://jsonplaceholder.typicode.local/*"
      ],
      "rewritePlugin": {
        "rewritesFile": "devproxy-rewrites.json"
      },
      "logLevel": "information",
      "newVersionNotification": "stable",
      "showSkipMessages": true
    }
    

    注意

    请注意,我们在 RewritePlugin 之前添加 DevToolsPlugin。 通过首先添加 DevToolsPlugin,它会在重写之前显示有关截获的请求的信息。

  2. 通过在命令行 devproxy中运行来启动开发代理。 请注意,开发代理打开一个 Web 浏览器窗口,Chrome 开发工具可见。

  3. 通过在命令行 devtunnel host --host-header jsonplaceholder.typicode.local --port-numbers 8000 --allow-anonymous中运行来启动开发隧道。

  4. 通过在命令行中运行,使用开发隧道 URL 模拟调用云 API 的云服务: curl https://tunnel_id-8000.euw.devtunnels.ms/posts/1

  5. 使用 Chrome Dev Tools 在 Web 浏览器中,请注意有关截获的请求和来自云 API 的响应的信息。

    Web 浏览器的屏幕截图,其中显示了截获的请求的开发代理检查工具。

    注意

    请注意,记录的请求 URL 是云 API 的 URL。 记录的主机标头是开发代理截获的主机标头。

  6. 在命令行中按 Ctrl+C 关闭开发隧道并停止开发代理。

将开发代理配置为使用 DevToolsPlugin 检查使用重写 URL 的 API 请求

接下来,更新开发代理配置以显示有关重写 URL 的信息。

  1. 通过在 RewritePlugin 之后移动 DevToolsPlugin 来更新开发代理配置文件:

    {
      "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v0.24.0/rc.schema.json",
      "plugins": [
        {
          "name": "RewritePlugin",
          "enabled": true,
          "pluginPath": "~appFolder/plugins/dev-proxy-plugins.dll",
          "configSection": "rewritePlugin"
        },
        {
          "name": "DevToolsPlugin",
          "enabled": true,
          "pluginPath": "~appFolder/plugins/dev-proxy-plugins.dll"
        }
      ],
      "urlsToWatch": [
        "https://jsonplaceholder.typicode.com/*",
        "http://jsonplaceholder.typicode.local/*"
      ],
      "rewritePlugin": {
        "rewritesFile": "devproxy-rewrites.json"
      },
      "logLevel": "information",
      "newVersionNotification": "stable",
      "showSkipMessages": true
    }
    
  2. 通过在命令行 devproxy中运行来启动开发代理。 请注意,开发代理打开一个 Web 浏览器窗口,Chrome 开发工具可见。

  3. 通过在命令行 devtunnel host --host-header jsonplaceholder.typicode.local --port-numbers 8000 --allow-anonymous中运行来启动开发隧道。

  4. 通过在命令行中运行,使用开发隧道 URL 模拟调用云 API 的云服务: curl https://tunnel_id-8000.euw.devtunnels.ms/posts/1

  5. 使用 Chrome Dev Tools 在 Web 浏览器中,请注意有关截获的请求和来自云 API 的响应的信息。

    Web 浏览器的屏幕截图,其中显示了使用云 API URL 截获的请求的开发代理检查工具。

    注意

    请注意,记录的请求 URL 和主机标头都显示云 API 的 URL。

  6. 在命令行中按 Ctrl+C 关闭开发隧道并停止开发代理。

总结

通过使用开发代理和开发隧道,可以检查云服务向云 API 发出的 API 请求。 可以使用开发隧道检查工具或开发代理 DevToolsPlugin 来检查请求。 这两种工具都显示有关截获的请求的信息,包括 URL、标头和正文,以及来自云 API 的响应。 通过使用开发代理和开发隧道,可以更好地了解云服务如何与云 API 交互,并更有效地排查问题。

后续步骤

详细了解 RewritePlugin。