Отладка с помощью прокси-сервера разработки

На первый взгляд
Цель: Отладка приложения при моделировании ошибок API с использованием Dev Proxy
Время: 15 минут
Подключаемые модули:GenericRandomErrorPlugin
Предварительные требования:Настройка прокси-сервера разработки, VS Code

При создании приложений, вызывающих API, необходимо убедиться, что код правильно обрабатывает ошибки. Объединяя прокси-сервер разработки с отладчиком Visual Studio (VS) Code, вы можете имитировать ошибки API и выполнить шаги по обработке кода обработки ошибок, чтобы убедиться, что он работает правильно.

Обзор

Отладка с помощью прокси-сервера разработки включает три шага.

  1. Настройка VS Code для маршрутизации HTTP-запросов через прокси разработки
  2. Настройка прокси-сервера разработки для имитации определенных ошибок
  3. Установка точек останова в коде обработки ошибок и отладка

Настройка VS Code для отладки с помощью прокси-сервера разработки

Настройка VS Code зависит от используемого языка программирования. В следующих разделах показано, как настроить VS Code для приложений Node.js, .NET и Python.

Node.js

Чтобы отладить приложение Node.js с помощью прокси-сервера разработки, настройте файл, чтобы задать переменные среды прокси-сервера и отключить проверку TLS/SSL-сертификата.

Файл: VSCODE/launch.json

{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "node",
      "request": "launch",
      "name": "Debug with Dev Proxy",
      "skipFiles": [
        "<node_internals>/**"
      ],
      "program": "${workspaceFolder}/index.js",
      "env": {
        "NODE_ENV": "development",
        "http_proxy": "http://127.0.0.1:8000",
        "https_proxy": "http://127.0.0.1:8000",
        "GLOBAL_AGENT_HTTP_PROXY": "http://127.0.0.1:8000",
        "NODE_TLS_REJECT_UNAUTHORIZED": "0"
      }
    }
  ]
}

Это важно

Параметр отключает проверку TLS/SSL-сертификата. Используйте этот параметр только во время разработки. Для обеспечения более безопасного подхода используйте средство для доверия сертификату Dev Proxy напрямую:

macOS/Linux:

"NODE_EXTRA_CA_CERTS": "${env:HOME}/.devproxy/rootCert.pem"

#REF!:

"NODE_EXTRA_CA_CERTS": "${env:USERPROFILE}\\.devproxy\\rootCert.pem"

Переменная используется пакетом , который обеспечивает поддержку прокси-сервера для многих Node.js библиотек HTTP. Дополнительные сведения о настройке различных библиотек HTTP см. в статье "Использование прокси-сервера разработки" с Node.js приложениями.

.NET

.NET приложения автоматически используют параметры системного прокси-сервера. Для отладки приложения .NET с помощью прокси-сервера разработки обычно не требуется устанавливать переменные среды. Создайте базовую конфигурацию отладки:

Файл: VSCODE/launch.json

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Debug with Dev Proxy",
      "type": "coreclr",
      "request": "launch",
      "preLaunchTask": "build",
      "program": "${workspaceFolder}/bin/Debug/net8.0/MyApp.dll",
      "args": [],
      "cwd": "${workspaceFolder}",
      "console": "internalConsole",
      "stopAtEntry": false
    }
  ]
}

Если приложение не выбирает системный прокси-сервер, явно задайте переменные среды прокси-сервера:

Файл: VSCODE/launch.json (с явными параметрами прокси-сервера)

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Debug with Dev Proxy",
      "type": "coreclr",
      "request": "launch",
      "preLaunchTask": "build",
      "program": "${workspaceFolder}/bin/Debug/net8.0/MyApp.dll",
      "args": [],
      "cwd": "${workspaceFolder}",
      "console": "internalConsole",
      "stopAtEntry": false,
      "env": {
        "http_proxy": "http://127.0.0.1:8000",
        "https_proxy": "http://127.0.0.1:8000"
      }
    }
  ]
}

Подсказка

В #REF! и macOS .NET автоматически доверяет сертификату прокси-сервера разработки, если он установлен в качестве доверенного корневого сертификата во время установки прокси-сервера Dev Proxy. В Linux может потребоваться доверять сертификату вручную. См. документацию вашего дистрибутива для настройки доверенных сертификатов.

