アルパカログ

プログラミングとマネジメントがメインです。時々エモいのも書きます。

GoでサイボウズガルーンのREST APIクライアントを書いた話

以前、ガルーンの予定をSlackからインタラクティブにリスケできるBotを作った話をしました。

このBotを作ったとき、実はガルーンのREST APIのGo向けクライアントがなかったので自作しているのですが、今日はその自作したガルーンREST APIクライアントの話をしたいと思います。

GitHubリポジトリは下記です。

JSONからのstruct定義はJSON-to-Goで

GoでAPIクライアントを書くときに最も面倒なのは、APIレスポンスに合わせて構造体を定義する作業です。

が、JSONから構造体定義を作ってくれるとても便利なサイトがあり、今回利用したのですが、ぜひみなさんも使ってください。

こんな便利なものを作ってくださってありがとうございます。

依存関係管理はdepが便利

パッケージの依存関係管理ツールはdepが便利です。Rubyで言うところのbundler、Pythonで言うところのPipenvでしょうか。

dep ensure すると import 文を解析して依存パッケージを取得してくれます。

JSONのデコードにはstructのアドレスを渡す

先に構造体とJSONを定義しておいたおかげで、GoにおけるJSONのデコードは驚くほど簡単です。

デコード後に当てはめたいstructのアドレスを渡すだけです。structが不定のときはinterfaceにします。こんな感じです。

APIクライアントの場合、期待するレスポンスが返ってきているかどうか(エラーかどうか)はレスポンスステータスによって変わってくるので、ステータスコードによってデコードするstructを変えています。


サイボウズガルーンがどのくらいの会社で使われているかはちょっとわからないですが、もしバグや機能追加などありましたらGitHub IssueやPRお待ちしております。

参考にしたサイト