Как сделать HTTP Patch запрос к серверу raven db используя golang?
Я написал следующий код для добавления поля заголовка к документу 1 в моей базе данных raven.
url := "http://localhost:8083/databases/drone/docs/1"
fmt.Println("URL:>", url)
var jsonStr = []byte(`{"title":"Buy cheese and bread for breakfast."}`)
req, _ := http.NewRequest("PATCH", url, bytes.NewBuffer(jsonStr))
req.Header.Set("X-Custom-Header", "myvalue")
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, _ := ioutil.ReadAll(resp.Body)
fmt.Println("response Body:", string(body))
Я не понимаю, почему это не работает? Я получаю следующий ответ Body, который не соответствует ожиданиям. Я ожидаю успешного ответа.
<html>
<body>
<h1>Could not figure out what to do</h1>
<p>Your request didn't match anything that Raven knows to do, sorry...</p>
</body>
Может кто-нибудь указать, что мне не хватает в приведенном выше коде?
2 ответа
Решение
Для запроса PATCH необходимо передать массив с командами исправления (в формате json) для выполнения.
Чтобы изменить title
атрибут, это будет выглядеть так:
var jsonStr = []byte(`[{"Type": "Set", "Name": "title", "Value": "Buy cheese and bread for breakfast."}]`)
PATCH
а также POST
разные HTTP глаголы.
Я думаю, вам просто нужно это изменить;
req, _ := http.NewRequest("POST", url, bytes.NewBuffer(jsonStr))
в
req, _ := http.NewRequest("PATCH", url, bytes.NewBuffer(jsonStr))
Или, по крайней мере, это первое. Исходя из комментариев, я бы предположил, что тело вашего запроса тоже плохо.