Rozhraní API inventáře Power Platform

Rozhraní API inventáře umožňuje spouštět strukturované dotazy v Azure Resource Graphu pomocí požadavku POST se specifikací dotazu v textu požadavku. Rozhraní API přeloží specifikaci dotazu do dotazovacího jazyka Kusto (KQL) pro spouštění v Azure Resource Graphu. Rozhraní API inventáře pro prostředky je součástí referenční dokumentace k rozhraní API platformy Power Platform. Úplný seznam typů prostředků a dotazovatelných polí najdete v referenčních informacích ke schématu inventáře Power Platform.

Authentication

Rozhraní API pro inventář v současné době podporuje pouze delegované ověřování uživatele. Před voláním rozhraní API získejte nosný token pro přihlášeného uživatele.

Important

Rozhraní API nepodporuje ověřování pouze aplikací prostřednictvím instančního objektu nebo spravované identity. Požadavky, které používají tyto identity, vracejí stav HTTP 403 Forbidden.

Pokyny k nastavení tokenu najdete v tématu Ověřování a použití delegovaného toku uživatele. Tok instančního objektu popsaný v daném článku se nevztahuje na rozhraní API pro inventář.

Použijte Power Platform CLI (Preview verze)

Dotazy na prostředky inventáře můžete spouštět z terminálu pomocí příkazu Preview pac resource-query query-resources . Příkaz přijme text požadavku JSON přímo nebo ze souboru.

Koncový bod rozhraní API


POST {PowerPlatformAPI url}/resourcequery/resources/query?api-version=2024-10-01

Text požadavku

Tělo požadavku musí obsahovat specifikaci dotazu s následující strukturou:

Struktura požadavku dotazu

{
  "TableName": "string",
  "Clauses": [
    {
      "$type": "clause_type",
      // clause-specific properties
    }
  ],
  "Options": {
    "Top": 100,
    "Skip": 0,
    "SkipToken": "string"
  }
}

Vlastnosti

Vlastnictví Typ Povinné Description
TableName řetězec Ano Cílová tabulka nebo typ prostředku k dotazování (tj. "PowerPlatformResources")
Clauses pole Ano Pole klauzulí dotazu, které definují operace, které se mají provést
Options objekt Ne Možnosti dotazů Azure Resource Graphu pro stránkování a řízení výsledků

Možnosti dotazu

Objekt Options podporuje parametry dotazu Azure Resource Graph pro stránkování a řízení výsledků. Další informace najdete ResourceQueryRequestOptions v dokumentaci .

Podporované klauzule dotazu

Rozhraní API podporuje typy klauzulí zvýrazněné v této části prostřednictvím polymorfní serializace JSON. Každý typ klauzule odpovídá operátorům KQL, jak je uvedeno v odkazu KQL:

Klauzule Where

Filtruje data na základě podmínek pole. Převádí se na operátor KQL where.

{
  "$type": "where",
  "FieldName": "string",
  "Operator": "string",
  "Values": ["string1", "string2"]
}

Podporované operátory: Rozhraní API podporuje všechny standardní porovnávací a řetězcové operátory KQL. Úplný seznam dostupných operátorů najdete v dokumentaci k řetězcovým operátorům KQL a číselným operátorům .

Příklad:

{
  "$type": "where",
  "FieldName": "type",
  "Operator": "in~",
  "Values": ["'microsoft.powerapps/canvasapps'", "'microsoft.copilotstudio/agents'"]
}

Překládá se na KQL:| where type in~ ('microsoft.powerapps/canvasapps', 'microsoft.copilotstudio/agents')

Klauzule Projectu

Vybere z výsledků konkrétní pole. Převádí se na operátor KQL project.

{
  "$type": "project",
  "FieldList": ["field1", "field2", "field3"]
}

Příklad:

{
  "$type": "project",
  "FieldList": [
    "name", 
    "properties.displayName", 
    "environmentId = tostring(properties.environmentId)",
    "createdDate = properties.createdAt"
  ]
}

Překládá se na KQL:| project name, properties.displayName, environmentId = tostring(properties.environmentId), createdDate = properties.createdAt

Klauzule Take

Omezí počet vrácených výsledků. Převádí se na operátor KQL take.

{
  "$type": "take",
  "TakeCount": 50
}

Překládá se na KQL:| take 50

Klauzule Order by

Seřadí výsledky podle zadaných polí. Převádí se na operátor KQL sort.


{
  "$type": "orderby",
  "FieldNamesAscDesc": {
    "field1": "asc",
    "field2": "desc"
  }
}

Příklad:

{
  "$type": "orderby",
  "FieldNamesAscDesc": {
    "tostring(properties.createdAt)": "desc",
    "properties.displayName": "asc"
  }
}

Překládá se na KQL:| sort by tostring(properties.createdAt) desc, properties.displayName asc

Jedinečná klauzule

