Ladění s využitím dev proxy serveru

Na první pohled
Cílem: Ladění aplikace, zatímco dev proxy simuluje chyby rozhraní API
Čas: 15 minut
Pluginy:GenericRandomErrorPlugin
Požadavky: Nastavení dev proxy serveru, VS Code

Při vytváření aplikací, které volají rozhraní API, je potřeba zajistit, aby váš kód zpracovával chyby správně. Kombinací vývojového proxy serveru s ladicím programem nástroje Visual Studio (VS) Code můžete simulovat chyby rozhraní API a projít kód pro zpracování chyb, abyste ověřili, že funguje správně.

Přehled

Ladění pomocí Dev Proxy zahrnuje tři kroky:

  1. Konfigurace nástroje VS Code pro směrování požadavků HTTP přes dev Proxy
  2. Konfigurace dev proxy serveru pro simulaci konkrétních chyb
  3. Nastavení zarážek v kódu pro zpracování chyb a ladění

Konfigurace nástroje VS Code pro ladění pomocí dev proxy serveru

Způsob konfigurace nástroje VS Code závisí na používaném programovacím jazyce. Následující části ukazují, jak nakonfigurovat VS Code pro Node.js, technologie .NET a Python aplikace.

Node.js

Pokud chcete ladit Node.js aplikaci pomocí dev proxy serveru, nakonfigurujte soubor tak, aby nastavil proměnné prostředí proxy serveru a zakázal ověření certifikátu TLS/SSL.

Soubor: .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"
      }
    }
  ]
}

Důležité

Nastavení zakáže ověření certifikátu TLS/SSL. Toto nastavení používejte pouze během vývoje. Pokud chcete bezpečnější přístup, použijte k přímému schválení certifikátu Dev Proxy.

macOS/Linux:

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

Windows:

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

Proměnnou používá balíček, který poskytuje podporu proxy pro mnoho Node.js knihoven HTTP. Další informace o konfiguraci různých HTTP knihoven najdete v části Použití Dev Proxy s aplikacemi Node.js.

technologie .NET

technologie .NET aplikace automaticky používají nastavení systémového proxy serveru. Pokud chcete ladit technologie .NET aplikaci pomocí dev Proxy, obvykle nemusíte nastavovat žádné proměnné prostředí. Vytvořte základní konfiguraci ladění:

Soubor: .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
    }
  ]
}

Pokud vaše aplikace nepřebírá systémový proxy server, explicitně nastavte proměnné prostředí proxy serveru:

Soubor: .vscode/launch.json (s explicitním nastavením proxy serveru)

{
  "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"
      }
    }
  ]
}

Návod

V systému Windows a macOS technologie .NET certifikátu Dev Proxy automaticky důvěřuje, pokud jste ho nainstalovali jako důvěryhodný kořenový certifikát během instalace Dev Proxy. Na Linuxu možná budete muset nastavit důvěru k certifikátu ručně. Informace o konfiguraci důvěryhodných certifikátů najdete v dokumentaci k vaší distribuci.

Python

Pokud chcete ladit Python aplikaci pomocí dev Proxy, nakonfigurujte soubor launch.json tak, aby nastavil proměnné prostředí proxy. Konfigurace závisí na tom, jestli používáte knihovnu nebo jiné knihovny HTTP.

Soubor: .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": ""
      }
    }
  ]
}

Důležité

Nastavení na prázdný řetězec říká knihovně, aby přeskočila ověření certifikátu TLS/SSL. Toto nastavení používejte pouze během vývoje.

Pokud chcete bezpečnější přístup, odkažte na certifikát Dev Proxy:

macOS/Linux:

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

Windows:

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

Pokud používáte knihovnu , nakonfigurujte místo toho ověřování TLS/SSL pomocí proměnné prostředí:

{
  "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"
  }
}

Konfigurace dev proxy serveru pro simulaci chyb

