コンテンツにスキップ

OpenAPI SDK


OpenAPI SDK は、さまざまな開発言語で Guance Open API を呼び出すために使用されます。SDK はモジュールごとにインターフェースをカプセル化し、URL の結合、DF-API-KEY 認証、リクエストパラメータのエンコード、共通レスポンス構造、SDK エラーを処理します。

現在の SDK リストは GitHub リポジトリへのエントリを提供しており、開発言語に応じて対応する SDK を選択できます。

開発言語 SDK 説明
Python Python SDK Guance OpenAPI 用 Python SDK
JavaScript / TypeScript JavaScript / TypeScript SDK Node.js 18+ / TypeScript SDK
Java Java SDK Guance OpenAPI 用 Java SDK
PHP PHP SDK PHP 8.1+ SDK

クイックスタート

以下の手順で準備を行うと、SDK を使用して Open API を呼び出せるようになります。

1 権限の確認

API Key の作成と管理には、ワークスペースの管理者または Owner 権限が必要です。最小権限の原則に従って API Key にロールを選択し、必要以上に権限を付与しないことを推奨します。

2 API Key の作成

  1. Guance ワークスペースにアクセスします。
  2. 左側のナビゲーションバーで管理 > API Key 管理をクリックします。
  3. 右上隅のKey を作成をクリックします。
  4. 名前、ロール、メモを設定します。
  5. 作成が成功したら、API Key の詳細ページに移動し、Key(シークレット)をコピーします。

詳細は「API Keys 管理」を参照してください。

3 Open API Endpoint の選択

SDK の初期化時には、Open API Endpoint を渡す必要があります。一般的な SaaS Endpoint は以下のとおりです。

https://openapi.guance.com

その他のサイトの Endpoint は「概要」を参照してください。プライベートデプロイメント版の場合は、実際にデプロイされた Endpoint を使用します。

4 環境変数の設定

まず Endpoint と API Key を環境変数に設定しておくことを推奨します。以降の各言語のサンプルでそのまま利用できます。

export DF_OPENAPI_ENDPOINT="https://openapi.guance.com"
export DF_API_KEY="ご自分の API Key に置き換えてください"

5 言語の選択と SDK の準備

git clone https://github.com/GuanceCloud/guance-sdk-py.git
cd guance-sdk-py
python3 -m pip install -e .
git clone https://github.com/GuanceCloud/guance-sdk-js.git
cd guance-sdk-js
node --version

SDK リポジトリには dist 成果物が含まれています。業務プロジェクトに統合する際は、リポジトリの README に従って @guance/openapi-sdk を使用してください。

git clone https://github.com/GuanceCloud/guance-sdk-java.git
cd guance-sdk-java
mvn test

ローカルの Maven リポジトリにインストールする場合は、以下を実行します。

mvn install
git clone https://github.com/GuanceCloud/guance-sdk-php.git
cd guance-sdk-php
composer dump-autoload

6 Client の初期化

Client の初期化時には、少なくとも Endpoint と API Key を渡す必要があります。

import os
from guance_openapi_sdk import Client

client = Client(
    api_key=os.environ["DF_API_KEY"],
    base_url=os.environ["DF_OPENAPI_ENDPOINT"],
    timeout=30,
)
import { Client } from "@guance/openapi-sdk";

const client = new Client({
  apiKey: process.env.DF_API_KEY,
  baseUrl: process.env.DF_OPENAPI_ENDPOINT,
  timeoutMs: 30_000,
});
Client client = new Client(
    System.getenv("DF_OPENAPI_ENDPOINT"),
    System.getenv("DF_API_KEY")
);
<?php

use Guance\OpenAPI\Client;

$client = new Client(
    baseUrl: getenv('DF_OPENAPI_ENDPOINT'),
    apiKey: getenv('DF_API_KEY'),
    timeoutSeconds: 30,
);

初回の呼び出し

初回の呼び出しは、読み取り専用のインターフェース、例えば「ダッシュボードリストの取得」を選択することを推奨します。このインターフェースは、Open API ドキュメントの「ダッシュボードリストの取得」に対応します。

GET /api/v1/dashboards/list?pageIndex=1&pageSize=10

SDK の呼び出し時には、ビジネスパラメータのみを渡す必要があります。DF-API-KEY は SDK が自動的にリクエストヘッダーに設定します。

response = client.board.list(query={"pageIndex": 1, "pageSize": 10})

print(response.content)
print(response.page_info)
print(response.trace_id)
const response = await client.board.list({
  query: { pageIndex: 1, pageSize: 10 },
});