Vrátí jedinečné hodnoty pro zadaná pole. Převádí se na operátor KQL distinct.


{
  "$type": "distinct",
  "FieldList": ["field1", "field2"]
}

Překládá se na KQL:| distinct field1, field2

Počítací klauzule

Vrátí počet odpovídajících záznamů. Převádí se na operátor KQL count.

{
  "$type": "count"
}

Překládá se na KQL:| count

Klauzule Summarize

Agreguje data pomocí operací count nebo argmax. Převádí se na operátor KQL summarize.

{
  "$type": "summarize",
  "SummarizeClauseExpression": {
    "OperatorName": "count|argmax",
    "OperatorFieldName": "string",
    "FieldList": ["field1", "field2"]
  }
}

Podporované operátory:

  • count count() → – Počet záznamů seskupených podle zadaných polí
  • argmax arg_max() → – Získání záznamů s maximální hodnotou v zadaném poli

Příklad počítání:

{
  "$type": "summarize",
  "SummarizeClauseExpression": {
    "OperatorName": "count",
    "OperatorFieldName": "resourceCount",
    "FieldList": ["resourceGroup", "type"]
  }
}

Překládá se na KQL:| summarize resourceCount = count() by resourceGroup, type

Příklad ArgMax:

{
  "$type": "summarize",
  "SummarizeClauseExpression": {
    "OperatorName": "argmax",
    "OperatorFieldName": "createdTime",
    "FieldList": ["resourceGroup"]
  }
}

Překládá se na KQL:| summarize arg_max(createdTime, *) by resourceGroup

Rozšířit klauzuli

Přidá do výsledků vypočítané sloupce. Převádí se na operátor KQL extend.

{
  "$type": "extend",
  "FieldName": "newFieldName",
  "Expression": "KQL_EXPRESSION"
}

Příklad:

{
  "$type": "extend",
  "FieldName": "environmentId",
  "Expression": "tostring(properties.environmentId)"
}

Překládá se na KQL:| extend environmentId = tostring(properties.environmentId)https://docs.microsoft.com/en-us/azure/data-explorer/kusto/query/scalarfunctions) pro dostupné funkce.

Klauzule Join

Spojí s jinou tabulkou nebo poddotazem. Převádí se na operátor KQL join.


{
  "$type": "join",
  "RightTable": {
    "TableName": "string",
    "Clauses": []
  },
  "JoinKind": "string",
    "LeftColumnName": "string",
  "RightColumnName": "string"
}

Podporované druhy spojení: Rozhraní API podporuje všechny druhy spojení KQL. Úplný seznam dostupných typů spojení a jejich chování najdete v dokumentaci operátora připojení KQL.

Příklad (připojování prostředků Power Platform s informacemi o prostředí):

{
  "$type": "join",
  "JoinKind": "leftouter",
  "RightTable": {
    "TableName": "PowerPlatformResources",
    "Clauses": [
      {
        "$type": "where",
        "FieldName": "type",
        "Operator": "==",
        "Values": ["'microsoft.powerplatform/environments'"]
      },
      {
        "$type": "project",
        "FieldList": [
          "environmentId = name",
          "environmentName = properties.displayName",
          "environmentRegion = location",
          "environmentType = properties.environmentType",
          "isManagedEnvironment = properties.isManaged"
        ]
      }
    ]
  },
  "LeftColumnName": "environmentId",
  "RightColumnName": "environmentId"
}

Překládá se na KQL:| join kind=leftouter (PowerPlatformResources | where type == 'microsoft.powerplatform/environments' | project environmentId = name, environmentName = properties.displayName, environmentRegion = location, environmentType = properties.environmentType, isManagedEnvironment = properties.isManaged) on $left.environmentId == $right.environmentId

Kompletní příklady dotazů

Příklad: Základní dotaz na prostředky Power Platform (výchozí vzor Centra pro správu Power Platform)

Získejte všechny prostředky Power Platform s informacemi o prostředí – toto je výchozí dotaz používaný centrem pro správu Power Platform.

{
  "Options": {
    "Top": 1000,
    "Skip": 0,
    "SkipToken": ""
  },
  "TableName": "PowerPlatformResources",
  "Clauses": [
    {
      "$type": "extend",
      "FieldName": "joinKey",
      "Expression": "tolower(tostring(properties.environmentId))"
    },
    {
      "$type": "join",
      "JoinKind": "leftouter",
      "RightTable": {
        "TableName": "PowerPlatformResources",
        "Clauses": [
          {
            "$type": "where",
            "FieldName": "type",
            "Operator": "==",
            "Values": ["'microsoft.powerplatform/environments'"]
          },
            {
            "$type": "project",
            "FieldList": [
              "joinKey = tolower(name)",
              "environmentName = properties.displayName",
              "environmentRegion = location",
              "environmentType = properties.environmentType",
              "isManagedEnvironment = properties.isManaged"
            ]
          }
        ]
      },
      "LeftColumnName": "joinKey",
      "RightColumnName": "joinKey"
    },
    {
      "$type": "where",
      "FieldName": "type",
      "Operator": "in~",
      "Values": [
        "'microsoft.powerapps/canvasapps'",
        "'microsoft.powerapps/modeldrivenapps'",
        "'microsoft.powerautomate/cloudflows'",
        "'microsoft.copilotstudio/agents'",
        "'microsoft.powerautomate/agentflows'",
        "'microsoft.powerapps/codeapps'",
        "'microsoft.powerapps/apps'"
      ]
    },
    {
      "$type": "orderby",
      "FieldNamesAscDesc": {
        "tostring(properties.createdAt)": "desc"
      }
    }
  ]
}

