外部 API と連携する
このユースケースでできること
Section titled “このユースケースでできること”HTTPタイプのCraft Functionsをエンドポイントとして公開し、リクエストをきっかけに外部REST APIを呼び出して取得データをレスポンスとして返せます。APIキーは Craft Secret Manager で管理し、クライアント側に露出しません。
- Craft Sites や Web アプリのバックエンド
- ブラウザから直接外部APIを呼べない(APIキーを隠したい)とき、Functionを経由してデータを取得する
- オンデマンドなデータ取得
- ユーザーの操作や画面表示のタイミングで、CRM・在庫・天気など外部サービスの最新情報を取りにいく
- 外部APIのレスポンスを加工して返す
- 取得結果をフィルタ・整形してから、フロントや別システムに渡す
定期実行でデータを同期する場合は スケジュール実行する を、KARTEの接客をきっかけに外部へ送る場合は KARTE の接客から処理を実行する を参照してください。
サンプルコード
Section titled “サンプルコード”HTTPタイプのファンクションとしてデプロイします。
export default async function (data, { MODULES }) { const { res, secret } = MODULES; const logger = MODULES.initLogger({ logLevel: "INFO" });
const apiKey = await secret.get("EXTERNAL_API_KEY_NAME"); const response = await fetch("https://api.example.com/data", { headers: { Authorization: `Bearer ${apiKey}` }, });
if (!response.ok) { logger.error("API request failed", { status: response.status }); return res.status(502).json({ error: "External API error" }); }
const body = await response.json(); return res.status(200).json(body);}前提と手順の詳細
Section titled “前提と手順の詳細”- ファンクションの作成・デプロイ
- ファンクションを作成、編集、削除する(HTTPタイプを選択)
- HTTPタイプの入力・レスポンス
- APIキーの登録
このユースケースのポイント
Section titled “このユースケースのポイント”secretモジュールでキーを取得し、fetchのAuthorizationヘッダーに付与する- 外部APIのエラーはログに残し、クライアントには
502で返す
デプロイ後に表示されるエンドポイントURLへリクエストします。
curl https://<your-endpoint-url>外部APIから取得したJSONが返れば成功です。
関連ドキュメント
Section titled “関連ドキュメント”ソリューションブログ
Section titled “ソリューションブログ”- 「緯度経度」から Google Maps Platform の Pollen API で花粉情報を取得して KARTE に連携する
- Craft Functions から Google Analytics Data API を利用し、GA4 のコンバージョンイベントの成果を Slack に通知する
- Craft Functions から Search Console API を利用し、Google Search Console のデータを Slack に通知する
- Craft Functions から PageSpeed Insights API を利用し、コアウェブバイタルの結果を Slack に通知する
- Craft Functions から Custom Search API を使い、検索結果をスプレッドシートに出力する
- Craft Functions から Instagram 基本表示 API を使って、KARTE のユーザー ID と Instagram のユーザー情報を紐付ける
- Craft Functions からスプレッドシートのデータを読み書きする
- ユーザーの現在地の天気データを基にした商品レコメンドページを実装する