mcpField
R
rest-api-automation

rest-api-automation

github.com/josiahsiegelデータ・データベース5992 回インストール19 週間前に更新
リポジトリ

rest-api-automation について

Power BI の自動化と管理に使う REST API スキルです。認証、セマンティックモデルやレポートの操作、埋め込み、テナント管理の例をまとめています。

主な機能

  1. 01サービスプリンシパル認証の解説
  2. 02モデル更新とパラメーター管理
  3. 03PBIX のインポートとレポートのエクスポート
  4. 04埋め込みトークン生成例
  5. 05ワークスペースのスキャンとアクティビティ監査

活用シーン

  1. 01モデルの更新を自動化して履歴を確認する
  2. 02PBIX をワークスペースにインポートする
  3. 03レポートの埋め込みトークンを生成する
  4. 04ワークスペース資産をスキャンして操作を監査する

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/josiahsiegel/claude-plugin-marketplace --skill rest-api-automation

インストール後、Claude Code で/rest-api-automationを入力して読み込まれたか確認します。

同梱ファイルreferences/api-endpoints-complete.md

詳細

Power BI REST API と自動化

概要

Power BI REST API を使用すると、埋め込み、管理、データセット管理、自動化をプログラムから実行できます。ベース URL は、ユーザーコンテキストの場合は https://api.powerbi.com/v1.0/myorg/、ワークスペースコンテキストの場合は https://api.powerbi.com/v1.0/myorg/groups/{workspaceId}/ です。

認証

サービスプリンシパル(自動化に推奨)
  1. Azure AD にアプリを登録します: Azure Portal > App registrations > New registration
  2. クライアントシークレットを作成します: Certificates & secrets > New client secret
  3. Power BI のアクセス許可を付与します: API permissions > Add > Power BI Service
  4. Power BI 管理者で有効にします: Tenant settings > Allow service principals to use APIs > セキュリティグループを追加
  5. ワークスペースに SP を追加します: Workspace > Access > アプリをメンバーまたは共同作成者として追加

アクセストークンを取得:

curl -X POST "https://login.microsoftonline.com/{tenantId}/oauth2/v2.0/token" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "grant_type=client_credentials&client_id={clientId}&client_secret={secret}&scope=https://analysis.windows.net/powerbi/api/.default"

PowerShell:

