7つの入金外部サービスと連携して分かった実践的な”状態管理”設計パターン3選

決済・配送・eKYCなど、実装コストがかかる複雑な機能開発では、一部にSaaSを利用することあります。SaaSを利用する際には、自社側と相手側の両方でデータ状態を持ち、適切に同期することで処理を進めます。自社DB内だけにデータが存在する場合と比べて、複数システム間でのデータ管理は難易度がぐっと上がります。皆様の中でも、複数システム間でデータ不整合が起きたり、APIのリクエスト数とレコード数の不一致などの問題に直面したことがある方はいらっしゃるのではないでしょうか?

私が開発している家計簿プリカ B/43でも入出金にSaaSを利用しています。特にサービスの特性上、幅広い入金手段に対応することがUX向上に繋がるため、これまで7種類の入金手段に対応してきました。それぞれの手段で細部が異なるため、テーブル設計やコントローラーの作りは違うものの、大きく分けると「リアルタイム同期型」、「予約型」、「完全非同期型」の3つに分類することができます。

決済・入出金といった機能はお金を扱う性質上、一つの実装ミスによるデータ不整合がユーザーの損失に直結するため、細心の注意を払いながら実装しています。このセッションでは、可能な限り安全なシステムを構築するためのTIPSとして、パターン毎に必要なテーブル設計上の要件、バリデーションの実装方法、不整合に対する監視・リカバリの仕組みについて紹介します。

アバター画像:Shohei Mitani
Shohei Mitani

株式会社スマートバンク バックエンドエンジニア