HTTP API のテスト(.lnh)

ファイル → 新規 → 新しい API テストは、.lnh ファイルに保存される HTTP クライアントを開きます。1 つのファイルが 1 つのエンドポイント(メソッド・URL・ヘッダー・ ボディ)を表し、左の一覧に複数のテストを保持します。各テストは、URL・ヘッダー・ボディで 使う {name} 変数の値に加え、最後の実行結果(ステータス・時間・日付・レスポンス ヘッダーとボディ)を持ちます。同等の curl コマンドも表示します。同じ単発操作は CLI(http)と MCP(http_request)でも利用できます。テスターは curl を使います。curl は Windows 10 と 11 に標準で含まれています。見つからない場合は、送信の前に LightNote がインストールガイドを開きます。

送信とレスポンスの確認

Ctrl+Enter でリクエストを送信します。レスポンスが返るまでは同じボタンが 停止(または Esc)に変わり、待ち時間を秒で表示します。レスポンスのバッジには ステータスと時間が、その横には種類・サイズ・テストの実行日時が表示されます。curl の行は入力に合わせて更新され、選択中のテストの変数も置換済みです。横のボタンでコマンドを コピーでき、その矢印から PowerShell・Python・JavaScript・C#・HTTPie でも同じものを コピーできます。curl コマンドを URL にそのまま貼り付けると、テストを消さずに メソッド・ヘッダー・本文を取り込みます。

テストに値がない変数はリクエストにそのまま送信されます(URL に {id} が残り、サーバーは理由の分からないエラーを返します)。変数タブがその変数を強調し、 名前を示します。一覧の各テストの横にある点は前回のステータスの色で、空の輪はまだ実行して いないテストです。レスポンスでは、本文の上のバーで JSON/XML を画面上だけ整形し、行を 折り返し、本文をコピーし、届いたままの内容をファイルに保存できます。

リクエストを組み立てる。 パラメーター タブは URL のクエリを一覧で表示します。行を編集すると URL が変わり、URL を編集すると一覧が変わります。認証 タブはヘッダーを自動で組み立てます — Basic、Bearer、API キー (ヘッダーまたは URL)。どの欄にも {variable} を使えるので、シークレットはファイルではなく環境に置けます。ヘッダー タブに同じヘッダーがあれば、そちらが優先されます。本文 では 種類 で JSON、XML、SOAP、フォーム、multipart (テキスト欄とファイル)、バイナリで送る ファイル を選べ、Content-Type を書いていなければ自動で付きます。ファイルの相対パスは .lnh のフォルダーが基準です。multipart やファイルのときは、PowerShell と JavaScript はその本文を送れないため、コピー ボタンの矢印で灰色になります。オプション タブではタイムアウト (既定は 60 s) を変え、リダイレクトをたどらせることができます。たどらない場合は 3xx そのものが表示されます。以前のバージョンの LightNote で開くと、認証と種類なしで送信され、別のリクエストになることはありません。独自の証明書を持つローカル サーバーには、証明書を検証しない (HTTPS) で検証を切れます。オンの間はレスポンスの行に 証明書は検証されていません と表示され、lnote http-run のレポートにも記されます。

レスポンスを読む。 本文は読み取り専用のコード エディターで開き、レスポンスの種類に応じた強調表示、折りたたみ、ウィンドウの検索 (Ctrl+F) が使えます。Cookie タブはサーバーが保存を求めたものを、タイムライン は実際に送られたリクエスト (curl が自分で付けたヘッダーを含む) とレスポンスの生のヘッダーを表示します。タイムラインはメモリーにだけ残ります。Authorization を含み、ファイルは Git に入るためです。

検証