Ekvivalentní KQL:

PowerPlatformResources
| extend joinKey = tolower(tostring(properties.environmentId))
| join kind=leftouter (
    PowerPlatformResources
    | where type == 'microsoft.powerplatform/environments'
    | project joinKey = tolower(name), environmentName = properties.displayName, environmentRegion = location, environmentType = properties.environmentType, isManagedEnvironment = properties.isManaged
  ) on $left.joinKey == $right.joinKey
| where type in~ ('microsoft.powerapps/canvasapps', 'microsoft.powerapps/modeldrivenapps', 'microsoft.powerautomate/cloudflows', 'microsoft.copilotstudio/agents', 'microsoft.powerautomate/agentflows', 'microsoft.powerapps/codeapps', 'microsoft.powerapps/apps')
| order by tostring(properties.createdAt) desc

Příklad: Počítejte prostředky Power Platform podle typu a umístění

{
  "TableName": "PowerPlatformResources",
  "Clauses": [
    {
      "$type": "summarize",
      "SummarizeClauseExpression": {
        "OperatorName": "count",
        "OperatorFieldName": "resourceCount",
        "FieldList": ["type", "location"]
      }
    },
    {
      "$type": "orderby",
      "FieldNamesAscDesc": {
        "resourceCount": "desc"
      }
    }
  ]
}

Ekvivalentní KQL:

PowerPlatformResources
| summarize resourceCount = count() by type, location
| sort by resourceCount desc

Příklad: Jednoduchý dotaz v aplikaci plátna

Získejte plátěné aplikace se základním filtrováním a zobrazením:

{
  "TableName": "PowerPlatformResources",
  "Clauses": [
    {
      "$type": "where",
      "FieldName": "type",
      "Operator": "==",
      "Values": ["'microsoft.powerapps/canvasapps'"]
    },
    {
      "$type": "project",
      "FieldList": [
        "name",
        "location",
        "properties.displayName",
        "properties.createdAt",
        "properties.environmentId"
      ]
    },
    {
      "$type": "take",
      "TakeCount": 100
    }
  ]
}

Ekvivalentní KQL:

PowerPlatformResources
| where type == 'microsoft.powerapps/canvasapps'
| project name, location, properties.displayName, properties.createdAt, properties.environmentId
| take 100

Příklad: Filtrování prostředků podle prostředí a časového období

{
  "TableName": "PowerPlatformResources",
  "Clauses": [
    {
      "$type": "where",
      "FieldName": "type",
      "Operator": "==",
      "Values": ["'microsoft.powerapps/canvasapps'"]
    },
    {
      "$type": "where",
      "FieldName": "properties.environmentId",
      "Operator": "==",
      "Values": ["your-environment-id"]
    },
    {
      "$type": "extend",
      "FieldName": "createdDate",
      "Expression": "todatetime(properties.createdAt)"
    },
    {
      "$type": "where",
      "FieldName": "createdDate",
      "Operator": ">=",
      "Values": ["datetime(2024-01-01)"]
    },
    {
      "$type": "project",
      "FieldList": [
        "name",
        "properties.displayName",
        "properties.createdAt",
        "properties.createdBy",
        "properties.ownerId"
      ]
    },
    {
      "$type": "orderby",
      "FieldNamesAscDesc": {
        "createdDate": "desc"
      }
    }
  ]
}

Překládá se na KQL:

PowerPlatformResources
| where type == 'microsoft.powerapps/canvasapps'
| where properties.environmentId == "your-environment-id"
| extend createdDate = todatetime(properties.createdAt)
| where createdDate >= datetime(2024-01-01)
| project name, properties.displayName, properties.createdAt, properties.createdBy, properties.ownerId
| sort by createdDate desc

Formát odpovědi

Rozhraní API vrátí objekt ResourceQueryResult ze sady SDK Azure Resource Graph. Tento objekt obsahuje výsledky dotazu a metadata o provádění dotazu.

Struktura odpovědi:

{
  "totalRecords": 1250,
  "count": 50,
  "resultTruncated": 1,
  "skipToken": "string_for_next_page",
  "data": [
    // Array of result objects based on your query
  ]
}