console.log(response.content);
console.log(response.pageInfo);
console.log(response.traceId);
ApiResponseEnvelope response = client.board.list(
    RequestOptions.withQuery(Map.of("pageIndex", 1, "pageSize", 10))
);

System.out.println(response.contentJson);
System.out.println(response.pageInfo);
System.out.println(response.traceId);
$response = $client->board->list([
    'query' => ['pageIndex' => 1, 'pageSize' => 10],
]);

var_dump($response->content);
var_dump($response->pageInfo);
var_dump($response->traceId);

呼び出しが成功した場合、レスポンスの successtruecode200 となり、業務データは content に格納されます。

パラメータの指定方法

各インターフェースのドキュメントを読む際は、まずインターフェースタイトル下のリクエストメソッドとパスを確認し、次にパラメータの位置を確認します。Open API は GETPOST の 2 種類のリクエストメソッドのみを使用します。GET はデータのクエリと取得に、POST は作成、変更、削除などのデータ変更に使用されます。

API ドキュメント内のパラメータ位置 SDK パラメータ
Query パラメータ query {"pageIndex": 1, "pageSize": 10}
パスパラメータ path {"dashboard_uuid": "dsbd_xxxx32"}
Body パラメータ body {"name": "demo workspace"}
追加リクエストヘッダー headers {"X-Source": "internal-tool"}

Query パラメータ

Query パラメータは URL のクエリ文字列にエンコードされます。「ダッシュボードリストの取得」を例にします。

GET /api/v1/dashboards/list?pageIndex=1&pageSize=10
response = client.board.list(query={"pageIndex": 1, "pageSize": 10})
const response = await client.board.list({
  query: { pageIndex: 1, pageSize: 10 },
});
ApiResponseEnvelope response = client.board.list(
    RequestOptions.withQuery(Map.of("pageIndex", 1, "pageSize", 10))
);
$response = $client->board->list([
    'query' => ['pageIndex' => 1, 'pageSize' => 10],
]);

パスパラメータ

パスパラメータは、インターフェースパス内の変数を置き換えます。「指定ダッシュボードの取得」を例にします。

GET /api/v1/dashboards/{dashboard_uuid}/get
response = client.board.get(path={"dashboard_uuid": "dsbd_xxxx32"})
const response = await client.board.get({
  path: { dashboard_uuid: "dsbd_xxxx32" },
});
RequestOptions req = RequestOptions.create();
req.path.put("dashboard_uuid", "dsbd_xxxx32");
ApiResponseEnvelope response = client.board.get(req);
$response = $client->board->get([
    'path' => ['dashboard_uuid' => 'dsbd_xxxx32'],
]);

Body パラメータ

Body パラメータは POST リクエストで使用されます。「現在のワークスペースの変更」を例にします。

POST /api/v1/workspace/modify
response = client.workspace.modify(body={"name": "demo workspace"})
const response = await client.workspace.modify({
  body: { name: "demo workspace" },
});
RequestOptions req = RequestOptions.create();
req.bodyJson = "{\"name\":\"demo workspace\"}";
ApiResponseEnvelope response = client.workspace.modify(req);
$response = $client->workspace->modify([
    'body' => ['name' => 'demo workspace'],
]);

レスポンスの見方

Open API は統一されたレスポンス構造を使用します。主なフィールドは以下のとおりです。

フィールド 説明
code HTTP ステータスコードと一致するステータスコードを返します。エラーがない場合は固定で 200 です。
content 業務データ。具体的な型はインターフェースによって異なります。
pageInfo リストインターフェースのページネーション情報
errorCode エラーステータスコード。空の場合はエラーなしを示します。
message エラーの説明
success インターフェース呼び出しの成功/失敗
traceId リクエストのトレース ID。問題のトラブルシューティングに使用されます。

リストインターフェースは通常、contentpageInfo の両方を返します。例えば、pageInfo.totalCount は条件に一致するデータの総数を示します。

エラーの処理方法

SDK は Open API のエラーを、対応する言語の例外タイプにラップします。問題のトラブルシューティングを行う際は、まず HTTP ステータスコード、errorCodemessagetraceId を確認します。

from guance_openapi_sdk import ApiError

try:
    response = client.board.list(query={"pageIndex": 1, "pageSize": 10})
except ApiError as error:
    print(error.status)
    print(error.error_code)
    print(error.trace_id)
    print(error.envelope)
import { ApiError } from "@guance/openapi-sdk";

