让 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 版后立即通过传统安装。
我正在写 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 版后立即通过传统安装。