Re: Идемпотентность POST - хорошая ли практика?
От: vsb Казахстан  
Дата: 20.09.22 05:19
Оценка: 1 (1)
Здравствуйте, Shmj, Вы писали:

S>Т.е. этот "стажер" (как позже признались в комментах — это опыт выведен из нескольких проектов) — сделал запрос POST идемпотентным. Но как мы знаем — POST не идемпотентен, т.к. еще не знает ключа ресурса — ключ только генерится.


POST не обязан быть идемпотентным, но никто не мешает сделать его идемпотентным.

S>Не логичнее ли вместо idempotency_key использовать ID и сделать этот ID типа UUID v4? Ведь по сути именно это хотел изобразить стажер:



S>
S>PUT /v1/orders/786706b8-ed80-443a-80f6-ea1fa8cc1b51

S>{
S>  "id": "786706b8-ed80-443a-80f6-ea1fa8cc1b51",
S>  "from": "Москва, ул. Садовническая набережная 82с2",
S>  "to": "Аэропорт Внуково"
S>}
S>


S>Какие минусы в этом?


Я бы так и сделал.

S>Минус очевидный — это диктует тип ключей — только UUID. А если хочется чтобы ключи генерила СУБД и там спец. система для распределенной генерации ключей? Т.е. такой PUT как бы обязывает применять новую схему создания ключей.


Ну вот я недавно думал над этим и решил, что ключи должны быть только UUID. Минусов у UUID почти нет, а плюсов много.

S>И если уж так подойти — то запросы POST вообще лишены смысла — ведь они не идемпотентны, а это плохо всегда, т.к. если можно сделать идемпотентным (а это можно и нужно всегда — интернет по определению не надежен) — то нужно делать.


Ну в идеале — согласен. На практике не всегда получается это выполнять. Ограничения архитектуры или старого кода могут играть роль. К примеру в браузере нельзя послать PUT на другой домен без разрешений CORS, а POST с определёнными ограничениям — можно. Ну это просто пример.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.