自社開発
外部 API 連携と日本語全文検索
外部のデータ API から取り込んだ情報を、日本語で検索できる Web アプリです。取り込みバッチの安全性と、検索の精度に力を入れました。
構成
クライアント
- WebReact 19 / TypeScript / Vite / Tailwind CSS
サーバー
- APIGo(標準の net/http)
- 取り込みバッチGo(CLI)
データ
- DBMySQL 8.4(ngram 全文検索)
- マイグレーションgolang-migrate
技術的なポイント
- 冪等な取り込み — 何度実行しても結果は同じです。古いデータは、全件の取り込みが成功したときにだけ削除します。途中で失敗しても、データは消えません。
- API の制限への対応
- トークンバケットで、リクエストの速度を制限しています。
- 制限されたときは Retry-After に従い、サーバーエラーのときは間隔を延ばしながらやり直します(指数バックオフ)。
- 外部 API のページ数の上限を超えるときは、期間で分けて取り直します。
- 日本語の全文検索 — MySQL の ngram 全文検索でフレーズを探します。1 文字だけの検索は LIKE に切り替えます。SQL を組み立てる処理は純関数に切り出して、単体テストしています。