Python

Чтобы выполнить отладку приложения Python с помощью прокси-сервера разработки, настройте файл launch.json для задания переменных среды прокси-сервера. Конфигурация зависит от того, используется ли библиотека или другие библиотеки HTTP.

Файл: VSCODE/launch.json

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Debug with Dev Proxy",
      "type": "debugpy",
      "request": "launch",
      "program": "${workspaceFolder}/main.py",
      "console": "integratedTerminal",
      "env": {
        "HTTP_PROXY": "http://127.0.0.1:8000",
        "HTTPS_PROXY": "http://127.0.0.1:8000",
        "REQUESTS_CA_BUNDLE": ""
      }
    }
  ]
}

Это важно

Если задана пустая строка, библиотека пропускает проверку TLS/SSL-сертификата. Используйте этот параметр только во время разработки.

Для более безопасного подхода укажите сертификат прокси-сервера разработки:

macOS/Linux:

"REQUESTS_CA_BUNDLE": "${env:HOME}/.devproxy/rootCert.pem"

#REF!:

"REQUESTS_CA_BUNDLE": "${env:USERPROFILE}\\.devproxy\\rootCert.pem"

Если вы используете библиотеку , настройте проверку TLS/SSL с помощью переменной среды.

{
  "env": {
    "HTTP_PROXY": "http://127.0.0.1:8000",
    "HTTPS_PROXY": "http://127.0.0.1:8000",
    "TLS/SSL_CERT_FILE": "${env:HOME}/.devproxy/rootCert.pem"
  }
}

Настройка прокси-сервера разработки для имитации ошибок

Чтобы отладить обработку ошибок, настройте прокси-сервер разработки для возврата определенных ошибок при вызове API приложения. Используйте GenericRandomErrorPlugin для имитации ошибок, например или .

Имитация ошибки 429 (слишком много запросов)

Создайте файл конфигурации прокси для разработки, который имитирует ограничение скорости передачи данных.

Файл: devproxyrc.json

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.1.0/rc.schema.json",
  "plugins": [
    {
      "name": "GenericRandomErrorPlugin",
      "enabled": true,
      "pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
      "configSection": "errorsConfig"
    }
  ],
  "urlsToWatch": [
    "https://api.contoso.com/*"
  ],
  "rate": 100,
  "errorsConfig": {
    "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.1.0/genericrandomerrorplugin.schema.json",
    "errorsFile": "errors.json"
  }
}

Создайте файл ошибок с определенными ответами на ошибки:

Файл: errors.json

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.1.0/genericrandomerrorplugin.errorsfile.schema.json",
  "errors": [
    {
      "request": {
        "url": "https://api.contoso.com/*"
      },
      "responses": [
        {
          "statusCode": 429,
          "headers": [
            {
              "name": "content-type",
              "value": "application/json"
            },
            {
              "name": "Retry-After",
              "value": "60"
            }
          ],
          "body": {
            "error": {
              "code": "TooManyRequests",
              "message": "Rate limit exceeded. Retry after 60 seconds."
            }
          }
        }
      ]
    }
  ]
}

Подсказка

Установите <параметр> в <значение>, чтобы каждый запрос завершался сбоем и вы всегда попадали в код обработки ошибок во время отладки. Уменьшите частоту, когда требуется проверить периодические ошибки.

Имитация ошибки 500 (внутренняя ошибка сервера)

Чтобы имитировать ошибки сервера, добавьте другой ответ на ошибку:

Файл: errors.json (несколько ошибок)

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.1.0/genericrandomerrorplugin.errorsfile.schema.json",
  "errors": [
    {
      "request": {
        "url": "https://api.contoso.com/*"
      },
      "responses": [
        {
          "statusCode": 429,
          "headers": [
            {
              "name": "content-type",
              "value": "application/json"
            },
            {
              "name": "Retry-After",
              "value": "60"
            }
          ],
          "body": {
            "error": {
              "code": "TooManyRequests",
              "message": "Rate limit exceeded. Retry after 60 seconds."
            }
          }
        },
        {
          "statusCode": 500,
          "headers": [
            {
              "name": "content-type",
              "value": "application/json"
            }
          ],
          "body": {
            "error": {
              "code": "InternalServerError",
              "message": "An unexpected error occurred."
            }
          }
        }
      ]
    }
  ]
}

