Как сделать 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))

Или, по крайней мере, это первое. Исходя из комментариев, я бы предположил, что тело вашего запроса тоже плохо.

Другие вопросы по тегам