アルパカログ

Webエンジニア兼マネージャーがプログラミングやマネジメント、読んだ本のまとめを中心に書いてます。

サイボウズガルーン Go言語向けREST APIクライアントを書きました

f:id:otoyo0122:20200910090103p:plain:w200

以前、サイボウズガルーンの予定をSlackからインタラクティブにリスケできるBotを作ったのですが、このとき実はガルーンのREST APIクライアントを自作しました。

このエントリでは、自作したガルーン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お待ちしております。

参考サイト