四半期に一回行っているFedExを今回も行いました。
今回実装したのは表題にもあるようにWebhook機能になります。
zaicoのお客様の中には既に保有している基幹システムと繋げて在庫連動を行いたいという要望が以前からありました。
従来の方法・問題点
これまでは公開APIを使って定期的に全ての在庫データを取得するというやり方だったのですが在庫数が数万以上になってくるとAPIを呼び出す方も受ける方も負荷が高くなってしまうという問題がありました。
Webhookによる改善
そこでWebhookを使って数量が変化したというイベントが発生した時のみ予め実装していただいたお客様のサーバーに対してPOSTしますのでそれを元に在庫連動の処理をしていただくというものになります。
シンプルで扱いやすいGo言語
実装面の話をすると Rails → SNS → SQS → Lambda という形でシンプルに実装しています。
Webhook自体がベータ版ということもあり、機能提供を優先し設計はかなりシンプルなものになっています。今後、多くのお客様にご利用いただけるような状態になりましたら見直す形になるかと思います。
Lambda部分については Go で実装しました。
一部の機能ではRailsをLambdaで動かしているものもありますがRailsをLambdaで動かすとコールドスタート時に非常に遅いのが悩みでした。今回はDBとの通信などがほぼ発生しないのでシンプルにGoで実装してみました。
最後に仕事でGoを使ったのは7年くらい前だったのでリハビリにもちょうどよい規模のものになりました。
簡単に疎通確認ができるシミュレータ
zaico内の設定画面でレスポンスが正常かどうかをその場で判断できるシミュレータも今回実装しました。
ちょっとした手間ですが組み込む際には役立つかと思います。
まとめ
今回のFedExは他タスクの対応もあったりで結構忙しかったですが、集中して行う事ができました。
また、以前から要望はあったけど当時はリソースが足りなくて着手できなかった機能の1つをまた実装出来たのは良かったです。
シンプルなアプリケーションの実装言語としてGoが少しでも広まってくれると嬉しいなと思います。
Webhookの詳細につきましては下記のヘルプページを参照ください。
https://support.zaico.co.jp/hc/ja/articles/4408374655257