概要
目標: 開発プロキシが API エラーをシミュレートしている間にアプリケーションをデバッグする
時間: 15 分
Plugins:GenericRandomErrorPlugin
前提条件:開発プロキシ、VS Code を設定する
API を呼び出すアプリケーションをビルドするときは、コードでエラーが正しく処理されるようにする必要があります。 開発プロキシと Visual Studio (VS) コードのデバッガーを組み合わせることで、API エラーをシミュレートし、エラー処理コードをステップ実行して正しく動作することを確認できます。
概要
開発プロキシを使用したデバッグには、次の 3 つの手順が含まれます。
- 開発プロキシ経由で HTTP 要求をルーティングするように VS Code を構成する
- 特定のエラーをシミュレートするように開発プロキシを構成する
- エラー処理コードとデバッグでブレークポイントを設定する
開発プロキシを使用したデバッグ用に VS Code を構成する
VS Code の構成方法は、使用するプログラミング言語によって異なります。 次のセクションでは、Node.js、.NET、および Python アプリケーション用に VS Code を構成する方法について説明します。
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"
}
}
]
}
Important
設定では、TLS/SSL 証明書の検証が無効になります。 開発中にのみ、この設定を使用します。 より安全なアプローチとして、Dev Proxy の証明書を直接信頼する方法を使用します。
macOS/Linux:
"NODE_EXTRA_CA_CERTS": "${env:HOME}/.devproxy/rootCert.pem"
Windows:
"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"
}
}
]
}
ヒント
Windowsと 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": ""
}
}
]
}
Important
を空の文字列に設定すると、tls/SSL 証明書の検証をスキップするように ライブラリに指示されます。 開発中にのみ、この設定を使用します。
より安全なアプローチを取るために、開発プロキシ証明書を参照してください。
macOS/Linux:
"REQUESTS_CA_BUNDLE": "${env:HOME}/.devproxy/rootCert.pem"
Windows:
"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 Proxy は、インターセプトされた要求ごとに 1 つをランダムに選択します。
エラー処理コードをデバッグする
VS Code と開発プロキシが構成されたので、エラー処理コードをデバッグできるようになりました。
手順 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 でデバッグを開始する
- VS Code を開く
- F5 キーを押すか、[実行] [デバッグの開始] を選択します
- アプリケーションが API 呼び出しを行うと、Dev Proxy によって API 呼び出しがインターセプトされ、エラーが返されます
- VS Code がブレークポイントで一時停止する
- デバッグ コントロールを使用してコードをステップ実行し、変数を検査する
手順 4: エラーを調べる
VS Code がブレークポイントで一時停止したら、デバッグ パネルを使用して次の操作を行います。
- エラー応答の状態コードとメッセージを表示する
- ローカル変数の値を確認する
- 再試行ロジックをステップ実行する
- エラー メッセージがわかりやすいことを確認する
開発プロキシを自動的に開始および停止する
デバッグ ワークフローを効率化するには、デバッグを開始するときに開発プロキシを自動的に起動し、完了したら停止するように VS Code を構成します。 Dev Proxy Toolkit 拡張機能をインストールし、タスクを構成します。
ファイル: .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"
}
}
]
}
効果的なデバッグに関するヒント
- ブレークポイントに一貫してヒットするには、すべての要求が失敗するように、開発プロキシ構成で特定の設定を行います。
- コードが特定のエラーを処理する方法を理解するには、デバッグ時に 1 つのエラー応答を使用します。
- コードがスロットリングに対応していることを確認するには、429 エラーをデバッグする際、ヘッダーを読み取り、従っていることを確認します。
- コードで異常な応答が適切に処理されるようにするには、Dev Proxy を使用して、形式が正しくない JSON やヘッダーが見つからないなどのエッジ ケースをシミュレートします。
- 特定のエラーでのみ中断するには、ブレークポイントを右クリックし、 などの条件を追加することで、VS Code で条件付きブレークポイントを使用します。
こちらも参照ください
- VISUAL STUDIO CODE デバッグ構成で開発プロキシを使用する - VS Code で開発プロキシを自動起動する
- ランダム エラーでアプリをテスト する - ランダムな API エラーをシミュレートする
- 要求の失敗率を変更 する - エラーが発生する頻度を調整する
- Node.js アプリケーションで開発プロキシを使用する - Node.js プロキシ構成
- .NET アプリケーションで開発プロキシを使用する - .NET プロキシの構成
Dev Proxy