开发代理入门

开发代理是一种命令行工具,可帮助你模拟云 API 的行为和错误,以帮助构建可复原的应用。

本教程介绍如何安装、运行和配置开发代理。

如果你确实遇到任何困难,请毫不犹豫地通过提出一个新 问题 与我们联系,我们很高兴能帮助你解决。

安装开发代理

安装开发代理的最简单方法是使用 winget。 或者,可以手动安装开发代理。

若要使用 winget 安装开发代理,请运行以下命令:

winget install Microsoft.DevProxy --silent

重要

开发代理安装程序向 PATH 添加新条目。 若要在安装后使用开发代理,必须重启命令提示符,以确保 PATH 环境变量已刷新。

注意

若要试用最新的预览功能,请安装开发代理的 beta 版本。

若要使用 winget 安装开发代理,请运行以下命令:

winget install Microsoft.DevProxy.Beta --silent

运行开发代理的 beta 版本 devproxy-beta

安装开发代理的最简单方法是使用 Homebrew。 或者,可以手动安装开发代理。

若要使用 Homebrew 安装开发代理,请运行以下命令:

brew tap microsoft/dev-proxy
brew install dev-proxy

注意

若要试用最新的预览功能,请安装开发代理的 beta 版本。

若要使用 Homebrew 安装开发代理,请运行以下命令:

brew tap microsoft/dev-proxy
brew install dev-proxy-beta

运行开发代理的 beta 版本 devproxy-beta

安装开发代理的最简单方法是使用安装脚本。 或者,可以手动安装开发代理。

若要使用安装脚本安装开发代理,请运行以下命令:

bash -c "$(curl -sL https://aka.ms/devproxy/setup.sh)"

如果使用 PowerShell,请运行以下命令:

