让 R 管道工 API 在 POST 消费 JSON

Have an R Plumber API consume JSON on POST

我正在写 API 在 R 中使用 plumber that ideally will consume the JSON it receives on POST. But I cannot get the endpoint POST example 以这种方式工作,所以我可能遗漏了一些明显的东西。

使用示例 URL 和 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 编码的所有变体,注释掉 " 和各种其他组合,主要基于我在 Whosebug 上找到的关于 post 的内容。例如:

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}'

还使用了一个文件并尝试 post 它,因为 @my.json 没有成功。

也许是 Plumber 方面的事情:我希望给定工具集来序列化输出,我也可以说明预期的输入序列化。但我还没有找到如何做到这一点。

事实证明这是一个相对简单的水管工问题。函数 postBodyFilter 调用 parseQS,后者依次拆分为 &=,并且尚未检查 JSON 格式(例如基于初始 { 和结尾 }).

因为 jsonlite 已经被包导入了,所以我建议做一个小改动,在 pull request #53 中添加基本的 JSON 支持。

按照 README 中的示例,添加此补丁后将执行以下操作:

 curl --data '{"a":4, "b":5}' http://localhost:8000/sum

由于调用 jsonlite 来解析查询字符串的内容,更复杂的 JSON 应该也是可能的,但我还没有测试过。

Update :现在已合并到 plumber project 中,如果您使用 [=19= 从 github 安装版本,它将对您有用],或在 CRAN 上提供 0.3.1 版后立即通过传统安装。