Как увеличить значение с JSON Patch? - PullRequest
0 голосов
/ 14 января 2020

Нам нужно обновить счетчик через наш REST API, и мы используем JSON Patch для наших вызовов PATCH, поэтому оно должно выглядеть примерно так:

{"op": "increment", "path": "/ counter", "value": 1}

Проблема в JSON Патч не поддерживает этот тип операции. Предполагается, что операция ADD работает только с массивами, поэтому наиболее близким решением будет использование операции REPLACE для замены значения счетчика, но это может привести к проблемам, если более одного клиента попытались обновить счетчик одновременно.

Так, как мы должны решить эту проблему и как неправильно было бы добавлять пользовательскую операцию, такую ​​как приращение?

1 Ответ

1 голос
/ 14 января 2020

Проблема в JSON Патч не поддерживает этот тип операции. Операция ADD должна работать только с массивами, поэтому наиболее близким решением будет использование операции REPLACE для замены значения счетчика

replace - правильный ответ.

, что может привести к проблемам, если более одного клиента попытались обновить счетчик одновременно.

Внимательно посмотрите на test , который дает Вы семантика, необходимая для описания предварительного условия. По сути, ваш документ становится описанием сравнения и обмена.

насколько неправильно было бы добавлять пользовательскую операцию, например, приращение?

Все неправильно. RF C 6902 четко заявляет , что набор операций НЕ ДОЛЖЕН * быть расширенным

Объекты операций ДОЛЖНЫ иметь ровно один элемент "op", значение которого указывает на операцию для выполнения. Его значение ДОЛЖНО быть одним из «добавить», «удалить», «заменить», «переместить», «копировать» или «проверить»; другие значения - ошибки.

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

На более широкой картине, если вы пытаетесь передать «приращение», а не «установить», семантика удаленной авторизации может не правильный выбор - проблема может заключаться в том, что вы пытаетесь сказать, что у вас в руке не тот инструмент.

...