Go

OpenAPI Specificationから生成 されたGo用クライアントライブラリを使用するサンプルを示します。 サンプル内の path/to/autogenerated では、生成されたライブラリのパスを指定してください。

APIトークンを使用してAPIにアクセスする

以下のコードでは、APIトークンを使用して認証を行います。その後、認証したユーザー自身の情報を取得します。

実行時には以下を指定してください。

  • baseURL: 接続先intdash APIのベースURL

  • apiToken: ユーザーのAPIトークン(APIトークンはMy Pageで作成できます)

package main

import (
     "context"
     "flag"
     "fmt"

     intdash "path/to/autogenerated"
)

func main() {
     var (
             baseURL  string
             apiToken string
     )

     flag.StringVar(&baseURL, "baseURL", "http://localhost:8080/api", "")
     flag.StringVar(&apiToken, "apiToken", "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "")

     flag.Parse()

     // Setup Configuration
     cfg := intdash.NewConfiguration()
     cfg.Servers = intdash.ServerConfigurations{{URL: baseURL}}
     cfg.DefaultHeader["X-Intdash-Token"] = apiToken

     // Create Client
     cli := intdash.NewAPIClient(cfg)
     ctx := context.Background()

     me, _, err := cli.AuthMeApi.GetMe(ctx).Execute()
     if err != nil {
             panic(err)
     }
     fmt.Printf("Hello %s", me.Name)
}

OAuth2トークンを使用してAPIにアクセスする

以下のコードでは、OAuth2トークンを使って認証を行います。

実行時には以下を指定してください。

  • baseURL: 接続先intdash APIのベースURL

  • clientID: エッジのUUID

  • clientSecret: エッジの作成時に発行されるクライアントシークレット

package main

import (
     "context"
     "flag"
     "fmt"

     intdash "path/to/autogenerated"
     "golang.org/x/oauth2"
     "golang.org/x/oauth2/clientcredentials"
)

func main() {
     var (
             baseURL      string
             clientID     string
             clientSecret string
     )
     flag.StringVar(&baseURL, "baseURL", "http://localhost:8080/api", "")
     flag.StringVar(&clientID, "clientID", "00000000-0000-0000-0000-000000000000", "")
     flag.StringVar(&clientSecret, "clientSecret", "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "")

     flag.Parse()

     ctx := context.Background()
     c := clientcredentials.Config{
             ClientID:     clientID,
             ClientSecret: clientSecret,
             TokenURL:     fmt.Sprintf("%s/%s", baseURL, "/auth/oauth2/token"),
             AuthStyle:    oauth2.AuthStyleInParams,
     }

     // Setup Configuration
     cfg := intdash.NewConfiguration()
     cfg.Servers = intdash.ServerConfigurations{{URL: baseURL}}
     cfg.HTTPClient = c.Client(ctx)

     // Create Client
     cli := intdash.NewAPIClient(cfg)

     // Omitted
}

過去の計測のデータポイントを取得する

データポイントの取得を行う場合、自動生成されたコードはそのままでは使用できません。 生成されたコードを以下のコマンドで修正します。

$ sed -i -e "s/**os.File/*os.File/g" ./intdash/api_meas_data_points.go
$ sed -i -e "s/r.body = &body/r.body = body/g" ./intdash/api_meas_data_points.go

そのうえで、以下のようにデータポイントを取得します。

cli := ...
ctx := context.Background()

resp, _, err := cli.MeasDataPointsApi.ListProjectDataPoints(ctx, uuid.Nil.String()).Name(measUUID).TimeFormat("ns").Execute()
if resp != nil {
 defer os.Remove(resp.Name())
 defer resp.Close()
}
if err != nil {
     panic(err)
}

rd := bufio.NewScanner(resp)
rd.Buffer([]byte{}, 65535)
for rd.Scan() {
     var dp intdash.DataPoint
     if err := json.Unmarshal(rd.Bytes(), &dp); err != nil {
             panic(err)
     }
     fmt.Printf("%+v\n", time.Unix(0, *dp.DataPointNormal.Time.Int64).UTC().Format(time.RFC3339Nano))
}