Go

GoでのWebAPIプロキシサーバ開発で取り組んだこと

More than 1 year has passed since last update.

この記事は Go3 Advent Calendar 2017 8日目の記事の予定でしたが、出遅れてしまいました。
穴埋めしてくださった @qt_luigi さんありがとうございました :bow:

せっかくなので、今回書いたものは野に放っておこうと思います。

背景

SQUEEZEでは複数のプロダクトからある外部APIにPythonでリクエストを行なっていたのですが、以下の理由からGoでWebAPIプロキシサーバを開発しました。

  • 統一された問い合わせ方法が欲しい
  • パフォーマンスを上げたい

この記事では、そこでの取り組みをまとめておきたいと思います。

ライブラリ選定

開発にあたって、まずはライブラリ選定を行いました。
web frameworkとO/R mapperを選ぶにあたって、以下の観点でライブラリの調査・比較検討を行いました。

この調査結果をもとに、仕様・納期・メンバーの成熟度をふまえてライブラリの選定を行いました。最終的に選ばれたのは、echodbrでした。

ちなみに選定の進め方については、技術採択のときにやるべきこと - まるまるこふこふの記事がとても参考になりました。

パッケージ構成

先日の Goのパッケージ構成の失敗遍歴と現状確認 – timakin – Medium でも取り上げられていますが、パッケージ構成については同じく悩みました。

プロトタイプなどでいくつかの設計を試してから、上記の記事でいうところの「第1ケース: プロジェクトルートに展開する」を基本的な方針として採用しました。

理由としては、

  • そこまでの規模の開発ではなかった
  • シンプルな設計のほうが開発しやすい
  • レイヤ化や分割などの検討は、つらくなってからはじめて考えればいいとした

が挙げられます。

個人的にも、全体の規模を小さく保ってファイルはフラットに書いていくのがGoらしくて好きだなーと感じてます。

API Clientの実装

SDKが用意されていない外部APIの複数のエンドポイントにリクエストを投げる必要があったので、HTTPリクエストを抽象化するAPI Clientの実装を行いました。

この実装にあたっては、以下の記事がめちゃくちゃ勉強になりました。

特にSymmetric API Testingという、実際のリクエストを投げないで行えるテスト手法は知らなかったのでありがたかったです。