Да, можно и через PUT, но с его использованием возможна накладка с ID ресурса.
a) PUT/id = set (if doesn’t exist then throw), POST + idempotency key = create if doesn’t exist
b) PUT/id = if doesn’t exist then create else set. ID ресурса будет генерироваться клиентом. И тогда для изоляции клиентов понадобится уникальность id в рамках клиента (чтобы клиент вовсе не знал о других клиентах), либо требовать от клиентов глобальной уникальности используемых id (как с username на некоторых сайтах).
Смотри шире, это же не только про форму и пользователя. В довольно стандартной интеграции микросервисов через transaction outbox одна из основных вещей - воспроизводимость и идемпотентность.
Да, можно и через PUT, но с его использованием возможна накладка с ID ресурса.
a) PUT/id = set (if doesn’t exist then throw), POST + idempotency key = create if doesn’t exist
b) PUT/id = if doesn’t exist then create else set. ID ресурса будет генерироваться клиентом. И тогда для изоляции клиентов понадобится уникальность id в рамках клиента (чтобы клиент вовсе не знал о других клиентах), либо требовать от клиентов глобальной уникальности используемых id (как с username на некоторых сайтах).
Спасибо, хорошая идея для улучшения
Смотри шире, это же не только про форму и пользователя. В довольно стандартной интеграции микросервисов через transaction outbox одна из основных вещей - воспроизводимость и идемпотентность.
Или блокировка на вставку. Но только пост не про это. Но раз есть запрос, подумаю над дополнением с обзором методов синхронизации, спасибо