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. 03导入 PBIX 和导出报表
  4. 04嵌入令牌生成示例
  5. 05工作区扫描与活动审计

适用场景

  1. 01自动刷新语义模型并查看历史
  2. 02将 PBIX 导入指定工作区
  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/,工作区上下文的基 URL 为 https://api.powerbi.com/v1.0/myorg/groups/{workspaceId}/。

身份验证

服务主体(推荐用于自动化)
  1. 在 Azure AD 中注册应用: Azure 门户 > 应用注册 > 新注册
  2. 创建客户端机密: 证书和机密 > 新建客户端机密
  3. 授予 Power BI 权限: API 权限 > 添加 > Power BI Service
  4. 在 Power BI 管理员中启用: 租户设置 > 允许服务主体使用 API > 添加安全组
  5. 将 SP 添加到工作区: 工作区 > 访问权限 > 将应用添加为成员或参与者

获取访问令牌:

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 和成员关系
导入/imports上传 PBIX/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 端点参考,包含所有参数、响应架构和错误代码

评论

支持 Markdown