Interfejs API zapasów platformy Power Platform

Interfejs API spisu umożliwia wykonywanie zapytań strukturalnych względem usługi Azure Resource Graph przy użyciu żądania POST ze specyfikacją zapytania w treści żądania. Interfejs API tłumaczy specyfikację zapytania na język zapytań Kusto (KQL) do wykonania w usłudze Azure Resource Graph. Interfejs API spisu zasobów jest częścią dokumentacji referencyjnej interfejsu API platformy Power Platform. Aby uzyskać pełną listę typów zasobów i pól z możliwością wykonywania zapytań, zobacz Dokumentacja schematu spisu platformy Power Platform.

Authentication

Interfejs API spisu obecnie obsługuje tylko delegowane uwierzytelnianie użytkowników. Pobierz token elementu nośnego dla zalogowanego użytkownika przed wywołaniem interfejsu API.

Ważna

Interfejs API nie obsługuje uwierzytelniania wyłącznie aplikacji za pomocą nazwy głównej usługi ani tożsamości zarządzanej. Żądania używające tych tożsamości zwracają kod HTTP 403 Dostęp zabroniony.

Aby uzyskać instrukcje dotyczące konfigurowania tokenu, zobacz Uwierzytelnianie i używanie delegowanego przepływu użytkownika. Przepływ jednostki usługi opisany w tym artykule nie dotyczy interfejsu API spisu.

Korzystanie z interfejsu CLI platformy Power Platform (wersja zapoznawcza)

Zapytania dotyczące zasobów spisu można uruchamiać z poziomu terminalu za pomocą polecenia pac resource-query query-resources w wersji zapoznawczej. Polecenie akceptuje treść żądania zapytania JSON bezpośrednio lub z pliku.

Punkt końcowy interfejsu API


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

Treść żądania

Treść żądania musi zawierać specyfikację zapytania z następującą strukturą:

Struktura żądań kwerend

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

Properties

Majątek Typ Wymagane Description
TableName ciąg Yes Docelowa tabela/typ zasobu do zapytania (tj. "PowerPlatformResources")
Clauses macierz Yes Tablica klauzul zapytania definiujących operacje do wykonania
Options obiekt No Opcje zapytań usługi Azure Resource Graph dla stronicowania i kontroli wyników

Opcje zapytań

Obiekt Options obsługuje parametry zapytania Azure Resource Graph dla stronicowania i kontroli wyników. Zobacz ResourceQueryRequestOptions dokumentację , aby dowiedzieć się więcej.

Obsługiwane klauzule zapytania

Interfejs API obsługuje typy klauzul wyróżnione w tej sekcji za pomocą serializacji polimorficznej JSON. Każdy typ klauzuli odpowiada operatorom KQL, jak opisano w dokumentacji języka KQL:

Klauzula Where

Filtruje dane na podstawie warunków pól. Przekłada się na operator KQLwhere.

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

Obsługiwane operatory: Interfejs API obsługuje wszystkie standardowe operatory porównania I ciągów języka KQL. Aby uzyskać pełną listę dostępnych operatorów, zobacz dokumentację operatorów ciągów KQL i operatorów liczbowych .

Example:

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

Przekłada się na KQL:| where type in~ ('microsoft.powerapps/canvasapps', 'microsoft.copilotstudio/agents')

Klauzula projektu

Wybiera określone pola z wyników. Przekłada się na operator KQLproject.

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

Example:

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

Przekłada się na KQL:| project name, properties.displayName, environmentId = tostring(properties.environmentId), createdDate = properties.createdAt

Weź klauzulę

Ogranicza liczbę zwracanych wyników. Przekłada się na operator KQLtake.

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

Przekłada się na KQL:| take 50

Klauzula Order by

Sortuje wyniki według określonych pól. Przekłada się na operator KQLsort.


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

Example:

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

Przekłada się na KQL:| sort by tostring(properties.createdAt) desc, properties.displayName asc

Odrębna klauzula

Zwraca unikatowe wartości dla określonych pól. Przekłada się na operator KQLdistinct.


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

Przekłada się na KQL:| distinct field1, field2

Klauzula zliczająca

Zwraca liczbę pasujących rekordów. Przekłada się na operator KQLcount.

{
  "$type": "count"
}

Przekłada się na KQL:| count

Klauzula Podsumowująca

Agreguje dane przy użyciu operacji count lub argmax. Przekłada się na operator KQLsummarize.

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

Obsługiwane operatory:

  • count count() → — zlicz rekordy pogrupowane według określonych pól.
  • argmax arg_max() → — pobierz rekordy o maksymalnej wartości w określonym polu.

Przykład liczenia:

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

Przekłada się na KQL:| summarize resourceCount = count() by resourceGroup, type

Przykład ArgMax:

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

Przekłada się na KQL:| summarize arg_max(createdTime, *) by resourceGroup

Rozszerz klauzulę

Dodaje obliczone kolumny do wyników. Przekłada się na operator KQLextend.

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

Example:

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

Przekłada się na KQL:| extend environmentId = tostring(properties.environmentId)https://docs.microsoft.com/en-us/azure/data-explorer/kusto/query/scalarfunctions) dla dostępnych funkcji.

Klauzula Join

Łączy z inną tabelą/podzapytaniem. Przekłada się na operator KQLjoin.


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

Obsługiwane rodzaje sprzężenia: Interfejs API obsługuje wszystkie rodzaje sprzężenia KQL. Aby uzyskać pełną listę dostępnych typów sprzężeń i ich zachowanie, zobacz dokumentację operatora sprzężenia KQL.

Przykład (dołączanie zasobów platformy Power Platform z informacjami o środowisku):

{
  "$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"
}

Przekłada się 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

Kompletne przykłady zapytań

Przykład: Podstawowe zapytanie dotyczące zasobów platformy Power Platform (domyślny wzorzec centrum administracyjnego platformy Power Platform)

Pobierz wszystkie zasoby platformy Power Platform z informacjami o środowisku — jest to domyślne zapytanie używane przez centrum administracyjne platformy 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"
      }
    }
  ]
}

Odpowiednik 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

Przykład: zlicz zasoby platformy Power Platform według typu i lokalizacji

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

Odpowiednik KQL:

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

Przykład: proste zapytanie aplikacji kanwy

Pobierz aplikacje canvas z podstawowym filtrowaniem i projekcją.

{
  "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
    }
  ]
}

Odpowiednik KQL:

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

Przykład: filtrowanie zasobów według środowiska i zakresu dat

{
  "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"
      }
    }
  ]
}

Przekłada się 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

Format odpowiedzi

Interfejs API zwraca obiekt ResourceQueryResult z zestawu Azure Resource Graph SDK. Ten obiekt zawiera wyniki zapytania i metadane dotyczące wykonywania zapytania.

Struktura odpowiedzi:

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