Pokud chcete ladit zpracování chyb, nakonfigurujte Dev Proxy tak, aby při volání rozhraní API aplikace vracela konkrétní chyby. Pomocí GenericRandomErrorPlugin simulujte chyby jako nebo .

Simulace chyby 429 (příliš mnoho požadavků)

Vytvořte konfigurační soubor dev proxy serveru, který simuluje omezování:

Soubor: 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"
  }
}

Vytvořte soubor chyb s konkrétními odpověďmi na chyby:

Soubor: 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."
            }
          }
        }
      ]
    }
  ]
}

Návod

Nastavte na to, aby všechny požadavky selhaly, abyste během ladění konzistentně narazili na kód zpracování chyb. Snižte frekvenci, pokud chcete testovat přerušované chyby.

Simulace chyby 500 (vnitřní chyba serveru)

Pokud chcete simulovat chyby serveru, přidejte další chybovou odpověď:

Soubor: errors.json (více chyb)

{
  "$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."
            }
          }
        }
      ]
    }
  ]
}

Když definujete více chybových odpovědí, dev proxy náhodně vybere jednu pro každý zachycený požadavek.

Ladění kódu pro zpracování chyb

S nakonfigurovaným VS Code a dev Proxy teď můžete ladit kód zpracování chyb.

Krok 1: Nastavení zarážek

Otevřete zdrojový kód a nastavte zarážky v kódu pro zpracování chyb. Například v aplikaci 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;
  }
}

Krok 2: Spuštění dev proxy serveru

Spusťte dev Proxy s konfiguračním souborem:

devproxy --config-file devproxyrc.json

Krok 3: Spuštění ladění ve VS Code

  1. Otevření editoru VS Code
  2. Stiskněte klávesu F5 nebo vyberte Spustit ladění.
  3. Když vaše aplikace volá rozhraní API, dev proxy ho zachytí a vrátí chybu.
  4. VS Code se pozastaví na bodu zlomu.
  5. Použití ovládacích prvků ladění k procházení kódu a kontrole proměnných

Krok 4: Kontrola chyby

Když se VS Code zastaví na zarážce, použijte panel ladění k:

  • Zobrazení stavového kódu a zprávy odpovědi na chybu
  • Kontrola hodnot místních proměnných
  • Projděte podrobně logiku opakování.
  • Ověřte, že vaše chybové zprávy jsou uživatelsky přívětivé.

Automatické spuštění a zastavení dev proxy serveru

Pokud chcete zjednodušit ladicí pracovní postup, nakonfigurujte VS Code, aby při zahájení ladění automaticky spustil Dev Proxy a po dokončení ho zastavil. Nainstalujte rozšíření Dev Proxy Toolkit a nakonfigurujte úlohy:

Soubor: .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"
    }
  ]
}

Pokud chcete tyto úlohy použít, aktualizujte:

Soubor: .vscode/launch.json (Node.js s automatickým startem)

{
  "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"
      }
    }
  ]
}

Tipy pro efektivní ladění

  • Abyste mohli konzistentně dosahovat svých breakpointů, nastavte v konfiguraci Dev Proxy serveru, aby každý požadavek selhal.
  • Pokud chcete zjistit, jak váš kód zpracovává konkrétní chybu, použijte při ladění jedinou chybovou odpověď.
  • Pokud chcete ověřit, že váš kód respektuje omezování, zkontrolujte, jestli čte a sleduje hlavičku při ladění chyb 429.
  • Pokud chcete zajistit, aby váš kód řádně zpracovával neobvyklé odpovědi, použijte dev Proxy k simulaci hraničních případů, jako jsou poškozený kód JSON nebo chybějící hlavičky.
  • Chcete-li přerušit pouze konkrétní chyby, použijte podmíněné zarážky ve VS Code tak, že kliknete pravým tlačítkem myši na zarážku a přidáte podmínku, jako je .

Viz také