Когда вы определяете несколько ответов на ошибки, прокси-сервер Dev случайным образом выбирает один для каждого перехваченного запроса.

Отладка кода обработки ошибок

Настроив VS Code и Dev Proxy, теперь можно выполнить отладку кода обработки ошибок.

Шаг 1. Установка точек останова

Откройте исходный код и задайте точки останова в коде обработки ошибок. Например, в приложении Node.js:

async function fetchData() {
  try {
    const response = await fetch('https://api.contoso.com/data');
    
    if (!response.ok) {
      // Set a breakpoint here to debug error responses
      throw new Error(`HTTP error: ${response.status}`);
    }
    
    return await response.json();
  } catch (error) {
    // Set a breakpoint here to debug exceptions
    console.error('Failed to fetch data:', error);
    throw error;
  }
}

Шаг 2. Запуск прокси-сервера разработки

Запустите прокси-сервер разработки с файлом конфигурации:

devproxy --config-file devproxyrc.json

Шаг 3. Начало отладки в VS Code

  1. Откройте VS Code
  2. Нажмите клавишу F5 или выберите запуск отладки
  3. Когда ваше приложение делает вызов API, Dev Proxy перехватывает его и возвращает ошибку.
  4. VS Code приостанавливается в точке останова
  5. Использование элементов управления отладки для пошагового выполнения кода и проверки переменных

Шаг 4. Проверка ошибки

Когда VS Code приостанавливается в точке останова, используйте панель отладки, чтобы:

  • Просмотр кода состояния ответа об ошибке и сообщения
  • Проверка значений локальных переменных
  • Шаг за шагом выполните логику повторных попыток
  • Убедитесь, что сообщения об ошибках удобны для пользователя

Автоматический запуск и остановка прокси-сервера разработки

Чтобы упростить рабочий процесс отладки, настройте VS Code для автоматического запуска прокси разработки при запуске отладки и его остановке при завершении. Установите расширение Набора средств Dev Proxy и настройте задачи.

Файл: VSCODE/tasks.json

{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "devproxy-start",
      "type": "devproxy",
      "command": "start",
      "args": [
        "--config-file",
        "devproxyrc.json"
      ],
      "isBackground": true,
      "problemMatcher": "$devproxy-watch"
    },
    {
      "label": "devproxy-stop",
      "type": "devproxy",
      "command": "stop"
    }
  ]
}

Чтобы использовать эти задачи, обновите следующее :

Файл: VSCODE/launch.json (Node.js с автозапуском)

{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "node",
      "request": "launch",
      "name": "Debug with Dev Proxy",
      "skipFiles": [
        "<node_internals>/**"
      ],
      "program": "${workspaceFolder}/index.js",
      "preLaunchTask": "devproxy-start",
      "postDebugTask": "devproxy-stop",
      "env": {
        "NODE_ENV": "development",
        "http_proxy": "http://127.0.0.1:8000",
        "https_proxy": "http://127.0.0.1:8000",
        "GLOBAL_AGENT_HTTP_PROXY": "http://127.0.0.1:8000",
        "NODE_TLS_REJECT_UNAUTHORIZED": "0"
      }
    }
  ]
}

Советы по эффективной отладке

  • Чтобы стабильно достигать точек останова, установите в конфигурации Dev Proxy параметр, чтобы каждый запрос завершался сбоем.
  • Чтобы понять, как код обрабатывает определенную ошибку, используйте один ответ на ошибку при отладке.
  • Чтобы убедиться, что ваш код соблюдает ограничения, проверьте, что он считывает и следует заголовку 429 при отладке ошибок 429.
  • Чтобы убедиться, что код обрабатывает необычные ответы корректно, используйте прокси разработки для имитации пограничных вариантов, таких как неправильно сформированный JSON или отсутствующие заголовки.
  • Чтобы останавливаться только на определённых ошибках, используйте условные точки останова в VS Code, щелкните правой кнопкой мыши по точке останова и добавьте условие, например .

См. также