コンテンツにスキップ

HTTPエンドポイントから実行する(旧エンドポイント)

Craft Endpoint はファンクションを実行するためのHTTPエンドポイントです。

craft-endpoint

このトリガーを使うことで、ユーザーはKARTEの機能を介さずに直接ファンクションを実行できます。

設定手順

  • [ファンクション詳細画面]の[エンドポイント設定]タブで、[作成]を選択します。
    • 表示されたモーダルで[はい]を選択します。
  • エンドポイントURLが生成されます。
    • URLの右にあるボタンを選択すると、URLをクリップボードにコピーできます。

Craft Functionsが受け取るデータ

dataのフォーマットは イベント駆動タイプのファンクションが受け取るデータ をご確認ください。

  • kind は `“karte/track-hook” が入ります。
  • jsonPayload には次のフォーマットで値が入ります。
"jsonPayload": {
"name": "craft-hook",
"data": {
"plugin_name": "craft",
"hook_data": {
"body": "{ Request Body }",
"endpointSuffix": "{ Endpoint Suffix }",
"ip": "{ Source IP Address }",
"query": {
"queryKey": "queryValue"
},
"headers": {
"origin": "{ Origin }",
"authorization": "{ Authorization }",
"user-agent": "{ userAgent }",
"referer" : "{ Referrer }",
"content-length": "{ ContentLength }",
"content-type": "{ ContentType }"
}
}
}
}
Key説明
jsonPayload.name"craft-hook" が入ります。
jsonPayload.data.plugin_name"craft" が入ります。
jsonPayload.data.hook_data.bodyエンドポイントへのリクエスト時の Body が入ります。JSON文字列で送信した場合は Object 型になります。
jsonPayload.data.hook_data.endpointSuffixURLエンドポイントの末尾の文字列です。
jsonPayload.data.hook_data.ipエンドポイントにリクエストを行ったクライアントのIPアドレスです。
jsonPayload.data.hook_data.queryリクエスト時のクエリパラメータです。Key-Value形式にパースされます。
jsonPayload.data.hook_data.headers.originエンドポイントへのリクエスト時のOriginヘッダーの値が入ります。この要素はリクエストにOriginヘッダーが含まれる場合のみ存在します。
jsonPayload.data.hook_data.headers.authorizationエンドポイントへのリクエスト時のAuthorizationヘッダーの値が入ります。この要素はリクエストにAuthorizationヘッダーが含まれる場合のみ存在します。
jsonPayload.data.hook_data.headers.user-agentエンドポイントへのリクエスト時のUser Agentヘッダーの値が入ります。この要素はリクエストにUse rAgentヘッダーが含まれる場合のみ存在します。
jsonPayload.data.hook_data.headers.referrerエンドポイントへのリクエスト時のReferrerヘッダーの値が入ります。この要素はリクエストにReferrerヘッダーが含まれる場合のみ存在します。
jsonPayload.data.hook_data.headers.content-lengthエンドポイントへのリクエスト時のContent Lengthヘッダーの値が入ります。この要素はリクエストにContent Lengthヘッダーが含まれる場合のみ存在します。
jsonPayload.data.hook_data.headers.content-typeエンドポイントへのリクエスト時のContent Typeヘッダーの値が入ります。この要素はリクエストにContent Typeヘッダーが含まれる場合のみ存在します。

ファンクションの実行方法

URLエンドポイントにPOST あるいはGETリクエストを送ります。

Terminal window
## Curlによる実行例
curl --location --request POST 'https://t.karte.test/hook/mock/craft/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' \
--header 'Content-Type: application/json' \
--data-raw '{
"test": 1
}'

正常なリクエストを受信した場合、Craft Functionsは「Craft Functionsが受け取るデータ」に記載のフォーマットで data を受け取ります。

// data の例 (JSON表記)
{
"id": "3a118b29-c131-49af-95db-6006b00896ad",
"kind": "karte/track-hook",
"timestamp": "2023-01-1_1T06:28:26.490Z",
"jsonPayload": {
"name": "craft-hook",
"data": {
"plugin_name": "craft",
"hook_data": {
"body": {
"test": 1
},
"endpointSuffix": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"ip": "1.1.1.1"
}
}
}
}
  • ファンクションの処理が完了すると、エンドポイントは200のステータスを返却します。
    • このとき、エンドポイントはファンクションの関数内でreturnした値をResponse Bodyとして返却します。
  • URLが無効な場合(非アクティブ、削除済みなど)は404ステータスを返却します。
  • エンドポイントへのリクエストがタイムアウトした場合は502ステータスを返却します。

特別なレスポンス

Craft FunctionsでObject型かつ次のフィールドを設定した際は、特別なレスポンスを返します。

フィールド名挙動
craft_redirect_urlString (URL)このフィールドが設定されていた場合は、Craft EndPointはlocationヘッダーにその値を設定し、statusを 302 とした上でレスポンスします。次のcraft_status_code に3系の値を設定した場合は上書きしてレスポンスします。3系以外の値を設定した場合は無視され、 302でレスポンスします。
craft_status_codeNumberこの値が設定されていた場合、Craft Endpointはstatusにその値を設定した上でレスポンスします。上記のcraft_redirect_urlが設定されていた場合はそちらの挙動が優先されます

オリジン間リソース共有 (CORS) への対応状況

Craft EndpointはKARTE接客アクションからのリクエストを想定して、 オリジン間リソース共有 に対応しています。具体的には、クライアントからのプリフライトリクエストに対して次のヘッダーを返却します。

Access-Control-Allow-Origin: (リクエストのOriginヘッダーの値)
Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Allow-Headers: Content-Type
Access-Control-Allow-Credentials: true

FAQ

ブラウザからPOSTリクエストをしましたが、Cross Origin制約エラーになります。

POSTリクエスト時にリクエストボディを省略したり、Content-Typeに合わない形式のリクエストボディを付与すると上記エラーになることを確認しています。POSTリクエストを送る際には、Content-Typeに合うリクエストボディを付与してください。