VillageSQL is a drop-in replacement for MySQL with extensions.
All examples on this page work on VillageSQL. Install Now →
vsql_http 拡張機能を使うと、そのデータをクエリから直接取り込んだり、1 回の UPDATE で列に保存したりできます。
セットアップ
パターン 1: 拡充データを列に保存する
最もよくある使い方は、外部 API から取得したデータで列をバックフィルすることです。行ごとに API を呼び出す UPDATE を実行し、結果を保存してから、保存した列をクエリします。 この例は、各注文の配送状況を取得します。shipping_status IS NULL の行がなくなるまで、アプリケーションからこれをループで実行します。API のレート制限内に収まるよう、バッチで処理してください。
バックフィル後、クエリは保存された列を参照し、クエリごとの API 呼び出しはありません。
パターン 2: クエリ内でのライブ検索
為替レートやリアルタイム価格のように、変化が速すぎてキャッシュできないデータには、SELECT の中で API をインラインに呼び出せます。結果のすべての行がリクエストを発生させるため、結果セットは小さく保ってください。http_get() を呼び出さないでください。
パターン 3: 条件付きの拡充
API を呼び出す前に WHERE でフィルタリングし、本当に必要な行に対してだけ取得します。url_encode() で包んでいる点に注意してください。ユーザーデータを URL に埋め込む前には、必ずエンコードします。
API エラーの処理
すべてのvsql_http 関数は、接続失敗時に NULL を返し、curl のエラーメッセージを含む警告を出します。内容を使う前にステータスコードを確認してください。
パフォーマンスに関する考慮事項
各 HTTP 呼び出しは同期的で、クエリをブロックします。 それぞれ 200ms の API にアクセスする 50 行のバッチは、最低でも 10 秒かかります。max_execution_time は SELECT ステートメントだけを制限し、ここでは効果がありません。この UPDATE の実行時間に上限を設けるには、事前に SELECT CONNECTION_ID() で接続 ID を取得しておき、長く走りすぎた場合に別のセッションから KILL QUERY <id> を実行します。
トラブルシューティング
次のステップ
- SQL から HTTP リクエストを送る — 完全な関数リファレンスとレスポンスの解析
- トリガーから Webhook を送る — データを取り込むのではなく、変更を外へ送り出す
関連項目
- SQL から HTTP リクエストを送る — API 呼び出しに使う HTTP 関数
- MySQL の JSON — API が返す JSON レスポンスの解析
- テーブルを REST API として公開する — 自分のテーブルを HTTP 経由で公開する