2016-07-21 75 views
2

我正在使用plumber編寫R中的API,理想情況下它將使用它在POST上收到的JSON。但我不能讓endpoint POST example這樣工作,所以我可能錯過了一些明顯的東西。讓R Plumber API在POST上消耗JSON

使用例如URL和捲曲我可以做沒有問題如下:

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編碼,主要是什麼我發現這裏#2約後註釋掉"和各種基於其他組合。例如:

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方面的東西:我希望給定的工具集序列化輸出,我也可以聲明輸入的預期序列化。但我還沒有找到如何做到這一點。

回答

2

事實證明,這對管道工來說是一個相對簡單的問題。功能postBodyFilter調用parseQS,該調用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。