PUT или POST, если операция выглядит идемпотентной

Я хочу создать приложение, похожее на это: клиент (идентифицируемый по идентификатору пользователя) отправляет вызов API REST на сервер. Сервер запрашивает базу данных, чтобы проверить, есть ли у этого пользователя значок раньше. Если есть, то ничего не делает. В противном случае он отмечает в базе данных, что пользователю предоставлен значок, и отправляет пользователю электронное письмо.

PUT / пользователь //badge/ POST /user//badge/

Мой вопрос здесь, какой метод http я должен использовать здесь? ПОСТ или ПОСТ?

Он идемпотентен в том смысле, что электронная почта отправляется только в первом запросе, а последующие запросы не делают ничего, кроме запроса к базе данных.

Какой метод http книги рекомендуют использовать в этом случае?

1 ответ

Если он идемпотентен, то обычно это PUT, как ясно из RFC 7231, раздел 4.3.4:

Принципиальное различие между методами POST и PUT подчеркивается различным намерением для вложенного представления. Целевой ресурс в запросе POST предназначен для обработки вложенного представления в соответствии с собственной семантикой ресурса, тогда как вложенное представление в запросе PUT определяется как замена состояния целевого ресурса. Следовательно, цель PUT является идемпотентной и видимой для посредников, хотя точный эффект известен только серверу происхождения.

Другие вопросы по тегам