使用 Power Apps 检查器 Web API
Power Apps 检查器 Web API 提供了一种机制,用于根据 Microsoft Dataverse 平台的自定义项和扩展来运行静态分析检查。 创建者和开发人员可以使用它根据一组最佳实践规则对解决方案执行各种静态分析检查,以快速确定这些问题模式。 此服务提供 Power Apps 开发者门户中的 解决方案检查器功能的逻辑,属于提交给 AppSource 的应用程序的自动化任务的一部分。 通过这种方式直接与服务进行交互,可以分析内部部署(所有受支持的版本)和在线环境中包含的解决方案。
有关从 PowerShell 代码中使用检查器服务的信息,请参考使用 PowerShell 解决方案。
备注
- 使用 Power Apps 检查器并不能保证能够成功导入解决方案。 针对解决方案执行的静态分析检查不知道目标环境的配置状态,导入是否成功可能取决于环境中的其他解决方案或配置。
备用方法
在阅读有关如何在最低级别与 Web API 交互的详细信息之前,请考虑使用我们的 PowerShell 模块, Microsoft.PowerApps.Checker.PowerShell 的 Widget 来获取。 这是一款完全受支持的工具,可在 PowerShell Gallery 中找到。 现在的限制是需要 Windows PowerShell。 如果不能满足这个要求,那么直接与 API 交互是最好的方法。
开始
值得注意的是,解决方案分析可能会导致长时间运行。 通常可能需要六十 (60) 秒到五 (5) 分钟以上的时间,具体取决于各种因素,例如自定义和代码的数量、大小和复杂性。 分析流程多步骤的异步流程,其首先启动一个分析作业,并使用状态 API 查询作业的完成情况。 下面是分析的示例流程:
- 获取 OAuth 令牌
- 调用上载(针对每个并行文件)
- 调用分析(启动分析作业)
- 调用状态,直到完成(调用之间通过暂停循环,直到发出结束信号或达到阈值)
- 从提供的 SAS URI 下载结果
下面是一些变化形式:
- 包含查找规则集或规则(以提前步骤形式)。 但是,通过配置的或硬编码的规则集 ID 传递的速度可能略快。 建议使用可满足需要的规则集。
- 可以选择不使用上载机制(有关限制,请参阅上载)。
您需要确定以下要求:
有关各 API 的文档,请参考以下文章:
检索规则集列表
检索规则列表
上传文件
调用分析
检查分析状态
确定地域
当您与 Power Apps 检查器服务交互时,文件会与生成的报告一起临时存储在 Azure 中。 可使用地域特定的 API 控制数据的存储位置。 到地理位置终结点的请求将根据最佳性能(请求者延迟)路由到区域实例。 当请求进入区域服务实例后,所有正在处理和保留的数据将保留在该特定区域。 在分析作业发送到特定区域后,某些 API 响应将返回后续请求的区域实例 URL。 在任何给定的时间点,每个地区都可能部署了不同版本的服务。 使用不同的服务版本是由于多阶段安全部署过程,这确保了完整的版本兼容性。 因此,在分析生命周期中每个 API 调用都应使用相同的地理位置,这可能减少总执行时间,因为数据可能不必穿越整个线路。 下面是可用地域:
Azure 数据中心 | 客户 | 地区 | 基 URI |
---|---|---|---|
公共 | 预览 | 美国 | unitedstatesfirstrelease.api.advisor.powerapps.com |
公共 | 生产 | 美国 | unitedstates.api.advisor.powerapps.com |
公共 | 生产 | 欧洲 | europe.api.advisor.powerapps.com |
公共 | 生产 | 亚洲 | asia.api.advisor.powerapps.com |
公共 | 生产 | 澳大利亚 | australia.api.advisor.powerapps.com |
公共 | 生产 | 日本 | japan.api.advisor.powerapps.com |
公共 | 生产 | 印度 | india.api.advisor.powerapps.com |
公共 | 生产 | 加拿大 | canada.api.advisor.powerapps.com |
公共 | 生产 | 南美洲 | southamerica.api.advisor.powerapps.com |
公共 | 生产 | 英国 | unitedkingdom.api.advisor.powerapps.com |
公共 | 生产 | 法国 | france.api.advisor.powerapps.com |
公用 | 生产 | 德国 | germany.api.advisor.powerapps.com |
公用 | 生产 | 阿拉伯联合酋长国 | unitedarabemirates.api.advisor.powerapps.com |
公用 | 生产 | 瑞士 | switzerland.api.advisor.powerapps.com |
公用 | 生产 | 南非 | southafrica.api.advisor.powerapps.com |
公用 | 生产 | 韩国 | korea.api.advisor.powerapps.com |
公用 | 生产 | 挪威 | norway.api.advisor.powerapps.com |
公用 | 生产 | 新加坡 | singapore.api.advisor.powerapps.com |
公用 | 生产 | 瑞典 | sweden.api.advisor.powerapps.com |
公用 | 生产 | US Government | gov.api.advisor.powerapps.us |
公共 | 生产 | US Government L4 | high.api.advisor.powerapps.us |
公共 | 生产 | US Government L5 (DOD) | mil.api.advisor.appsplatform.us |
公共 | 生产 | 由世纪互联在中国运营 | china.api.advisor.powerapps.cn |
备注
可以选择使用预览版地域提前合并最新功能和更改。 但是请注意,预览版仅使用美国 Azure 区域。
版本控制
虽然不是必需的,但建议在所需的 API 版本中包含 API 版本查询字符串参数。 规则集和规则的当前 API 版本是 2.0,所有其他请求的 API 版本是 1.0。 例如,以下规则集是一个指定使用 2.0 API 版本的 HTTP 请求:
https://unitedstatesfirstrelease.api.advisor.powerapps.com/api/ruleset?api-version=2.0
如果没有提供,则默认使用最新的 API 版本。 建议使用显式版本号,因为如果引入重大更改,版本会增加。 如果在请求中指定了版本号,后续(编号更大)版本中将保持后向兼容性支持。
规则集和规则
Power Apps 检查器在运行时需要规则列表。 这些规则可以以单个规则或一组规则(称为规则集)的形式提供。 可以通过规则集方便地指定一组规则,而不必分别指定每个规则。 例如,解决方案检查器功能使用名为解决方案检查器的规则集。 随着新规则的添加或删除,服务会自动包含这些更改,而无需消费应用程序进行任何更改。 如果需要不按照上面的说明自动更改规则列表,可以分别指定规则。
规则集可以不受限制地包含一个或多个规则。 规则可以不属于规则集,也可以属于多个规则集。 可以按照下面的方法调用 API 来获取所有规则集的列表:[Geographical URL]/api/ruleset
。 此端点现在需要身份验证。
解决方案检查器规则集
此解决方案检查器规则集中包含一组存在影响力的规则,这些规则的误报率有限。 如果针对现有解决方案运行分析,建议您从该规则集开始。 此规则集由解决方案检查器功能使用。
AppSource 证书规则集
在 AppSource 中发布应用程序时,必须认证应用程序。 发布的 AppSource 应用程序需要满足高质量标准。 AppSource 认证规则集包含解决方案检查器规则集的一部分规则,以及确保仅在商店上发布高质量应用程序的其他规则。 一些 AppSource 认证规则更容易出现误报,可能需要更多的关注来解决。
查找租户 ID
需要租户的 ID 才能与需要令牌的 API 交互。 有关如何获得租户 ID 的详细信息,请参阅本文。 也可以使用 PowerShell 命令检索租户 ID。 以下示例应用了 AzureAD 模块中的 cmdlets。
# Login to Microsoft Entra ID as your user
Connect-AzureAD
# Establish your tenant ID
$tenantId = (Get-AzureADTenantDetail).ObjectId
租户 ID 是从 Get-AzureADTenantDetail
检索的 ObjectId
属性值。 也可以在使用 Connect-AzureAD cmdlet 登录后在 cmdlet 输出中看到该值。 在这种情况下,它将被命名为 TenantId
。
身份验证和授权
查询规则和规则集不需要 OAuth 令牌,但所有其他 API 都需要令牌。 这些 API 支持通过调用需要令牌的任何 API 进行授权发现。 响应是一个未经授权的 HTTP 状态代码 401,带有 WWW-Authenticate 标头、授权 URI 和资源 ID。 还应在 x-ms-tenant-id
标头中提供租户 ID。 有关详细信息,请参阅 Power Apps 检查器身份验证和授权。 以下是从 API 请求返回的响应标头的示例:
WWW-Authenticate →Bearer authorization_uri="https://login.microsoftonline.com/0082fff7-33c5-44c9-920c-c2009943fd1e", resource_id="https://api.advisor.powerapps.com/"
获得此信息后,可以选择使用 Microsoft 身份验证库(MSAL)或其他机制来获取令牌。 下面是如何使用 C# 和 MSAL .NET 库实现这一点的示例:
// Substitute your own environment URL here.
string resource = "https://<env-name>.api.<region>.dynamics.com";
// Example Microsoft Entra app registration.
// For your custom apps, you will need to register them with Microsoft Entra ID yourself.
// See https://docs.microsoft.com/powerapps/developer/data-platform/walkthrough-register-app-azure-active-directory
var clientId = "51f81489-12ee-4a9e-aaae-a2591f45987d";
var redirectUri = "http://localhost"; // Loopback required for the interactive login.
var authBuilder = PublicClientApplicationBuilder.Create(clientId)
.WithAuthority(AadAuthorityAudience.AzureAdMultipleOrgs)
.WithRedirectUri(redirectUri)
.Build();
var scope = resource + "/.default";
string[] scopes = { scope };
AuthenticationResult tokenResult =
await authBuilder.AcquireTokenInteractive(scopes).ExecuteAsync();
有关完整的工作代码,请参阅 Web API 快速入门示例。
获得令牌后,建议您在请求生命周期中为后续调用提供相同的令牌。 然而,出于安全原因,更多的请求可能需要获取新令牌。
传输安全性
对于同类最佳的加密,检查器服务仅支持使用传输层安全性 (TLS) 1.2 及更高版本的通信。 有关 TLS 的 .NET 最佳实践的说明,请参阅采用 .NET Framework 的传输层安全性 (TLS) 最佳实践。
报告格式
解决方案分析的结果为 zip 文件,其中包含标准 JSON 格式的一个或多个报告。 此报告格式基于静态分析结果,称为静态分析结果交换格式 (SARIF)。 可使用工具来查看 SARIF 文档和与这些文档交互。 有关详细信息,请访问此网站。 该服务使用第二版 OASIS 标准。