2013-04-30 2 views
36

Я пытаюсь сделать вызов PATCH на сервер. Я пользуюсь следующей командой:Как использовать глагол PATCH с curl

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

Это правильный способ отправки запроса PATCH? Я получаю сообщение о том, что нет набора параметров статуса. Я предполагаю, что -data только для запроса POST, и поэтому сервер не находит параметр статуса.

Это ответ (FYI):

{"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: «Вы должны войти в систему, чтобы изменить параметры страницы». Предположительно вы должны сначала войти в систему с чем-то вроде этого:

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

Альтернативный способ состоит в следующем, это через вызов POST хотя

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

Я предполагаю, что это не является общим способом и относится только к данному конкретному экземпляру.

+1

Это противоречит каждому принципу REST.Вы теряете преимущества http PATCH (сокращение памяти, пропускная способность запросов и т. Д.). – Ron

2

Ваша командная строка должна работать. Как вы можете видеть в PATCH RFC5789, HTTP-запрос похож на то, что посылает curl (используйте --trace-ascii, чтобы увидеть полную связь с curl). Возможно, вы захотите изменить Content-Type (используя --header).

Указанный недостающий параметр статуса, вероятно, относится к содержимому в теле запроса. Ваши данные «status = closed», возможно, не в правильном формате (JSON?), Или они неполны.

(Вы, кажется, намеревались включить ссылку на API, но там нет ссылки там!)

+0

добавил ссылку об этом. – sheidaei

3

Я пытался использовать PATCH для ресурса tastypie с аналогичным запросом на завиток. Для меня эта проблема данные должны были быть переданы в так:

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

Обратите внимание, как то, что я перехожу к флагу данных находится внутри того, что выглядит как словарь передается в виде строки, а не помещать параметров напрямую как в вопросе. Конечно, парам тоже работает, как уже ответил, но, надеюсь, это помогает некоторым людям.

Смежные вопросы