2013-04-30 21 views
36

我正在嘗試對服務器進行PATCH調用。我正在使用以下命令:如何使用PATCH動詞與捲曲

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

這是發送PATCH請求的正確方法嗎?我收到一個錯誤,說沒有狀態參數集。我猜測--data僅適用於POST請求,因此服務器沒有找到狀態參數。

這是(僅供參考)響應:

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

您可以找到有關此項服務here文檔。

回答

53

這是你應該使用以下格式:

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

使用-X似乎並不以發送PATCH請求的方式工作 - 您必須使用--request PATCH。另外,該API似乎希望status參數作爲url上的查詢參數,而不是PATCH主體的一部分。

此時服務器將返回401錯誤:「您必須登錄才能修改頁面設置。」 Assumedly你必須有這樣的初次登錄:

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

我在這個例子中使用他們的文件的憑據,我想通了開發服務器上的工作,但目前它返回一個「密碼錯誤」錯誤。

但是,如果您擁有有效憑證,則應該取回一個會話cookie,然後您可以使用該cookie來驗證您的PATCH請求。

+5

奇怪的是,'-X'和'--request'被記錄爲同一個標誌。 – 2014-08-12 12:43:47

-1

的另一種方法是如下,這是通過POST調用雖然

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

我猜測這是不是一個普遍的方式,僅適用於這個特定的實例。

+1

這違背了每個REST原則。你正在失去http PATCH的好處(減少內存,請求的帶寬等)。 – Ron 2014-06-11 09:59:12

2

您的命令行應該工作。正如您在PATCH RFC5789中看到的,HTTP請求與curl發送的類似(使用--trace-ascii可以看到完整的捲曲通信)。您可能需要更改內容類型(使用--header)。

提到的缺失狀態參數可能指的是請求主體中的內容。您的「status = closed」數據可能不是正確的格式(JSON?),或者它不完整。

(你似乎意在包括一個鏈接到API,但沒有鏈接有!)

+0

添加了鏈接抱歉。 – sheidaei 2013-05-03 16:17:37

3

我正在嘗試使用類似的捲曲請求修補tastypie資源。對我來說,問題是數據必須通過像這樣:

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

注意怎麼樣我傳遞給數據標誌是什麼樣子作爲字符串傳遞,而不是直接把帕拉姆的字典裏就像問題一樣。當然,一個參數的工作原理也已經回答了,但希望這可以幫助一些人。