2018の23日目の記事です。APIでは、sourceという概念を通じて多様な決済方法を抽象化して表現しています。このsourceの概念がEC系Webサービス*1を開発している人間としては興味深いものだったので紹介します。sourceとはStripe公式のリソースは次のあたりのものです。stripe.comstripe.comsourceは多様な決済方法を取り扱うために導入されている概念です。sourceの状態がchargeable(課金可能)になると、買い手に対してcharge(課金)することができます。詳しく説明すると、sourceは買い手が決済するために使う「モノ」を抽象化した概念であると言えます。その具象としては、クレジットカードやACH(銀行振込のようなもの)があります。1回きりの決済としてsourceに対して直接課金することもできますし、買い手に対して複数回課金するために買い手にsourceを関連付けておくこともできます。stripe.comたとえばクレジットカードであれば、JS経由でStripeへ直接カード情報を送信後にsourceのIDを得たあと、次のようにAPIを叩くと買い手へのsourceの関連付けと課金を実行できます。ID>sourceを特徴づける四つの性質Stripeはsourceに対して次のような四つの性質を定義しています。これらの性質を使ってさまざまなsourceを分類しています。pull/push決済時の資金の移動方法です。送金後にsourceがchargeableになるflow買い手が決済を承認するための行動フローです。これを通過するとsourceがchargeableになります。verification銀行口座など送金元口座の所有者であることを検証するreceiver買い手が送金するsourceに送金先情報を含むusagesourceが何回使えるかを表します。reusable一度flowを通ったあとは追加でchargeできるsourcesourceをcustomerに関連付けて、customerに対して課金することで実現single_use決済するたびに買い手の明示的な同意が必要なsourcesourceに対して直接課金するsynchronous/asynchronous課金の結果がいつ得られるかを表します。上述した性質を用いると、sourceの具象である決済方法は次のように分類できます。クレジットカードpull/none/reusable/synchronous買い手に紐づけておけば、売り手が何度も課金できるACH(銀行振込のようなもの)push/receiver/reusable/asynchronous買い手の入金操作が必要、かつ数日かかる(らしい)その他の決済方法についても、Stripeのドキュメントで表がまとめてあります。sourceの利点このあたりから私見が入ります。Stripeのsourceの利点は次のようなところだと思います。Webhookによる結果の確認、という流れになっています。決済が複数あることで複雑化しそうな部分を適切な抽象化で吸収し、統一的なインタフェースとして提供できていることがわかります。二つ目については、このsourceを用いた決済の抽象化方法を使うと、新しく導入する決済をsourceのインタフェースに載せやすくなります。Payや楽天PayのようないわゆるID決済や日本でよく使われる*2後払いについて考えてみます。これらの決済をsourceの性質で分類すると、おおよそ次のようになると思います。買い手がコンビニなどから明示的に送金し、決済ごとに買い手の承認が必要で、与信に人手を介する場合は結果が出るのに時間がかかるこのように複数の性質を用いて特徴を決定することで、新しい具象に対しても、類似する性質の既存決済と同じフローに載せやすくなっています。APIにおいて多様な決済をうまく扱うための概念であるsourceについて紹介しました。APIをサーバサイドで実装する際にデータモデリングがどうなるかを考えると、なかなかおもしろいのではと思っています。APIについて知りました。引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。