让R Plumber API在POST

时间:2016-07-21 14:08:06

标签: json r curl plumber

我使用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方面的东西:我希望给定工具集来序列化输出,我也可以说明输入的预期序列化。但我还没有找到如何做到这一点。

1 个答案:

答案 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版本。