I am trying to make a PATCH call to a server. I am using the following command:
curl --data status=closed -X PATCH https://api.viafoura.com/v2/dev.viafoura.com/pages/7000000043515
Is this the correct way of sending the PATCH request? I am getting an error saying there is no status parameter set. I am guessing the --data is for POST request only and thus the server doesn't find the status parameter.
This is the response (FYI):
{"http_status":400,"error":"Parameter validation errors","validation_errors":{"status":{"error":"Request missing status parameter."}}}
You can find documentation about this service here.
This is the format you should use:
curl --request PATCH https://api.viafoura.com/v2/dev.viafoura.com/pages/7000000043515?status=closed
That API seems to want the status
parameter as a query parameter on the url, not part of the PATCH body.
At this point the server is going to return a 401 error: "You must be logged in to modify page settings." Assumedly you have to login first with something like this:
curl --request POST "https://api.viafoura.com/v2/dev.viafoura.com/users/login?password=TeNn!sNum8er1&email=novak@example.com"
I've used the credentials from their documentation in that example, which I figured would work on their dev server, but its currently returning an "Incorrect password" error.
If you have valid credentials, though, you should get back a session cookie which you can then use to authenticate your PATCH request.
I was trying to PATCH to a tastypie resource with a similar curl request. For me the problem was the data had to be passed in like so:
curl --data '{"field": "new_value"}' -X PATCH http://127.0.0.1:8000/api/v1/resource_uri/pk/
Notice how what I pass to the data flag is inside of what looks like a dictionary passed as a string, rather than putting the param directly as in the question. Of course a param works too as already answered, but hopefully this helps some people.
Your command line should work. As you can see in the PATCH RFC5789, the HTTP request is similar what curl sends (use --trace-ascii to get to see the full curl communication). You might want to change the Content-Type (using --header).
The mentioned missing status parameter is probably referring to contents in the request-body. Your "status=closed" data is possibly not in the right format (JSON?) or it is incomplete.
This is something which worked for me in my sample app.
curl --data 'id=57&equipment_type_name=57 edited' -X PATCH http://localhost:5009/equipment-type/update
{
"info": "Equipment type updation.",
"response": {
"status": "success",
"message": "updateEquipmentType",
"result": {
"data": [
[
{
"update_status": 1
}
],
{
"fieldCount": 0,
"affectedRows": 0,
"insertId": 0,
"serverStatus": 2,
"warningCount": 0,
"message": "",
"protocol41": true,
"changedRows": 0
}
]
}
}
}
An alternative way is as follow, this is through a POST call though
curl --data status=closed https://api.viafoura.com/v2/dev.viafoura.com/pages/7000000043515?verb=PATCH
I am guessing this is not a general way and only applies to this specific instance.