> ## Documentation Index
> Fetch the complete documentation index at: https://villagesql.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# MySQL 用 vsql_http 拡張機能

> vsql_http 拡張機能は、MySQL クエリの中から GET、POST、PUT、PATCH、および DELETE リクエストを送信し、各レスポンスを JSON として返します。

`vsql_http` はクエリの中から HTTP リクエストを送信します。トリガーが Webhook を呼び出し、`SELECT` が API から行を補強し、スケジュールされたイベントがサマリーをどこかへ送信できます。間にアプリケーション層はありません。libcurl 上に構築されており、すべてのレスポンスを JSON として返します。

| | |
| - | - |
| **メンテナー** | VillageSQL |
| **ソースと完全なドキュメント** | [villagesql/vsql-http](https://github.com/villagesql/vsql-http) |
| **ライセンス** | GPL-2.0 |

## インストール

インストールスクリプト、Docker イメージ、またはリリース tarball で VillageSQL をインストールした場合、`vsql_http.veb` はすでにサーバーの `lib/veb/` ディレクトリにあります。1 つのステートメントでサーバーにインストールします。

```sql theme={null}
INSTALL EXTENSION vsql_http;
```

インストールされたことを確認します。

```sql theme={null}
SELECT EXTENSION_NAME
FROM INFORMATION_SCHEMA.EXTENSIONS
WHERE EXTENSION_NAME = 'vsql_http';
```

```
+----------------+
| EXTENSION_NAME |
+----------------+
| vsql_http      |
+----------------+
```

自分でビルドするには、[リポジトリ](https://github.com/villagesql/vsql-http)のビルド手順に従ってください。

## 追加される機能

すべてのリクエスト関数は、`status`、`content_type`、`headers`、および `content` の 4 つのフィールドを持つ 1 つの JSON オブジェクトを返します。接続拒否やタイムアウトなど、完了できないリクエストは `NULL` を返し、curl のエラーメッセージを含む警告を発生させます。

```
Warning 3200 VDF error in function 'http_get': Couldn't connect to server
```

| 関数 | 戻り値 | 説明 |
| - | - | - |
| `http_get(url)` | text | GET リクエスト。レスポンスを JSON で返す |
| `http_post(url, content_type, body)` | text | ボディ付きの POST リクエスト |
| `http_put(url, content_type, body)` | text | ボディ付きの PUT リクエスト |
| `http_patch(url, content_type, body)` | text | ボディ付きの PATCH リクエスト |
| `http_delete(url)` | text | DELETE リクエスト |
| `http_request(method, url, headers, body, content_type, options)` | text | 任意のメソッド。独自のヘッダーとオプションを JSON で指定する |
| `url_encode(s)` | text | URL で使うために文字列をパーセントエンコードする |
| `url_decode(s)` | text | `url_encode` を元に戻す |

`http_request` の `method` 引数は、GET、HEAD、POST、PUT、DELETE、CONNECT、OPTIONS、TRACE、および PATCH に大文字と小文字を区別せずに一致し、それらを大文字で送信します。その他のメソッドは、指定されたとおりに送信されます。

## 例

URL を取得し、レスポンスから 2 つのフィールドを読み取ります。

```sql theme={null}
SET @r = CONVERT(http_get('https://villagesql.com/robots.txt') USING utf8mb4);

SELECT JSON_EXTRACT(@r, '$.status') AS status,
       JSON_UNQUOTE(JSON_EXTRACT(@r, '$.content_type')) AS content_type;
```

```
+--------+---------------------------+
| status | content_type              |
+--------+---------------------------+
| 200    | text/plain; charset=utf-8 |
+--------+---------------------------+
```

クエリ文字列を安全に組み立てます。

```sql theme={null}
SELECT url_encode('hello world & more') AS encoded;
```

```
+----------------------------+
| encoded                    |
+----------------------------+
| hello%20world%20%26%20more |
+----------------------------+
```

> [!NOTE]
>
> VillageSQL 0.0.6 以前では、レスポンスは binary 文字セットを持ちます。JSON 関数や `JSON` カラムはそれを拒否するため、上記の例から `CONVERT` を外すと、そこでは `ERROR 3144 (22032): Cannot create a JSON value from a string with CHARACTER
>     SET 'binary'.` で失敗します。`JSON_OBJECT()` や `JSON_ARRAY()` の中では受け入れられますが、代わりに base64 でエンコードされます。これらのバージョンでは `CONVERT(... USING utf8mb4)` を残してください。0.0.7 以降では不要ですが、あっても害はありません。

> [!WARNING]
>
> リクエストは、それを送信したステートメントをデフォルトで最大 30 秒間ブロックします。これを短くできるのは `http_request` だけで、`'{"timeout": 5}'` のようにオプション引数で指定します。行ごとに 1 回の呼び出しは、テーブルスキャンを一連のネットワーク往復に変えてしまうため、大きな結果セットに対してこれらの呼び出しを行わないでください。

## 関連項目

* [MySQL からの HTTP リクエスト](https://villagesql.com/docs/en/guides/http-requests-in-mysql.md) — タイムアウト、エラー処理、およびレスポンスの読み取り
* [MySQL からの Webhook 送信](https://villagesql.com/docs/en/guides/http-webhooks.md) — トリガーからリクエストを発行する
* [REST API による行の補強](https://villagesql.com/docs/en/guides/rest-api-enrichment.md) — クエリを外部サービスと結合する
* [拡張機能のインストール](https://villagesql.com/docs/ja/extensions/install.md) — `INSTALL EXTENSION` の仕組みと、サーバーがバンドルを探す場所
* [利用可能な拡張機能](https://villagesql.com/docs/ja/extensions/catalog) — 完全なカタログ
* [villagesql/vsql-http](https://github.com/villagesql/vsql-http) — ソース、ビルド手順、および既知の制限事項


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.