2016-07-21 2 views
2

plumberを使用してRでAPIを書いているので、POSTで受け取るJSONを理想的に消費します。しかし、私はendpoint POST exampleをそのように動作させることはできません。だから、私は明らかに何かを見逃しているでしょう。R配管APIがPOST時にJSONを消費する

curl -i -X POST http://plumber.tres.tl/append/append -d "val=50" 

しかし、例が提示された方法:私は問題なく次の操作を行うことができます例のURLとカールを使用して

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 

そして、すべてのバリエーションを主に私がポストについてStackOverflowの上ここに見つけたものをもとに、UTF-8エンコーディングを確保"をコメントアウトし、他の組み合わせのすべての種類のために。たとえば:

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を呼び出すと、&=に分割され、JSON形式(例:初期{と終了}に基づいています)をまだチェックしていません。

jsonliteは既にパッケージによってインポートされていたので、少し変更してpull request #53に基本的なJSONサポートを追加することを提案しました。

READMEの例に続き、以下はこのパッチを追加した後に動作しますが:

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

呼び出しはクエリ文字列の内容を解析するjsonlite上にあるので、より複雑なJSONも可能でなければなりませんが、私はまだそれをテストしていない。

更新:これは今plumber projectにマージされていて、あなたがdevtools::install_github("trestletech/plumber")を使用してgithubのからのバージョンをインストールする、または伝統的な通過とすぐにバージョン0.3.1がCRAN上で利用可能であるとしてインストールした場合、あなたのために動作します。

関連する問題