よくある疑問点
アクションに関する質問

アクションに関する質問

HTTP API/gRPCアクションでオブジェクトの配列を送信したい

HTTP APIアクションやgRPCアクションのリクエストボディでオブジェクトの配列(gRPCにおけるrepeatedのmessage)を送信したい場合、現状ではJavaScriptアクションと組み合わせて実現する必要があります。

送信したいオブジェクトの配列の例

以下のように、オブジェクトの配列を送信したい場合を考えます。

{
  "id": "example123",
  "items": [
    { "name": "item1", "value": 100 },
    { "name": "item2", "value": 200 },
    { "name": "item3", "value": 300 }
  ]
}

設定方法

1. HTTP API/gRPCアクションの設定例

オブジェクトの配列のJSON文字列を受け取るパラメーターをテキストパラメーターとして設定します。

  • パラメーター名:items(配列のJSON文字列を受け取るパラメーター)
  • 入力値の種類:テキスト

リクエストボディでは、以下のように items パラメーターを使用します。

{
  "id": "{{ id }}",
  "items": {{ items }}
}

{{ items }}は、後述の通りJavaScriptアクションから送信したJSON文字列によって置換されるため、ダブルクォートをつけないように注意してください。

gRPCアクションでも同様の設定方法で、repeatedのmessageを送信できます。

2. JavaScriptアクションの設定例

JavaScriptアクションでオブジェクトの配列を作成し、JSON.stringify()でJSON文字列に変換してからHTTP API/gRPCアクションのパラメーターの値に入力します。

パラメーター設定例

  • id:テキストパラメーター
  • items:配列パラメーター(要素の種類がタプル)
    • タプルにはオブジェクトのプロパティに対応する要素を設定

コード例

import { executeAction } from "@basemachina/action";
 
/** @type { import("@basemachina/action").Handler } */
export default async (args) => {
  // タプルの配列からオブジェクトの配列を作成
  const items = args.items.map((item) => {
    return {
      name: item[0], // タプルの1番目の要素
      value: item[1], // タプルの2番目の要素
    };
  });
 
  // HTTP API/gRPCアクションを実行
  return await executeAction("action-id", {
    id: args.id,
    items: JSON.stringify(items), // JSON文字列に変換
  });
};

今後の改善予定

多くのお客さまからご要望をいただいておりますので、よりシンプルに設定できる機能を検討中です。恐れ入りますが、それまではこちらの方法での実装をお願いいたします。