2017年8月5日土曜日

Golangの Redash APIクライアントライブラリを作りました

Redash の Rest api をラップするGolang ライブラリを書きました。

GolangからRedashクライアントを使いたいときは使ってみてください。

今後機能追加するとしたら、cli化だと思います。セッション管理機能を持ったcliを作って一般的なDB clientのようにredashを使えればかなり便利だと思います。

https://github.com/ynishi/redash

  • インストール

    go get github.com/ynishi/redash
  • 実装機能
    • Client(Get/Post/Deleteを実行)
    • Queries系API

Redash

今年に入って仕事でOSSのBIツール、Redashを使う機会がありました。

Redashの特徴は、豊富なDB連携と、ほとんど全ての機能がAPI経由でできることです。 (Redashの構成自体そうなっている)

API利用は、オフィシャルに推奨されています。 特にドキュメントはなく、サポートに問い合わせたところ、ソースコードを見て是非使ってくださいとのことでした。

仕事の案件ではサーバにDBクライアントの追加が厳しい環境 だったので、Redashを経由してデータを取得しました。

DB連携が限定的でよければ、Airbnbが作ったツールがあります。画面の作りこみと、権限管理などがRedashよりよさそうです。 superset

Golang

Golangのライブラリはなかったので、作ることにしました。

仕事でもGolangの導入を画策しているので、テスト、ドキュメンテーション、ライブラリ管理なども含めて一通り用意しました。

APIクライアントについて

  • GolangでAPIクライアントを実装
  • http://deeeet.com/writing/2016/11/01/go-api-client/

開発にあたって

とにかく参考になるのが、本家日本語版ドキュメントです。

実際にコードを書く際には必須のEffective Goですが、本家は英語版のみです。

日本語訳は、有志の方によるものがいくつかあります。少し古いですが日本語で読めるのはありがたいです。

このページにまとまってますGo言語の初心者が見ると幸せになれる場所 #golang

プロジェクトの開始

  • 上記のGoの書き方 が参考になります。
    • ディレクトリ構成は github.comなどと密接に結びついた構成になってます。
    • GOPATHdirenv使GOPATHは固定にして、その中にリポジトリを置く方がよさそう。
    • $GOPATH内にリポジトリ本体を置いて、他の場所には、シンボリックリンクを張る構成に落ち着きました。
  • 自動テスト
    • 開発環境の自動コンパイル・テストは標準ツールはありません。godoなどを使います。
    • Goglandなら、コンパイルエラーは随時検知できます。
    • travis, werker, CircleCI, droneなど各種CIサービスで公式サポートされてます。簡単に設定できるので、最初にしておく方がいいです。
  • リポジトリタグ
    • githubのリポジトリタグ => 公式に合わせて go に。

ツール

  • vim-go
  • [Gogland(IDE)](https://www.jetbrains.com/go/)
    • 最初は便利
    • debuggerが使えないなど一部難あり
    • $GOPATH内に置いたリポジトリを取り込む(または、$GOPATH/../自分のアカウントディレクトリ/をとりこむ)

ドキュメンテーション

  • godocに合わせて作成。
    • 基本パッケージ、公開するものにコメントを書けばOkです。
    • ライセンス表記は、ファイルの一番上に書いて空行を入れてからパッケージコメントを書くとgodocに表示されません。
    • Exampleテストを書けばそれが表示されます。
  • GoDoc hostの登録方法
    • インポートするパッケージ名を一度検索します。

      //↓これで検索
      github.com/ynihsi/redash
    • 次からはキーワード検索でマッチします。

      //↓これでひっかかる
      redash

ライブラリ管理

  • 公式ツール dep があります。
    • まだ開発中で標準ツールに取り込まれてはいません。
    • (2017/7現在)設定ファイルは固まったようでプロダクションuse OKになりましたが、まだAPIは変わる可能性があります。
  • glideなど各種ツールがあります。
  • パッケージ名でバージョン管理する方法があります(これまで公式依存管理ツールがなかったため)
  • Golangの設計として安定する傾向が強いです(mapのキャストが手間で結局構造体とインターフェイスを使うなど)

よきGolang & Redash ライフを!

0 件のコメント:

コメントを投稿