# HTTPリクエスト (/ja/docs/requests)

リクエストとは、APIに対する保存された1つの呼び出しです。メソッド、URL、ヘッダー、ボディ、認証、設定が、ワークスペース内の1つのファイルとして保存されます。
このページでは、HTTPリクエストを最初から最後まで説明します。ほかの種類のリクエスト（GraphQL、gRPC、WebSocketとSSE、Socket.IO、MQTT、MCP呼び出し）も同じページを使いますが、タブが異なります。
最後の[リクエストの種類](#request-kinds)を参照してください。

## リクエストを作成する [#create-a-request]

- **ファイル › 新規リクエスト**（<kbd>⌘</kbd><kbd>N</kbd>）を選びます。リクエストは、サイドバーで選択しているフォルダに**新規リクエスト**という名前で追加され、タブで開きます。
- または、サイドバーの<strong>リクエスト</strong>の横にある<strong>+</strong>メニューをクリックして、<strong>新規リクエスト</strong>を選びます。同じメニューで、ほかの種類のリクエストやフォルダを作成したり、ファイルを読み込んだりできます。
- または、サイドバーでフォルダを右クリックして**新規リクエスト**を選ぶと、そのフォルダに直接作成されます。
- cURLコマンドから始めるには、リクエストを作成して、コマンドをURL欄にペーストします。Echolotは、コマンドからメソッド、URL、ヘッダー、ボディ、認証、設定を入力します。
  取り込めないオプションは、URLバーの下に**cURLの注記**として表示されます。クリックすると、除外された内容が分かります。

リクエストの名前を変更するには、**編集 › 名前を変更**を選ぶか、サイドバーでリクエストを右クリックします。**編集 › 複製**（<kbd>⌘</kbd><kbd>D</kbd>）は、隣にコピーを作ります。

## リクエストページ [#the-request-page]

<Shot id="requests-http-page" alt="List productsのリクエストページ。上にURLバー、左にリクエストのタブ、右にJSONレスポンスが表示されている" />

上から順に：

1. **URLバー**：メソッド、URL、**送信**。
2. **その下の行**：送信されるとおりのURL。現在の環境ですべての変数が埋められています（シークレットはマスクされたまま）。
   送信後は、右側にステータス、やり取りのタイムライン、時間が表示されます。
3. **2つのペイン**：一方にリクエストのタブ、もう一方にレスポンスが表示されます。

リクエストのタブは、**ドキュメント**、**ヘッダー**、**パラメータ**、**ボディ**、**認証**、**変数**、**テスト**、**スクリプト**、**設定**です。
内容があるタブにはドットまたは件数が表示されるので、リクエストにヘッダーが3つある、ボディがある、といったことが一目で分かります。

ペインは左右に並べることも、上下に並べることもできます。**表示 › ペイン**で**左右に並べる**と**上下に並べる**を切り替えます。選択はリクエストの種類ごとに保持されます。
区切りをドラッグするとペインのサイズを変更でき、**表示 › ペイン › ペインのサイズをリセット**でデフォルトのサイズに戻ります。
2つのペインを左右に並べるには狭すぎるウインドウでは、自動的に上下に並びます。

## メソッドとURL [#method-and-url]

メソッドのバッジをクリックして、**GET**、**POST**、**PUT**、**PATCH**、**DELETE**、**HEAD**、**OPTIONS**から選びます。

隣の欄にURLを入力します。`{{baseURL}}/products`のように、どこでも`{{variables}}`が使えます。`{{`と入力すると、スコープ内の変数と[動的な値](/docs/requests/dynamic-values)のリストが開きます。
変数はピルとして表示されます。ポインタを合わせると値が分かり、ダブルクリックすると変更できます。
変数は、[環境、ワークスペース、フォルダ](/docs/workspaces/environments)から取得されます。

URLの中に解決できないものがあると、URLバーの下の行に**1件の問題**（または問題の件数）と表示されます。クリックすると、どの変数が足りないか分かります。解決されないトークンは、書いたままで送信されます。

リクエストがほかのリクエストのレスポンスを読み取る場合（たとえば`{{$response('auth/sign-in', '$.access_token')}}`）、そのリクエストにまだレスポンスがないと、
行に**先に「Sign in」を送信**と表示されます。Echolotは、そのリクエストを先に送信してから、このリクエストを送信します。

## クエリパラメータ [#query-parameters]

**パラメータ**タブは、URLのクエリを**キー**と**値**の行として表示します。両者は連動しています。行を編集するとURLが変わり、URLに`?page=2`と入力すると行が現れます。

- **パラメータを追加**をクリックして追加します。
- 行のチェックを外すと、その行は送信されません。チェックを外したパラメータはリクエストに残りますが、URLからは外れます。
- 名前や値に入力した`&`、`#`、スペースは、自動的にパーセントエンコードされます。

## ヘッダー [#headers]

**ヘッダー**タブは、設定したヘッダーを、設定した順に、名前の大文字小文字を書いたままに保って一覧します。

- **ヘッダーを追加**をクリックして名前を入力します。Echolotはヘッダー名を、それぞれの用途の説明付きで補完し、1つ選ぶと、よく使われる値も提案します。
- ヘッダーのチェックを外すと、送信せずに残しておけます。
- 行をハンドルでドラッグして並べ替えるか、右クリックして**上へ移動**、**下へ移動**、**削除**を選びます。
- **一括編集**をクリックすると、すべてのヘッダーをテキストとして編集できます。1行に1つの`Name: value`で、`//`で始まる行は、オフにしたヘッダーです。

自分のヘッダーの下の**自動生成**には、送信時にEcholotが追加するものが一覧されます。認証、ボディの種類、Cookieジャーが生成するヘッダーと、すべてのHTTPリクエストに必要なヘッダーです。
資格情報をマスクした、実際に送信されるとおりの形で表示されます。ポインタを合わせると、その出どころが分かります。代わりに自分の値を送るには、同じ名前のヘッダーを追加するか、
行を右クリックして**独自の値に置き換える**を選びます。自分で書いた`Authorization`ヘッダーは、**認証**タブが追加するものの代わりに送信されます。

Echolot独自のヘッダーを追加させないようにするには、[設定タブ](/docs/requests/settings#raw-mode)で**生データモード**をオンにします。

## ボディ、認証、設定 [#body-auth-and-settings]

- **ボディ**：JSON、URLエンコードやマルチパートのフォーム、GraphQL、テキスト、XML、HTML、ファイル。[リクエストボディ](/docs/requests/body)を参照してください。
- **認証**：Basic、Bearer、APIキー、OAuth 2.0、AWS署名など、またはフォルダの認証。[認証](/docs/requests/auth)を参照してください。
- **設定**：HTTPバージョン、リダイレクト、Cookie、TLS、タイムアウト、生データモード。[リクエスト設定](/docs/requests/settings)を参照してください。
- **変数**：このリクエストだけが使う値と、レスポンスから保持する値。[レスポンスのキャプチャ](/docs/requests/captures)を参照してください。
- **テスト**と**スクリプト**：レスポンスに対するチェックと、送信の前後に実行するJavaScript。[スクリプトとテスト](/docs/requests/scripts-and-tests)を参照してください。
- **ドキュメント**：リクエストの用途についてのメモ。自分とチームのためのものです。

## 送信とキャンセル [#send-and-cancel]

**送信**をクリックするか、<kbd>⌘</kbd><kbd>R</kbd>を押します。URL欄での<kbd>↩</kbd>と<kbd>⌘</kbd><kbd>↩</kbd>でも送信されます。
**リクエスト › 送信**は、メニューバーから同じことを行います。

リクエストの実行中は、**送信**が**キャンセル**に変わります。クリックするか<kbd>⌘</kbd><kbd>.</kbd>を押すと停止します。
レスポンスは届くそばからレスポンスペインにストリーミングされるので、大きなボディでも、最後まで届く前に最初の部分を読めます。

ウインドウの環境が保護されていると、ボタンには環境名付きで<strong>Productionに送信…</strong>と表示され、送信のたびに先に確認されます。
[保護された環境](/docs/workspaces/protected-environments)を参照してください。

現在のリクエストに対するそのほかの操作は、**リクエスト**メニューにあります：

| メニュー項目 | ショートカット | 動作 |
| --- | --- | --- |
| **cURLとしてコピー** | <kbd>⌥</kbd><kbd>⌘</kbd><kbd>C</kbd> | リクエストを`curl`コマンドとしてコピーします。 |
| **コードを生成…** | <kbd>⌥</kbd><kbd>⌘</kbd><kbd>G</kbd> | リクエストをコードとして表示します：cURL、Swift（URLSession）、JavaScript（fetch、axios）、TypeScript（fetch）、Python（requests、httpx）、Go（net/http）、Kotlin（OkHttp）、Java（HttpClient）、C#（HttpClient）、PHP（cURL）、Rust（reqwest）。 |
| **やり取りをHARとして書き出す…** | | 最新のやり取りをHARファイルとして保存します。 |
| **ボディ内を検索** | <kbd>⌘</kbd><kbd>F</kbd> | レスポンスのボディを検索します。 |

**コードを生成…**は、リクエストの変数を埋めます。スクリプトは実行されず、シークレットはそのまま表示されるので、コードをペーストする場所に注意してください。
そのシートの**テンプレートフォルダを開く**は、コードの元になるテンプレートを表示します。

## タブ [#tabs]

開いたリクエストごとに、エディタの上にタブが作られます。

| 操作 | 方法 |
| --- | --- |
| 次のタブ | **タブ › 次のタブを表示**、<kbd>⇧</kbd><kbd>⌘</kbd><kbd>]</kbd> |
| 前のタブ | **タブ › 前のタブを表示**、<kbd>⇧</kbd><kbd>⌘</kbd><kbd>[</kbd> |
| タブを閉じる | **ファイル › タブを閉じる**、<kbd>⌘</kbd><kbd>W</kbd> |
| 最後に閉じたタブを再度開く | **タブ › 閉じたタブを再度開く**、<kbd>⇧</kbd><kbd>⌘</kbd><kbd>T</kbd> |

## 保存 [#saving]

保存コマンドはありません。編集はすべて、行った少し後にリクエストのファイルへ自動的に保存され、**編集 › 取り消す**（<kbd>⌘</kbd><kbd>Z</kbd>）ですべて取り消せます。
タブを閉じるときや終了するときは、最後の編集が書き込まれるまで待機します。

Echolotがまだ書き込んでいない編集があるうちに、ファイルがディスク上で変更された場合（たとえば`git pull`の後）、バーに**このリクエストはディスク上で変更されました**と表示されます。
**自分の変更を保持**を選ぶと、編集内容を保持してファイルに上書きし、**ファイルの内容を使用**を選ぶと、編集内容を破棄してファイルを読み込みます。
[Gitとチーム](/docs/workspaces/git-and-teams)を参照してください。

## レスポンスの概要 [#the-response-at-a-glance]

<Shot id="requests-http-exchange-card" alt="レスポンスの上に表示された詳細カード。ステータス200、時間、サイズ、TLSバージョン、やり取りの各フェーズを示すバー" />

送信後、URLバーの下の行には、ステータス（2xxは緑など）、やり取りの各フェーズを示すバー、合計時間が表示されます。この行にポインタを合わせると、
サイズ、圧縮、リダイレクト、チェック、TLS、サーバのアドレス、各フェーズにかかった時間といった詳細が表示されます。

レスポンスペインには、さまざまな表示のボディ、ヘッダー、Cookie、生のメッセージ、16進表示、通信上のバイトがあります。行の末尾にある、件数付きの時計ボタンを押すと、
このリクエストの以前のレスポンスが開きます。[レスポンス](/docs/requests/responses)を参照してください。

最初の送信の前は、レスポンスペインに**Pingを送信**と表示されます。

## リクエストの種類 [#request-kinds]

同じリクエストページで、Echolotが対応するすべてのプロトコルを送信できます。<strong>ファイル</strong>メニューか、サイドバーの<strong>+</strong>メニューから作成します。

| 種類 | メニュー項目 | ページ |
| --- | --- | --- |
| HTTP | **新規リクエスト** | このページ |
| GraphQL | **新規GraphQLリクエスト** | [GraphQL](/docs/requests/graphql) |
| gRPC | **新規gRPCリクエスト** | [gRPC](/docs/requests/grpc) |
| WebSocket | **新規WebSocketリクエスト** | [WebSocketとSSE](/docs/requests/websocket-and-sse) |
| Server-Sent Events | **新規リクエスト**（サーバがイベントをストリーミングするHTTPリクエスト） | [WebSocketとSSE](/docs/requests/websocket-and-sse) |
| Socket.IO | **新規Socket.IOリクエスト** | [Socket.IO](/docs/requests/socket-io) |
| MQTT | **新規MQTTリクエスト** | [MQTT](/docs/requests/mqtt) |
| MCP | <strong>新規MCP呼び出し</strong>（サイドバーの<strong>+</strong>メニュー） | [MCPリクエスト](/docs/requests/mcp-requests) |

チェックやデータファイルを使って多くのリクエストを続けて送信するには、[ランナー](/docs/requests/runner)を使います。
