アクションに関する質問
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文字列に変換
});
};今後の改善予定
多くのお客さまからご要望をいただいておりますので、よりシンプルに設定できる機能を検討中です。恐れ入りますが、それまではこちらの方法での実装をお願いいたします。