Re[13]: Идемпотентность POST - хорошая ли практика?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 26.09.22 11:45
Оценка: 82 (1)
Здравствуйте, Pauel, Вы писали:


P>Вот у нас есть два варианта реализации операции, что выберешь?


P>Явный контроль идемпотентности

P>
P>@Post('/orders')
P>operation(order: Delta<Order>, idempotencyKey: string): Promise<Order>
P>


P>Магический

P>
P>@Post('/orders')
P>@Idempotent()
P>operation(order: Delta<Order>): Promise<Order>
P>


Простите, а контроль со стороны кого?
Клиента? Сервера? Программиста?

Это все работает не так как вы думаете.
Вот вы делаете АПИ, а я пытаюсь его использовать. Мы оба читали спецификации.
Я вижу метод PUT и понимаю что могу спокойно добавить код повтора запроса если получил ошибку 5xx или вообще не получил ответа из-за проблем сети. В случае с POST это в общем случае не так.

Увидев в сигнатуре метода idempotencyKey я могу сделать предположение что метод будет идемпотентным, но это будет завесить от семантики payload. Если это JSON Patch, то у меня будут закрадываться сомнения, что метод действительно идемпотентный и я могу спокойно повторять вызов с одними и теми же параметрами.

Кроме того, с точки зрения тестирования явное указание idempotencyKey скорее всего приведет к том, что при тестировании в postman будут менять payload и не будут менять idempotencyKey с абсолютно непонятными последствиями.

Поэтому я бы рекомендовал отказаться от идемпотентности POST с JSON Patch и аналогичным payload.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.