取引登録APIでリトライ処理を行った際のべき等性担保の方法

カテゴリ: POS
https://api.smaregi.dev/{契約ID}/pos/transactions

上記、取引き登録APIに関して、 transactionUuid が重複した場合エラーが返るようになっていると思います。

売上データを登録するときに、ネットワーク切断などが発生した場合、リトライ処理を行おうと思っているのですが、すでに登録済みの取引きかどうかを判定するにはどのようにするのがよいでしょうか?

重複時のエラーは

{
 "type":"about:blank", 
 "title":"Bad Request", 
 "detail":"指定されたレシート番号は既に登録済みです。",
 "status": 400
}

の様になっていると思いますが、重複エラーの識別に使えそうな情報が detail の日本語文字列しかありません。

APIの仕様にこの文字列は表記されていないため、今後この文字列が変更されないことは保証されていないと思っています。

detail 以外の情報を使って重複エラーを検知する方法はありませんか?あるいは detail の文字列は互換性が保証されていますか?

もし、エラーを識別できるような情報が含まれていないのであれば、type を使ったり、別のフィールドをJSONに生やすなどして機械的に処理ができるようにしていただけると幸いです。

答え

  • @morikuni

    detail 以外の情報を使って重複エラーを検知する方法はありませんか?

    リトライの際に、重複エラーを検知することは難しいかと存じます。

    あるいは detail の文字列は互換性が保証されていますか?

    保証することは出来かねます。


    代替案としてお伝えできることは、取引一覧取得APIを利用して登録できているか確認する方法になります。