【问题标题】:Have an R Plumber API consume JSON on POST让 R Plumber API 在 POST 上使用 JSON
【发布时间】:2016-07-21 14:08:05
【问题描述】:

我正在使用plumber 在 R 中编写 API,理想情况下它将使用它在 POST 上收到的 JSON。但我无法让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 编码的所有变体,注释掉 " 和各种其他组合,主要基于我在 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 方面的东西:我希望给定工具集来序列化输出,我还可以说明预期的输入序列化。但我还没有找到如何做到这一点。

【问题讨论】:

    标签: json r curl plumber


    【解决方案1】:

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

    由于 jsonlite 已经被包导入,我提出了一个小改动,以在 pull request #53 中添加基本的 JSON 支持。

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

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

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

    更新:现在已合并到 plumber project,如果您使用 devtools::install_github("trestletech/plumber") 从 github 安装该版本,或者通过传统安装尽快 0.3 版,这将适用于您。 1 在 CRAN 上可用。

    【讨论】:

    • 我有一个 R 代码管道,它向 qualtrics 发送 GET 调用以提取调查并处理它。我不想将此 R 管道设置为 cron 作业,而是希望代码由 qualtrics 上的用户提交按钮触发。你知道如何实现吗?任何开始的方向或材料都会有所帮助。谢谢你
    • 如果我正确理解您要执行的操作,您可以在管道工中将端点设置为 POST,这样您就可以在用户按下提交按钮时触发该功能。查看管道工中的“路由和端点”文档:rplumber.io/articles/routing-and-input.html?q=post#endpoints
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-26
    • 2018-07-17
    • 1970-01-01
    • 1970-01-01
    • 2021-11-11
    • 2021-09-26
    • 2017-11-21
    相关资源
    最近更新 更多