検証タブは、テストが合格したかどうかを示します。各行はレスポンスの 一部(ステータス、ヘッダー、本文全体、JSONPath($.user.id、 $.items[0].name、$.items.length())、XPath (//Price、count(//Item))、またはミリ秒単位の時間)を期待値と 比較します。比較方法は、等しい、異なる、より大きい、より小さい、含む、正規表現に一致、存在 する、型が一致、です。XPath では名前のプレフィックスは無視されるため、 soap:Envelope と Envelope は同じステップです。検証がある場合は 検証が結果を決めます。期待どおりの 404 は合格し、フィールドが違う 200 は不合格です。各検証の 結果は最後の列に、要約はレスポンスのバッジの横に表示され、一覧のテストの点は緑または赤に なります。行のチェックを外すと、ファイルには残りますが結果には数えられません。

一覧の上部にある再生ボタンは、ファイル内のすべてのテストを 1 つずつ実行し、 合格した数を示します。テストを 2 回実行すると、レスポンス本文の上にある比較ボタンで前回と 今回の実行を並べて表示できます。本文は両側とも整形されます。保存されるのは前回の実行だけです。 ファイルは Git に入るため、長い履歴はすべての差分を埋めてしまいます。

環境・キャプチャ・フォルダー全体

環境には JetBrains と VS Code のオープンな形式を使います。フォルダー(または その上位)の http-client.env.json に環境ごとのオブジェクトを書き ({"dev": {"host": "http://localhost:8080"}})、その隣の http-client.private.env.json に Git に入れない秘密の値を書きます。同じ環境 では private のほうが優先され、$shared はすべての環境に適用されます。URL の 横のセレクターで環境を選び、インポート/エクスポートのメニューからファイルを作成できます。 変数はテスト、キャプチャ、環境の順に解決され、変数タブにそれぞれの出どころが表示 されます。

キャプチャタブは、レスポンスの一部(ログインの token、作成したばかりの リソースの id など)を変数として保持し、このファイルと同じフォルダーの他の ファイルの後続テストで使えるようにします。こうしてログイン用の .lnh が別の ファイルの認証付き呼び出しに値を渡します。キャプチャした値はメモリーにだけ保持され、ファイルには 書き込まれません。

フォルダーがコレクションです。lnote http-run --path <フォルダー> --env dev はその中のすべての .lnh を自然順(01-login が 02-profile より先)で実行し、失敗したテストがあるとエラーで終了するため、CI に 使えます。同じ実行は MCP の http_test_run としても使え、AI エージェントがあなたの 書いたテストを実行できます。既定ではファイルは変更されません。--save を付けると 各テストの最後の結果がファイルに書き込まれます。

インポートとエクスポート

OpenAPI のインポートとエクスポート。 テスト一覧の上部にある矢印ボタンから OpenAPI をインポート… と OpenAPI をエクスポート… を開けます。インポートは YAML または JSON の仕様を読み込み、現在使われている 3 世代 — Swagger 2.0、 OpenAPI 3.0、3.1 — に対応して、テストを自動的に組み立てます。パスの {parameters} は .lnh の {name} 変数と同じ記法なので そのまま使え、仕様に宣言された例はテストの値になり、セキュリティスキームは Authorization ヘッダーになり、宣言された各サーバーはそれぞれ 1 つのテストになります (検証環境と本番環境を並べて持てます)。.lnh は 1 つのエンドポイントを保持する ため、操作が複数ある仕様ではどれをインポートするか尋ねます。すべてを一度に保存して、 操作ごとに .lnh ファイルを 1 つずつ作ることもできます。

エクスポートはその逆で、ファイルから OpenAPI 3.0.3 の仕様を生成します。サーバー、パラメーター、 本文はテンプレートから、応答の例は記録された実行から作られます。これは骨組みであって完全な 契約ではありません。.lnh は呼び出しを記述するものなので、型・説明・スキーマは復元 されません。テストは x-lightnote-tests フィールドに一緒に入るため、ファイルを 再インポートすればそのまま戻ります。

curl コマンドのインポート。 同じボタンの curl コマンドをインポート… で貼り付け用のボックスが開きます。コマンドはディスクではなくそこから来るもので、クリップボードに curl がある場合は最初から入力されています。同じコマンドが流通する 3 つの方言に対応 します。Chrome/Firefox のcURL としてコピー(単一引用符)、Windows の Copy as cURL (cmd)(^ を使う形式)、そして \ で折り返されたドキュメントの例です。 メソッドは -X から取り、指定がなければ本文があれば POST、なければ GET と判断します。

インポートはそのまま行われます。どの値も自動では {name} 変数になりません。 どのトークンが秘密情報かを推測すると間違えるからです。いくつかの場合は偽らずに警告します。ファイル から読む本文(-d @ファイル)は読み取れず、マルチパート送信(-F)も忠実 には再現できないため、項目は調整できるようテキストとして本文に入ります。

他のツールからインポート。 他のツールからインポート… は、.http/.rest ファイル (VS Code の REST Client、JetBrains、Visual Studio)、Postman のコレクションまたは環境、Insomnia のエクスポート (JSON の v4 または YAML の v5)、ブラウザーが すべてを HAR として保存 で書き出す HAR、Bruno の .bru (Bruno のフォルダーをインポート… でフォルダーごと)、SOAP サービスの WSDL を読み込みます。形式は拡張子ではなく内容から判別します。リクエストはそれぞれ .lnh になり、コレクションのフォルダーはそのままフォルダーになります。このファイルに使うものを 1 つ選ぶか、すべてを一度に保存してください。{{name}} は {name} に、認証はヘッダーになり、環境は http-client.env.json に書き込まれます (元のツールで秘密とされた値は .private へ)。既存の値は変更しません。Bruno の検証とキャプチャ、そして Postman の pm.response.to.have.status は、ここでの検証とキャプチャになります。HAR からは API 呼び出しとページだけを取り込み、ブラウザーが受け取った応答を最後の実行として残します。WSDL からは操作ごとに SOAP エンベロープを作り、SOAPAction と各フィールドを変数にします。

対応するものがない部分はそのまま残し、そのことを知らせます。リクエスト前後のスクリプトは変換せず、動的変数 ({{$guid}}) や連鎖はそのまま、変数入りの Basic、multipart の本文、ファイルの本文は 認証 タブと本文の 種類 に入ります。ほかのマシンから来たファイルのパスは確認できるよう一覧に出ます。コレクションを保存すると、この報告は保存先フォルダーのノートになります。.http としてエクスポート… は選択中のテストで逆の変換を行います。テンプレートは {{name}}、値は @name = 値 になります。

目次

編集

ツール

自動化(AI / スクリプト)

リファレンス