try {
  const response = await client.board.list({
    query: { pageIndex: 1, pageSize: 10 },
  });
} catch (error) {
  if (error instanceof ApiError) {
    console.log(error.status, error.errorCode, error.traceId);
    console.log(error.envelope);
  }
}
try {
    ApiResponseEnvelope response = client.board.list(
        RequestOptions.withQuery(Map.of("pageIndex", 1, "pageSize", 10))
    );
} catch (ApiException error) {
    System.out.println(error.httpStatus);
    System.out.println(error.errorCode);
    System.out.println(error.traceId);
    System.out.println(error.envelope.rawBody);
}
use Guance\OpenAPI\ApiException;

try {
    $response = $client->board->list([
        'query' => ['pageIndex' => 1, 'pageSize' => 10],
    ]);
} catch (ApiException $error) {
    echo $error->httpStatus . PHP_EOL;
    echo $error->errorCode . PHP_EOL;
    echo $error->traceId . PHP_EOL;
}

一般的なエラーと制限:

シナリオ 説明
API Key が無効 ft.InvalidAPIKey を返します
API Key レベルのレート制限 同一 API Key で 1 分間に最大 200 リクエスト。トリガーされると ft.TriggerApiAkCurrentLimiting を返します。
ワークスペースレベルのレート制限 同一ワークスペースで 1 分間に最大 1000 回の Open API 呼び出しをサポート。トリガーされると ft.TriggerApiWorkspaceCurrentLimiting を返します。

詳細は「共通レスポンス構造」、「共通エラー定義」、「使用制限」を参照してください。

データクエリの例

メトリクス、ログ、イベントなどのデータをクエリする必要がある場合は、DQL データクエリインターフェースを使用できます。DQL の構文については「DQL クエリ」を、インターフェースの説明については「DQL データクエリ」を参照してください。

以下は cpu メトリクスをクエリする例です。

response = client.query_data.query_data_v1(body={
    "queries": [
        {
            "qtype": "dql",
            "query": {
                "q": "M::`cpu`:(avg(`usage_idle`))",
                "timeRange": [1708911106000, 1708912906999],
                "interval": 10,
                "maxPointCount": 720,
                "tz": "Asia/Shanghai",
            },
        }
    ],
    "fieldTagDescNeeded": False,
})

print(response.content)
const response = await client.queryData.queryDataV1({
  body: {
    queries: [
      {
        qtype: "dql",
        query: {
          q: "M::`cpu`:(avg(`usage_idle`))",
          timeRange: [1708911106000, 1708912906999],
          interval: 10,
          maxPointCount: 720,
          tz: "Asia/Shanghai",
        },
      },
    ],
    fieldTagDescNeeded: false,
  },
});

console.log(response.content);
RequestOptions req = RequestOptions.create();
req.bodyJson = """
{
  "queries": [
    {
      "qtype": "dql",
      "query": {
        "q": "M::`cpu`:(avg(`usage_idle`))",
        "timeRange": [1708911106000, 1708912906999],
        "interval": 10,
        "maxPointCount": 720,
        "tz": "Asia/Shanghai"
      }
    }
  ],
  "fieldTagDescNeeded": false
}
""";

QueryDataContent content = client.queryData.queryDataV1Content(req);
System.out.println(content.data);
$response = $client->queryData->queryDataV1([
    'body' => [
        'queries' => [[
            'qtype' => 'dql',
            'query' => [
                'q' => 'M::`cpu`:(avg(`usage_idle`))',
                'timeRange' => [1708911106000, 1708912906999],
                'interval' => 10,
                'maxPointCount' => 720,
                'tz' => 'Asia/Shanghai',
            ],
        ]],
        'fieldTagDescNeeded' => false,
    ],
]);

var_dump($response->content);
注意

Open API でデータクエリを実行する場合、デフォルトで管理者ロールになりますが、データアクセスルールの制限を受ける可能性があります。

トラブルシューティングチェックリスト

初回の呼び出しが失敗した場合は、以下の順序で確認してください。

  1. DF_OPENAPI_ENDPOINT が現在のサイトに対応する Open API アドレスであるか。
  2. DF_API_KEY に、API Key 詳細ページの Key(シークレット) が正しく設定されているか(Key ID ではない)。
  3. API Key が所属するワークスペースが、クエリまたは変更対象のワークスペースであるか。
  4. API Key ロールが対象インターフェースに必要な権限を持っているか。
  5. Query、Path、Body パラメータが対応する SDK パラメータに正しく渡されているか。
  6. リストインターフェースに適切な pageIndexpageSize が設定されているか。
  7. API Key またはワークスペースレベルのレート制限がトリガーされていないか。
  8. エラー情報内の traceId が記録されているか(後続のトラブルシューティングに役立ちます)。

関連ドキュメント

フィードバック

このページは役に立ちましたか?