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

アクションに関する質問

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文字列に変換 }); };

今後の改善予定

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