$body = @{
    grant_type    = "client_credentials"
    client_id     = $clientId
    client_secret = $clientSecret
    scope         = "https://analysis.windows.net/powerbi/api/.default"
}
$token = (Invoke-RestMethod -Uri "https://login.microsoftonline.com/$tenantId/oauth2/v2.0/token" `
    -Method Post -Body $body).access_token
マスターユーザー(レガシー、非推奨)

ユーザー名とパスワードのグラントを使用して、実際のユーザーアカウントで認証します。Pro/PPU ライセンスが必要です。MFA や条件付きアクセスに関する問題の影響を受けます。本番環境では使用しないでください。

API の操作グループ

グループベースパス用途
データセット/datasetsセマンティックモデルの管理、更新、パラメーターの管理
レポート/reportsレポートの取得、複製、エクスポート、再バインド
ダッシュボード/dashboardsダッシュボードとタイルの取得
グループ(ワークスペース)/groupsワークスペースの CRUD、メンバーシップ
インポート/importsPBIX/XLSX ファイルのアップロード
パイプライン/pipelinesデプロイパイプラインの自動化
管理者/adminテナント全体の操作(スキャナー、アクティビティ)
埋め込みトークン/GenerateToken埋め込みトークンの作成
ゲートウェイ/gatewaysゲートウェイとデータソースの管理
データフロー/dataflowsデータフローの管理
アプリ/appsアプリの管理
容量/capacities容量の管理
目標/goalsスコアカードと目標

一般的な API 操作

セマンティックモデルを更新する
POST https://api.powerbi.com/v1.0/myorg/groups/{workspaceId}/datasets/{datasetId}/refreshes
Authorization: Bearer {token}
Content-Type: application/json

{
  "notifyOption": "MailOnFailure",
  "retryCount": 2,
  "type": "Full",
  "commitMode": "transactional",
  "applyRefreshPolicy": true
}

拡張更新(テーブル/パーティションの選択):

{
  "type": "Full",
  "commitMode": "transactional",
  "objects": [
    { "table": "Sales", "partition": "Sales_Current" },
    { "table": "Products" }
  ]
}
更新履歴を取得する
GET https://api.powerbi.com/v1.0/myorg/groups/{workspaceId}/datasets/{datasetId}/refreshes?$top=10
PBIX ファイルをインポートする
POST https://api.powerbi.com/v1.0/myorg/groups/{workspaceId}/imports?datasetDisplayName=SalesReport&nameConflict=CreateOrOverwrite
Authorization: Bearer {token}
Content-Type: multipart/form-data

[PBIX file as form data]

Python:

import requests

url = f"https://api.powerbi.com/v1.0/myorg/groups/{workspace_id}/imports"
params = {"datasetDisplayName": "SalesReport", "nameConflict": "CreateOrOverwrite"}
headers = {"Authorization": f"Bearer {token}"}

with open("SalesReport.pbix", "rb") as f:
    response = requests.post(url, params=params, headers=headers,
        files={"file": ("SalesReport.pbix", f, "application/octet-stream")})
レポートをファイルにエクスポートする
# Initiate export
POST https://api.powerbi.com/v1.0/myorg/groups/{workspaceId}/reports/{reportId}/ExportTo
{
  "format": "PDF",
  "powerBIReportConfiguration": {
    "pages": [
      { "pageName": "ReportSection1" }
    ],
    "defaultBookmark": { "name": "BookmarkName" }
  }
}

# Poll for completion
GET https://api.powerbi.com/v1.0/myorg/groups/{workspaceId}/reports/{reportId}/exports/{exportId}

# Download when status is "Succeeded"
GET https://api.powerbi.com/v1.0/myorg/groups/{workspaceId}/reports/{reportId}/exports/{exportId}/file

対応形式: PDF、PPTX、PNG、XLSX、CSV、XML、MHTML、IMAGE、ACCESSIBLEPDF

データセットのパラメーターを更新する
POST https://api.powerbi.com/v1.0/myorg/groups/{workspaceId}/datasets/{datasetId}/Default.UpdateParameters
{
  "updateDetails": [
    { "name": "ServerName", "newValue": "prod-server.database.windows.net" },
    { "name": "DatabaseName", "newValue": "ProdDB" }
  ]
}
データセットの所有権を引き継ぐ
POST https://api.powerbi.com/v1.0/myorg/groups/{workspaceId}/datasets/{datasetId}/Default.TakeOver
データソースの資格情報を更新する
PATCH https://api.powerbi.com/v1.0/myorg/gateways/{gatewayId}/datasources/{datasourceId}
{
  "credentialDetails": {
    "credentialType": "OAuth2",
    "credentials": "{\"credentialData\":[{\"name\":\"accessToken\",\"value\":\"...\"}]}",
    "encryptedConnection": "Encrypted",
    "encryptionAlgorithm": "None",
    "privacyLevel": "Organizational"
  }
}

プッシュデータセット(リアルタイム)

リアルタイムダッシュボード向けに、API 経由でデータセットを作成し、データをプッシュします:

# Create push dataset
POST https://api.powerbi.com/v1.0/myorg/groups/{workspaceId}/datasets
{
  "name": "RealTimeMetrics",
  "defaultMode": "Push",
  "tables": [
    {
      "name": "Metrics",
      "columns": [
        { "name": "Timestamp", "dataType": "DateTime" },
        { "name": "Sensor", "dataType": "String" },
        { "name": "Value", "dataType": "Double" },
        { "name": "Status", "dataType": "String" }
      ]
    }
  ]
}

# Push rows
POST https://api.powerbi.com/v1.0/myorg/groups/{workspaceId}/datasets/{datasetId}/tables/Metrics/rows
{
  "rows": [
    { "Timestamp": "2026-04-03T10:30:00Z", "Sensor": "Temp-01", "Value": 23.5, "Status": "Normal" },
    { "Timestamp": "2026-04-03T10:30:00Z", "Sensor": "Temp-02", "Value": 45.2, "Status": "Warning" }
  ]
}

# Clear table
DELETE https://api.powerbi.com/v1.0/myorg/groups/{workspaceId}/datasets/{datasetId}/tables/Metrics/rows

埋め込みトークン(Power BI Embedded)

レポートの埋め込みトークンを生成する
POST https://api.powerbi.com/v1.0/myorg/groups/{workspaceId}/reports/{reportId}/GenerateToken
{
  "accessLevel": "View",
  "identities": [
    {
      "username": "[email protected]",
      "roles": ["RegionManager"],
      "datasets": ["{datasetId}"]
    }
  ]
}
複数の項目のトークンを生成する
POST https://api.powerbi.com/v1.0/myorg/GenerateToken
{
  "datasets": [
    { "id": "{datasetId}" }
  ],
  "reports": [
    { "id": "{reportId}", "allowEdit": false }
  ],
  "targetWorkspaces": [
    { "id": "{workspaceId}" }
  ],
  "identities": [
    {
      "username": "[email protected]",
      "roles": ["ViewerRole"],
      "datasets": ["{datasetId}"]
    }
  ]
}
JavaScript SDK による埋め込み
<div id="reportContainer" style="height:600px;"></div>
<script src="https://cdn.jsdelivr.net/npm/powerbi-client/dist/powerbi.min.js"></script>
<script>
  const embedConfig = {
    type: 'report',
    id: reportId,
    embedUrl: embedUrl,
    accessToken: embedToken,
    tokenType: models.TokenType.Embed,  // Use Embed for app-owns-data
    settings: {
      panes: {
        filters: { visible: false },
        pageNavigation: { visible: true }
      },
      bars: { statusBar: { visible: false } }
    }
  };

  const container = document.getElementById('reportContainer');
  const report = powerbi.embed(container, embedConfig);

  // Token refresh handler
  report.on('tokenExpired', async () => {
    const newToken = await fetchNewToken();  // Call your backend
    await report.setAccessToken(newToken);
  });

  // Event handlers
  report.on('loaded', () => console.log('Report loaded'));
  report.on('rendered', () => console.log('Report rendered'));
  report.on('error', (event) => console.error(event.detail));
</script>

管理者 API

ワークスペースをスキャンする(インベントリ)
# Initiate scan
POST https://api.powerbi.com/v1.0/myorg/admin/workspaces/getInfo
{
  "workspaces": ["{workspaceId1}", "{workspaceId2}"],
  "datasetExpressions": true,
  "datasetSchema": true,
  "datasourceDetails": true,
  "getArtifactUsers": true
}

# Get scan results
GET https://api.powerbi.com/v1.0/myorg/admin/workspaces/scanResult/{scanId}
アクティビティイベント(監査)
GET https://api.powerbi.com/v1.0/myorg/admin/activityevents?startDateTime='2026-04-01T00:00:00Z'&endDateTime='2026-04-02T00:00:00Z'&$filter=Activity eq 'ViewReport'
テナント内のすべてのデータセットを一覧表示する
GET https://api.powerbi.com/v1.0/myorg/admin/datasets?$top=100

その他のリソース

参照ファイル
  • references/api-endpoints-complete.md -- すべてのパラメーター、レスポンススキーマ、エラーコードを含む API エンドポイントの完全なリファレンス

コメント