【发布时间】:2021-04-15 17:39:16
【问题描述】:
我们正在我们的应用中构建传出 webhook 功能。我们希望添加 webhook 的用户能够自定义发送的 json 有效负载。为此,我们需要一种允许将变量插入到最终有效负载中的语法。
示例: 用户管理的模板:
{:id=>"%{id}", :message=>"%{message}", :badge=>"%{badge}"}
希望的输出:
{
"id": "f1ih5g3",
"message": "Thanks for your help",
"badge": {
"id": "M7nk8ojK",
"name": "Thanks Badge",
"points": 10,
}
}
因此,在上面的示例中,有一个主 webhook 对象,id 和 message 的基本变量被插值并作为字符串返回。但是,当模板中包含对完整对象的引用时,我们还希望能够支持嵌套结构。当包含对完整对象的引用时,它应该返回该对象的 json 表示。
我们已经尝试使用 String#% 运算符,它适用于基本变量,但对于嵌套对象,它会产生如下的字符串化版本:
{
"id": "f1ih5g3",
"message": "Thanks for your help",
"badge": "{:id=>\"M7nk8ojK\", :name=>\"Thanks Badge\", :points=>10}"
}
我探索过 RABL 和 Jsonnet,它们似乎并不真正支持动态模板(即由用户管理的模板)。
ERB 语法可以工作,但似乎不安全,因为模板中可能包含任意 ruby。
【问题讨论】:
标签: ruby-on-rails json ruby