Есть ли способ достичь этого (или аналогичного) результата с помощью REST?
Хорошо просто отправить обновленное значение в ту же конечную точку.
Подумайте, как бы вы сделали это во всемирной паутине. Вы заходите на веб-сайт и загружаете некоторую форму, содержащую текстовое поле для даты, текстовое поле для bloodSugarLevel и кнопку отправки. Это отправит сообщение на веб-сервер, и ваш браузер получит ответ.
Обратите внимание, что нам, как клиенту, нас действительно не волнует, добавляет ли сервер новое сообщение в список, или помещает сообщение в карту, или делает что-то умное с RDBMS или графической базой данных. Это детали реализации; Часть единого интерфейса заключается в том, что интерфейс означает, что клиентам (и общим компонентам) действительно не нужно знать, что происходит.
Еще один протокол приложения, который мог бы работать, - это рассматривать bloodSugarLevel как документ, который пользователи могут редактировать локально. Таким образом, клиент может просто использовать любой редактор с поддержкой HTTP для правильной работы.
GET /users/1/blood-sugar/
200 OK
{
"measureDate": "2019-05-03",
"bloodSugarLevel": 90
}
PUT /users/1/blood-sugar/
{
"measureDate": "2019-05-04",
"bloodSugarLevel": 86
}
204 No Content
PUT /users/1/blood-sugar/
{
"measureDate": "2019-05-04",
"bloodSugarLevel": 105
}
Существует несколько семантических преимуществ использования PUT, когда сеть ненадежна; поскольку сервер соглашается с тем, что обработка сообщения будет выполняться идемпотентно, клиенты могут ответить на тайм-аут в ожидании подтверждения повторением отправки.
Семантически, PUT означает «upsert», но базовая реализация не обязательно должна быть upsert. Мы только обещаем семантику, которую может ожидать клиент.