Как сделать идемпотентные API в Go: Idempotency-Key, дедуп в Redis/БД и защита от гонок

Привет, Хабр! Представьте: клиент отправил важный POST-запрос (например, создание заказа или списание денег), но из-за сетевого сбоя не получил ответ. Не зная, что на сервере операция уже выполнилась, клиент пробует повторить запрос. Если бэкенд не подготовлен к таким дублям, итог может быть печальным: мы создадим две одинаковые записи вместо одной или, хуже того, спишем деньги с пользователя два раза. Как этого избежать? Правильный ответ — реализовать идемпотентность в API. Смотреть реализацию

https://habr.com/ru/companies/otus/articles/960052/

#golang #Идемпотентность_API #Idempotency_Key #Защита_от_дубликатов #Обработка_повторных_запросов

Как сделать идемпотентные API в Go: Idempotency-Key, дедуп в Redis/БД и защита от гонок

Привет, Хабр! Представьте: клиент отправил важный POST‑запрос (например, создание заказа или списание денег), но из‑за сетевого сбоя не получил ответ. Не зная,...

Хабр

#mastodon_api #Idempotency_Key

if idempotency_duplicate then 404
----

重複トゥート防止の Idempotency-Key: <UNIQUE ID> ヘッダ。便利。
でも、すでに処理済みの場合は、リクエストすると 404 エラーになる。

普通に正常処理された時に返される JSON を返してくるのが API 的に良いと思うんだども。

issue にもあがってない。
https://github.com/tootsuite/mastodon/issues?utf8=%E2%9C%93&q=idempotency

これは、「その Idempotency Key 付きリクエストの URL は処理済みだから、ないよ」という解釈なのだろうか。

404 ってそういうもの?

暗黙のプロトコルに悩まされるなり

ここ↓で分岐してる気がするけど。ルビがふられてないから読めない(Rubyわからない)
https://github.com/tootsuite/mastodon/blob/master/app/services/post_status_service.rb#L29

tootsuite/mastodon

Your self-hosted, globally interconnected microblogging community - tootsuite/mastodon