2013-04-30 7 views
36

サーバへのPATCH呼び出しをしようとしています。私は次のコマンドを使用しています:PATCH動詞をカールで使用する方法

curl --data status=closed -X PATCH https://api.viafoura.com/v2/dev.viafoura.com/pages/7000000043515 

これはPATCH要求を送信する正しい方法ですか?状態パラメータが設定されていないというエラーが表示されます。私は - データがPOST要求のためだけだと推測しているので、サーバーは状態パラメータを見つけられません。

{"http_status":400,"error":"Parameter validation errors","validation_errors":{"status":{"error":"Request missing status parameter."}}} 

あなたはこのサービスhereについてのドキュメントを見つけることができます。

これは、応答(FYI)です。

答えて

53

これは使用すべき形式です:

curl --request PATCH https://api.viafoura.com/v2/dev.viafoura.com/pages/7000000043515?status=closed 

-Xを使用していないようですPATCHリクエストを送信するという点では、--request PATCHを使用する必要があります。また、そのAPIは、statusパラメータをPATCH本体の一部ではなく、URLのクエリパラメータとして使用するように思われます。

この時点で、サーバーは401エラーを返します。「ページ設定を変更するには、ログインする必要があります。」仮にあなたはこのようなもので最初にログインする必要があります。私はその一例では、そのドキュメントからの資格情報を使用しました

curl --request POST "https://api.viafoura.com/v2/dev.viafoura.com/users/login?password=TeNn!sNum8er1&[email protected]" 

、私は自分のdevのサーバー上で動作すると考えましたが、その現在「不正なパスワード」を返しますエラー。

有効な資格情報を持っている場合は、セッションCookieを入手してから、PATCH要求の認証に使用する必要があります。

+5

奇妙な '-X'と' --request'は、同じフラグであると書かれています。 –

-1

代替方法が続くようである私は、これは一般的な方法ではありませんとだけ、この特定のインスタンスに適用されます推測してい

curl --data status=closed https://api.viafoura.com/v2/dev.viafoura.com/pages/7000000043515?verb=PATCH 

けれども、これはPOST呼び出しを介して行われます。

+1

これは、すべてのRESTの原則に反するものです。httpパッチの利点を失うことになります(メモリの削減、要求の帯域幅の縮小など)。 – Ron

2

コマンドラインが機能するはずです。パッチRFC5789にあるように、HTTPリクエストはcurlが送信するものと似ています(フルカール通信を見るには--trace-asciiを使用してください)。 Content-Type(--headerを使用)を変更することができます。

前述の欠落ステータスパラメータは、おそらくrequest-bodyの内容を参照しています。あなたの "status = closed"データが正しい形式(JSON?)でないか、不完全です。

(あなたがAPIへのリンクを含むことを意図しているように見えるが、そこにリンクがない!)

+0

はリンクを残して申し訳ありません。 – sheidaei

3

私は、類似したカール要求を持つ睾丸のリソースにパッチを当てようとしていました。私はデータフラグに渡すことではなく、直接のparamを置くよりも、文字列として渡された辞書のように見えるものの中にあるか

curl --data '{"field": "new_value"}' -X PATCH http://127.0.0.1:8000/api/v1/resource_uri/pk/ 

お知らせ:私にとっての問題は、データがそうのようで渡されなければなりませんでした質問のように。もちろん、すでに答えられているようにparamも機能しますが、うまくいけば、これは一部の人に役立ちます。

関連する問題