💡
tdGoというTreasure DataのSDKを作った
今あるtd-client-goが長年メンテされてないので、一から新しいSDKを作りました。
なんで作ったか
既存のtd-client-goだと以下の問題があった
- Contextが使えない
- 全てMapに一度変換されている
- 長いことメンテナンスされておらず、新規追加されたAPIに対応するものがない
また最終的にはワンバイナリで利用可能なCLI Toolを作りたいという思惑もあり、Goを採用しました。
使い方
clientの生成方法
import "github.com/mickeey2525/tdGo"
client, err := tdGo.NewClient("your-api-key", "https://api.treasuredata.com")
if err != nil {
log.Fatalf("Failed to create tdGo client: %s", err)
}
URLの指定をtd-client-goに比べて簡単にしました。
ちなみにtd-client-goは以下のように書く必要があります。
type Endpoint struct {
endpoint string
}
func (e Endpoint) Route(s string) string {
return e.endpoint
}
func main() {
endpoint := route{region: "api.treasuredata.co.jp"}
client, err := td_client.NewTDClient(td_client.Settings {
ApiKey: "Your API Key",
Router: endpoint,
})
if err != nil {
log.Fatalf("Something went wrong when you create TD Clinet instance: %s", err)
}
var jobOptions = td_client.ListJobsOptions{}
jobOptions.WithStatus("queued")
jl, err := client.ListJobsWithOptions(&jobOptions)
fmt.Println(jl)
if err != nil {
log.Fatalf("Something went wrong during get queued jobs: %s",err)
}
list := jl.Count
fmt.Println(list)
}
httpclientのOptionの設定方法
また今回は楽をするためにhttpclientにrestyを採用しているのですが、WithHttpClientで設定ができるようにしてあります。
resClient := resty.New()
resClient.SetTimeout(1 * time.Minute)
apikey := os.Getenv("TD_API_KEY")
client, err := tdGo.NewClient(apikey, "https://api.treasuredata.com", tdGo.WithHttpClient(resClient))
if err != nil {
log.Fatalln(err)
}
対応しているREST API
なるべくここに記載のREST APIに対応するようにしています。
今後について
気力が尽きてテストを書いていないものもあるのでテストを書こうと思っています。
またコードないコメントも足りないため適宜書いていく予定です。
将来的にはWorkflow APIやCDP APIについても対応する予定です。
Discussion