Mastodon API で二重トゥートを防ぐ簡単な方法(Idempotency-Key で重複投稿防止)
重複投稿/二重投稿を防ぎたい
マストドン API を利用時、トゥートの投稿に失敗した際のリトライで重複投稿するのを避けたい。
例えば、500 系のエラー発生やネットワークの問題などでタイムアウトした場合のリトライで、「Mastodon 側の反応が悪いことによる重複投稿」をしないようにポカよけしたい。
- マストドンとは1
TL; DR (今北産業)
Mastodon のトゥート API は
idempotency
(冪等)に対応しています。
リクエスト・ヘッダーに "Idempotency-Key: <UNIQUE ID>
" を含めると、同じ <UNIQUE ID>
のトゥートは1つのみが適用されます。
curl -X POST \
-d 'status=Hello%20Qiitadon%21' \
-d 'visibility=unlisted' \
--header 'Authorization: Bearer <YOUR ACCESS TOEKN>' \
--header 'Idempotency-Key: <UNIQUE ID>' \
-sS https://qiitadon.com/api/v1/statuses
注意: 同じ Idempotency-Key
で処理済み(トゥート済み)の場合は HTTP/1.1 404 Not Found
エラーが返ってきます。
TS; DR
Note: In order to prevent duplicate statuses, this endpoint accepts an
Idempotency-Key
header, which should be set to a unique string for each new status. In the event of a network error, a request can be retried with the sameIdempotency-Key
. Only one status will be created regardless of how many requests with the sameIdempotency-Key
did go through.See https://stripe.com/blog/idempotency for more on idempotency and idempotency keys.
("Posting a new status" | Statuses | API overview | Mastodon 公式 API @ より)
▼ 筆者訳
注:
statuses
(以下トゥート)の重複を防ぐために、このエンドポイントはIdempotency-Key
ヘッダーを受け入れます。このヘッダーには、新しいトゥートごとに一意の文字列を設定する必要があります。ネットワークエラーが発生した場合は、同じIdempotency-Key
でリクエストを再試行できます。同じIdempotency-Key
のリクエストがいくつ通過したかにかかわらず、トゥートは1つだけ作成されます。
Idempotency
およびIdempotency-Key
についての詳細は、https://stripe.com/blog/idempotency を参照してください。
Qiita の SNS「Qiitadon」(Qiita のマストドン・サーバー)で、時報をトゥートする BOT があるのですが、サーバーやネットワークの混雑からか、たまに失敗することがあります。
失敗した場合はリトライをするのですが、重複を避けるためにリトライ前に API で投稿済みのトゥートを調べていました。
BOT のリファクタをしようと API のドキュメントを眺めていたら、いつのまにか(2018/03 には)新規トゥートの重複投稿に関する注意書きが追加されていて、しかも 2017 年 3 月にはこの重複投稿の予防は実装されていました。
気づくの遅いよっ!! バシッ
-
マストドンとは、ミニブログ・タイプの SNS の一種で、そのプログラムおよびサービスを指します。Facebook や twitter のように、1社もしくは1つのサーバー(ドメイン)に依存する「中央集権型 SNS」と異なり、共通のプロトコルを持ったサーバー間で通信を行う「連合型 SNS」の1つです。マストドン・サーバー間だけでなく、ActivityPub と呼ばれる共通のプロトコルを使ったサーバーであれば通信できます。ちなみに Qiita の SNS である Qiitadon はマストドンを使っています。
「マストドン」@ Wikipedia
マストドン公式サイト ↩
Author And Source
この問題について(Mastodon API で二重トゥートを防ぐ簡単な方法(Idempotency-Key で重複投稿防止)), 我々は、より多くの情報をここで見つけました https://qiita.com/KEINOS/items/a1f49ad0852f7c33d3d7著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .