让 R Plumber API 在 POST 上使用 JSON

FvD*_*FvD 4 json curl r plumber

我正在使用管道工在 R 中编写 API ,理想情况下将使用它在 POST 上收到的 JSON。但是我无法让端点 POST 示例以这种方式工作,所以我可能遗漏了一些明显的东西。

使用示例 URL 和 Curl,我可以毫无问题地执行以下操作:

curl -i -X POST http://plumber.tres.tl/append/append -d "val=50" 
Run Code Online (Sandbox Code Playgroud)

但是示例的呈现方式:

POST {val: 50} -> http://plumber.tres.tl/append/append
Run Code Online (Sandbox Code Playgroud)

建议也允许使用 JSON。所以我试过:

 curl -H "Content-Type: application/json" -X POST -d '{"val":50}' http://plumber.tres.tl/append/append
Run Code Online (Sandbox Code Playgroud)

以及确保 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}'
Run Code Online (Sandbox Code Playgroud)

还使用文件并尝试将其发布为@my.json无效。

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

FvD*_*FvD 5

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

由于jsonlite已经由包导入,我提出了一个小的更改,以在拉取请求 #53 中添加基本​​的 JSON 支持。

按照 README 中的示例,添加此补丁后,以下内容将起作用:

 curl --data '{"a":4, "b":5}' http://localhost:8000/sum
Run Code Online (Sandbox Code Playgroud)

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

更新:现在已合并到管道工项目中,如果您使用 github 从 github 安装该版本devtools::install_github("trestletech/plumber"),或者在 CRAN 上提供 0.3.1 版本后立即通过传统安装,这对您有用。