Новый пользователь не создается во второй раз. Является ли метод POST идемпотентом или нет?
Является ли этим обработчиком POST идемпотентом? Да, звучит так, как есть. Это, безусловно, может быть.
Тем не менее; клиент общего назначения не узнает, что этот конкретный обработчик имеет идемпотентную реализацию. Суть унифицированного интерфейса заключается в том, что семантика сообщения и соответствующие гарантии везде одинаковы.
Клиент общего назначения не может предположить, что ваш обработчик POST является идемпотентным, поскольку Стандарт HTTP говорит, что мой обработчик POST не должен быть.
Так что мне делать, если моя база данных не допускает дублирования? Я должен нарушать стандарт, правильно?
Нет, то, что вы делаете, хорошо, и не нарушает стандарт. Стандарт не запрещает реализации POST быть идемпотентным; в нем говорится, что клиенты не могут предположить , что операция идемпотентна.
В этом отношении она в точности аналогична "безопасной": стандарт не обещает, что запросы POST безопасны, поэтому клиентам не разрешается предполагать, что они будут. Но мы все еще можем использовать POST для безопасных запросов, поэтому мы можем делать такие вещи, как использование POST для запросов SOAP / GraphQL.