VillageSQL is a drop-in replacement for MySQL with extensions.
All examples on this page work on VillageSQL. Install Now →
vsql_http 拡張機能は、http_get()、http_post()、およびすべての HTTP メソッドを SQL に直接追加するため、データがある場所から外部 API を呼び出せます。
問題: API 呼び出しのたびにデータベースを離れる
VillageSQL を使わない典型的なパターンです。VillageSQL の場合: SQL からの HTTP
http_get(url) は GET リクエストを送り、レスポンス全体を含む JSON 文字列を返します。
vsql_http のすべての関数は同じ形の JSON を返します。
文字セットの変換
VillageSQL 0.0.6 以前では、VEF の STRING 関数はバイナリ文字セットを返します。結果をJSON_VALUE や JSON_EXTRACT に渡す前に、CONVERT(... USING utf8mb4) で包んでください。
CONVERT はもう必要ありません。しかし残しておいても害はなく、以下のすべての例は 0.0.6 以前との互換性のために引き続き CONVERT を使っています。キャストの繰り返しを避けるには、CONVERT を付けて一度変数に代入し、その変数を再利用してください。
POST リクエスト
http_post(url, content_type, body) は本文付きの POST を送ります。
カスタムヘッダーとその他のメソッド
http_request(method, url, headers_json, body, content_type, options_json) は、カスタムヘッダー付きの任意のメソッドを扱います。
headers_json 引数は、キーがヘッダー名で値がヘッダー値の JSON オブジェクトです。
利用できるすべての関数
すべての関数は NULL の入力に対して NULL を返します。接続の失敗(接続拒否、DNS の失敗、
タイムアウト)の場合も、HTTP 関数は NULL を返し、curl のエラーメッセージを含む
警告を出します。リクエストが消えたように見えるときは、
SHOW WARNINGS で
確認してください。
URL エンコード
url_encode() と url_decode() は、クエリパラメータのパーセントエンコードを扱います。
既知の制限
256KB のレスポンス上限 — 256KB を超えるレスポンスは切り詰められます。これは SQL クエリで使われる典型的な API ペイロードを十分に扱えますが、大きなファイルのダウンロードには適していません。この上限で切られたレスポンスは有効な JSON ではなくなります。JSON_EXTRACT/JSON_UNQUOTE はそれに対して ERROR 3141 を発生させますが、JSON_VALUE はデフォルトの NULL ON ERROR 動作のもとで、エラーではなく Warning 3141 とともに NULL を返します。
JSON_VALUE のサイズ制限 — 抽出した値が MySQL の内部サイズ制限を超えると、JSON_VALUE は NULL を返します。大きなレスポンス本文には、代わりに JSON_UNQUOTE(JSON_EXTRACT(...)) を使ってください。
max_execution_time は、ブロックしている vsql_http の呼び出しを制限も中断もしません。遅い、または到達できないエンドポイントは、それ自身の接続/読み取りタイムアウトの間、ステートメントを保持し続けます。http_get/http_post/http_put/http_delete/http_patch はオプションを受け取りません。http_request(method, url, headers_json, body, content_type, options_json) だけが、options_json 引数の中で秒単位の {"timeout": N} としてタイムアウトを受け取ります(デフォルトは 30)。短くする必要があるときは、省略形の関数の代わりに http_request を使ってください(HTTP Webhookを参照)。
トラブルシューティング
次のステップ
- API データで行を拡充する — 外部のライブデータをクエリ結果に取り込む
- トリガーから Webhook を送信する — 行の変更を外部サービスに自動でプッシュする
関連項目
- 外部 API データで行を拡充する — HTTP ベースのデータ拡充の実践的なパターン
- トリガーからの Webhook の送信 — トリガーからのイベント駆動の HTTP 呼び出し
- MySQL の JSON — HTTP リクエストが返す JSON レスポンスの解析
- テーブルを REST API として公開する — リクエストを送る代わりに HTTP に応答する同じサーバー