我使用plumber在R中编写和API,理想情况下会使用它在POST上收到的JSON。但我不能让endpoint POST example以这种方式工作,所以我可能会遗漏一些明显的东西。
使用示例网址和Curl我可以毫无问题地执行以下操作:
curl -i -X POST http://plumber.tres.tl/append/append -d "val=50"
但是示例的方式是:
POST {val: 50} -> http://plumber.tres.tl/append/append
建议也允许使用JSON。所以我试过了:
curl -H "Content-Type: application/json" -X POST -d '{"val":50}' http://plumber.tres.tl/append/append
确保UTF-8编码的所有变体,注释掉"
以及各种其他组合,主要基于我在Stackoverflow上发现的关于帖子的内容。例如:
curl -i -X POST -H "Content-Type: application/json" http://plumber.tres.tl/append/append -d '{"val":50}'
curl -i -X POST -H "Accept: application/json" -H "Content-Type: application/json" http://plumber.tres.tl/append/append -d '{\"val\":50}'
curl -i -X POST -H "Content-Type: application/json;charset=UTF-8" http://plumber.tres.tl/append/append -d '{"val":50}'
同样使用文件并尝试将其发布为@my.json
也无效。
也许它是Plumber
方面的东西:我希望给定工具集来序列化输出,我也可以说明输入的预期序列化。但我还没有找到如何做到这一点。
答案 0 :(得分:3)
这对水管工来说是一个相对简单的问题。函数postBodyFilter
调用parseQS
,然后在&
和=
上进行分组,但尚未检查JSON格式(例如,基于初始{
和结束}
)。
由于软件包已经导入了jsonlite
,我提议进行一些小改动,以便在pull request #53中添加基本的JSON支持。
按照README中的示例,添加此补丁后,以下内容将起作用:
curl --data '{"a":4, "b":5}' http://localhost:8000/sum
由于调用是在jsonlite
上解析查询字符串的内容,因此也应该可以使用更复杂的JSON,但我还没有测试过。
更新:现在已合并到plumber project,如果您使用devtools::install_github("trestletech/plumber")
从github安装版本,或者通过传统安装尽快安装因为CRAN上有0.3.1版本。