(Invoke-WebRequest https://aka.ms/devproxy/setup.ps1).Content | Invoke-Expression

注意

若要试用最新的预览功能,请安装开发代理的 beta 版本。

若要使用安装脚本安装开发代理,请运行以下命令:

bash -c "$(curl -sL https://aka.ms/devproxy/setup-beta.sh)"

如果使用 PowerShell,请运行以下命令:

(Invoke-WebRequest https://aka.ms/devproxy/setup-beta.ps1).Content | Invoke-Expression

运行开发代理的 beta 版本 devproxy-beta

首次启动开发代理

首次在计算机上启动开发代理时,需要执行几个步骤,以确保开发代理可以截获来自计算机的请求并成功响应。 首次运行后无需重复这些步骤。

  1. 启动开发代理。 打开命令提示符会话。 输入 devproxy,然后按 Enter
  2. 信任证书。 开发代理安装名为 Dev Proxy CA.. 显示警告。 选择 Yes 以确认要安装证书。 开发代理使用此证书解密从计算机发送的 HTTPS 流量。
  3. 允许防火墙访问。 Windows 防火墙阻止代理。 显示警告。 选择 Allow access 按钮以允许流量通过防火墙。
  1. 启动开发代理。 打开命令提示符会话。 输入 devproxy,然后按 Enter
  2. 信任证书。 开发代理会安装一个名为 Dev Proxy CA的证书,该证书用于解密从计算机发送的 HTTPS 流量。 显示警告。 按 y 确认要信任证书。
  3. 接受传入连接。 显示警告。 选择 Allow 进行确认。
  1. 启动开发代理。 打开命令提示符会话。 输入 devproxy,然后按 Enter

  2. 信任证书。 开发代理使用自定义 SSL 证书解密从计算机发送的 HTTPS 流量。

    重要

    以下说明适用于 Ubuntu。 对于其他 Linux 分发版,步骤可能有所不同。

    若要安装和信任证书,请在新的命令提示符下运行以下命令:

    # Export Dev Proxy root certificate
    openssl pkcs12 -in ~/.config/dev-proxy/rootCert.pfx -clcerts -nokeys -out dev-proxy-ca.crt -passin pass:""
    # Install the certificate
    sudo cp dev-proxy-ca.crt /usr/local/share/ca-certificates/
    # Update certificates
    sudo update-ca-certificates
    

命令提示符显示以下输出:

 info    8 error responses loaded from devproxy-errors.json
 info    Listening on 127.0.0.1:8000...

Hotkeys: issue (w)eb request, (r)ecord, (s)top recording, (c)lear screen
Press CTRL+C to stop Dev Proxy

默认情况下,开发代理配置为:

  • 截获对任何 JSON 占位符 API 终结点发出的请求
  • 模拟 API 错误响应和 API 限制,失败率为 50%

截获请求

开发代理将截获来自计算机上的任何应用程序的已知 URL 的请求。 检测到请求时,开发代理会将请求传递到 API(不采取任何操作),或返回响应。

  • 从命令行向 JSON 占位符 API 发送请求,并切换回代理进程以查看输出。

在 PowerShell 中 Invoke-WebRequest ,使用 cmdlet 将 GET 请求发送到 JSON 占位符 API。

Invoke-WebRequest -Uri https://jsonplaceholder.typicode.com/posts

如果使用 curl,请使用以下命令将 GET 请求发送到 JSON 占位符 API。

curl -ix http://localhost:8000 https://jsonplaceholder.typicode.com/posts

还可以使用 PostmanAPI 客户端将 GET 请求发送到 https://jsonplaceholder.typicode.com/posts

将显示一个条目,其中包含有关传入请求和开发代理执行的操作的一些基本信息。 开发代理模拟错误响应的可能性为 50%。 如果请求未返回错误,则开发人员代理会传递它。

 req   ╭ GET https://jsonplaceholder.typicode.com/posts
 api   ╰ Passed through
  • 重复从命令行向 JSON 占位符 API 发送请求,直到返回错误响应。
 req   ╭ GET https://jsonplaceholder.typicode.com/posts
 api   ╰ Passed through

 req   ╭ GET https://jsonplaceholder.typicode.com/posts
 oops  ╰ 403 Forbidden

当开发代理返回错误响应时, chaos 条目中会显示标签。

  • 尝试将请求发送到 JSON 占位符 API 上可用的其他终结点
    • https://jsonplaceholder.typicode.com/posts
    • https://jsonplaceholder.typicode.com/posts/1
    • https://jsonplaceholder.typicode.com/posts/1/comments
    • https://jsonplaceholder.typicode.com/comments?postId=1

安全地停止开发代理

当不再需要开发代理运行时,应始终安全地停止它。

  • Ctrl + C 安全地停止开发代理。

如果关闭命令提示符会话,则开发代理不会正确注册为系统代理,并且可能会遇到一些 常见问题

更新要监视的 URL

默认情况下,开发代理配置为截获对 JSON 占位符 API 发出的任何请求。 可以将开发代理配置为截获对任何 HTTP API 的请求。

  • 在命令提示符下,运行 brew list dev-proxy 以找到安装文件夹。
  • 在 Finder 中打开开发代理安装文件夹。
  • 在开发代理安装文件夹中,在文本编辑器中打开 devproxyrc.json
  • urlsToWatch找到数组。
"urlsToWatch": [
  "https://jsonplaceholder.typicode.com/*"
],

数组 urlsToWatch 表示已知的 URL。 开发代理监视从当前条目到任何终结点的请求。 该条目在 URL 后使用星号作为通配符。 在此数组中添加更多条目会扩展开发代理监视的 URL。

假设你不希望开发代理截获对特定终结点发出的请求。

  • 向数组添加新条目 urlsToWatch
"urlsToWatch": [
  "!https://jsonplaceholder.typicode.com/posts/2",
  "https://jsonplaceholder.typicode.com/*"
],

URL 开头的感叹号告知开发代理忽略与该 URL 匹配的任何请求。 可以在 URL 中混合和匹配感叹号和星号。

  • 在命令行中,输入 devproxy 并按 Enter 启动开发代理。
  • 从命令行发送请求 https://jsonplaceholder.typicode.com/posts/2 并查看输出。

当忽略的 URL 与请求匹配时,开发代理不会处理请求,因此不会显示任何输出。

数组中 urlsToWatch 列出 URL 的顺序很重要。 开发代理按顺序处理这些 URL。 URL 匹配时,不会再次处理它。 因此,首先放置 URL 可确保在处理下一个 URL 之前忽略请求。

更改失败率

默认情况下,开发代理配置为失败请求,其中 50% 的 URL 被监视。 可以增加或减少返回错误响应的请求的可能性。

让我们更新失败率,以便对 JSON 占位符 API 的每个请求都返回错误响应。

  • 在开发代理安装文件夹中,在文本编辑器中打开 devproxyrc.json
  • 找到 rate 属性,将值从 50 更新为 100

该文件 devproxyrc.json 包含启动开发代理时使用的配置设置。 更改配置设置时,应始终停止并启动开发代理,以便保留所做的更改。

  • 在命令行中,输入 devproxy 并按 Enter 启动开发代理。
  • 从命令行向 JSON 占位符 API 发送请求并查看输出。

或者,可以在运行时使用 --failure-rate 启动开发代理时的选项替代配置设置。

devproxy --failure-rate 100
  • Ctrl + C 安全地停止开发代理。

模拟限制

默认情况下,开发代理返回泛型 400 和 500 错误响应的范围。 可以根据自己的需求自定义这些错误响应。

开发代理使用 插件 来启用不同的 API 行为,默认情况下,我们为你启用两个插件。

让我们更改配置,以便开发代理始终返回 429 Too Many requests 模拟限制的错误响应。

首先,找到包含错误定义的文件的位置。

  • 在开发代理安装文件夹中,在文本编辑器中打开 devproxyrc.json
  • 在数组中plugins,找到 GenericRandomErrorPlugin 插件的条目。 请注意属性的值 configSection
  • 在文件下,找到该 genericRandomErrorPlugin 对象。 请注意属性的值 errorsFile

提示

启动开发代理时,错误文件的位置也会显示在输出中。

  • 在开发代理安装文件夹中,在文本编辑器中打开 devproxy-errors.json
  • 删除数组中的所有 responses 响应条目,但响应除外 429
{
  "$schema": "https://raw.githubusercontent.com/microsoft/dev-proxy/main/schemas/v0.20.0/genericrandomerrorplugin.schema.json",
  "errors": [
    {
      "request": {
        "url": "https://jsonplaceholder.typicode.com/*"
      },
      "responses": [
        {
          "statusCode": 429,
          "body": {
            "message": "Too Many Requests",
            "details": "The user has sent too many requests in a given amount of time (\"rate limiting\")."
          },
          "headers": {
            "Retry-After": "@dynamic"
          }
        }
      ]
    }
  ]
}
  • 在命令行中,输入 devproxy 并按 Enter 启动开发代理。
  • 从命令行向 JSON 占位符 API 发送请求并查看输出。
 req   ╭ GET https://jsonplaceholder.typicode.com/posts
 oops  ╰ 429 TooManyRequests
  • Ctrl + C 安全地停止开发代理。

下一步

了解如何使用开发代理来模拟你自己的应用程序的随机错误。