Compartilhar via


Como usar a API REST do IoT Central para gerenciar a exportação de dados

A API REST do IoT Central permite que você desenvolva aplicativos cliente que se integram aos aplicativos do IoT Central. Você pode usar a API REST para criar e gerenciar exportação de dados em seu aplicativo do IoT Central.

Cada chamada à API REST do IoT Central exige um cabeçalho de autorização. Para saber mais, confira Como autenticar e autorizar chamadas à API REST do IoT Central.

Para obter a documentação de referência da API REST do IoT Central, confira Referência da API REST do Azure IoT Central.

Dica

Você pode usar o Postman para experimentar as chamadas à API REST descritas neste artigo. Baixe a coleção do Postman do IoT Central e importe-a para o Postman. Na coleção, você precisará definir variáveis como o subdomínio do aplicativo e o token de administrador.

Para saber como gerenciar a exportação de dados usando a interface do usuário do IoT Central, consulte Exportar dados de IoT para o Armazenamento de Blobs.

Exportação de dados

É possível usar o recurso de exportação de dados do IoT Central para transmitir telemetria, alterações de propriedade, eventos de conectividade do dispositivo, eventos de ciclo de vida do dispositivo e eventos de ciclo de vida do modelo de dispositivo para destinos como Hubs de Eventos do Azure, Barramento de Serviço do Azure, Armazenamento de Blobs do Azure e pontos de extremidade de webhook.

Cada definição de exportação de dados pode enviar dados para um ou mais destinos. Crie as definições de destino antes de criar a definição de exportação.

Criar ou atualizar um destino

Use a seguinte solicitação para criar ou atualizar uma definição de destino:

PUT https://{your app subdomain}/api/dataExport/destinations/{destinationId}?api-version=2022-10-31-preview

destinationId é uma ID exclusiva para o destino.

O exemplo a seguir mostra um corpo de solicitação que cria um destino de Armazenamento de BLOBs:

{
  "displayName": "Blob Storage Destination",
  "type": "blobstorage@v1",
  "connectionString": "DefaultEndpointsProtocol=https;AccountName=yourAccountName;AccountKey=********;EndpointSuffix=core.windows.net",
  "containerName": "central-data"
}

O corpo da solicitação tem alguns campos obrigatórios:

  • displayName: Nome de exibição do destino.
  • type: Tipo de objeto de destino. Uma opção entre blobstorage@v1, dataexplorer@v1, eventhubs@v1, servicebusqueue@v1, servicebustopic@v1 ou webhook@v1.
  • connectionString: a cadeia de conexão para acessar o recurso de destino.
  • containerName: Para um destino de Armazenamento de BLOBs, o nome do contêiner em que os dados devem ser gravados.

A resposta a essa solicitação é parecida com o seguinte exemplo:

{
    "id": "8dbcdb53-c6a7-498a-a976-a824b694c150",
    "displayName": "Blob Storage",
    "type": "blobstorage@v1",
    "authorization": {
      "type": "connectionString",
      "connectionString": "DefaultEndpointsProtocol=https;AccountName=yourAccountName;AccountKey=*****;EndpointSuffix=core.windows.net",
      "containerName": "central-data"
    },
    "status": "waiting"
}

Obter um destino por ID

Use a solicitação a seguir para recuperar detalhes de um destino do seu aplicativo:

GET https://{your app subdomain}/api/dataExport/destinations/{destinationId}?api-version=2022-10-31-preview

A resposta a essa solicitação é parecida com o seguinte exemplo:

{
    "id": "8dbcdb53-c6a7-498a-a976-a824b694c150",
    "displayName": "Blob Storage",
    "type": "blobstorage@v1",
    "authorization": {
      "type": "connectionString",
      "connectionString": "DefaultEndpointsProtocol=https;AccountName=yourAccountName;AccountKey=*****;EndpointSuffix=core.windows.net",
      "containerName": "central-data"
    },
    "status": "waiting"
}

Lista de destinos

Use a solicitação a seguir para recuperar uma lista de destinos do seu aplicativo:

GET https://{your app subdomain}/api/dataExport/destinations?api-version=2022-10-31-preview

A resposta a essa solicitação é parecida com o seguinte exemplo:

{
    "value": [
        {
            "id": "8dbcdb53-c6a7-498a-a976-a824b694c150",
            "displayName": "Blob Storage Destination",
            "type": "blobstorage@v1",
            "authorization": {
                "type": "connectionString",
                "connectionString": "DefaultEndpointsProtocol=https;AccountName=yourAccountName;AccountKey=********;EndpointSuffix=core.windows.net",
                "containerName": "central-data"
            },
            "status": "waiting"
        },
        {
            "id": "9742a8d9-c3ca-4d8d-8bc7-357bdc7f39d9",
            "displayName": "Webhook destination",
            "type": "webhook@v1",
            "url": "https://eofnjsh68jdytan.m.pipedream.net",
            "headerCustomizations": {},
            "status": "error"
        }
    ]
}

Corrigir um destino

PATCH https://{your app subdomain}/api/dataExport/destinations/{destinationId}?api-version=2022-10-31-preview

Você pode usar esta chamada para executar uma atualização incremental para uma exportação. O corpo da solicitação de exemplo é semelhante ao exemplo a seguir que atualiza o connectionString de um destino:

{
  "connectionString": "DefaultEndpointsProtocol=https;AccountName=yourAccountName;AccountKey=********;EndpointSuffix=core.windows.net"
}

A resposta a essa solicitação é parecida com o seguinte exemplo:

{
    "id": "8dbcdb53-c6a7-498a-a976-a824b694c150",
    "displayName": "Blob Storage",
    "type": "blobstorage@v1",
    "authorization": {
      "type": "connectionString",
      "connectionString": "DefaultEndpointsProtocol=https;AccountName=yourAccountName;AccountKey=*****;EndpointSuffix=core.windows.net",
      "containerName": "central-data"
    },
    "status": "waiting"
}

Excluir um Destino

Use a seguinte solicitação para excluir um destino:

DELETE https://{your app subdomain}/api/dataExport/destinations/{destinationId}?api-version=2022-10-31-preview

Criar ou atualizar uma definição de exportação

Use a seguinte solicitação para criar ou atualizar uma definição de exportação de dados:

PUT https://{your app subdomain}/api/dataExport/exports/{exportId}?api-version=2022-10-31-preview

O exemplo a seguir mostra um corpo de solicitação que cria uma definição de exportação para telemetria do dispositivo:

{
    "displayName": "Enriched Export",
    "enabled": true,
    "source": "telemetry",
    "enrichments": {
        "Custom data": {
            "value": "My value"
        }
    },
    "destinations": [
        {
            "id": "8dbcdb53-c6a7-498a-a976-a824b694c150"
        }
    ]
}

O corpo da solicitação tem alguns campos obrigatórios:

  • displayName: Nome de exibição da exportação.
  • enabled: Alterne para iniciar/parar uma exportação do envio de dados.
  • source: O tipo de dados a exportação.
  • destinations: A lista de destinos para os quais a exportação deve enviar dados. As IDs de destino já devem existir no aplicativo.

Há alguns campos opcionais que você pode usar para adicionar mais detalhes à exportação.

  • enrichments: Informações extras a serem incluídas em cada mensagem enviada. Os dados são representados como um conjunto de pares de chave/valor, em que a chave é o nome do enriquecimento que aparecerá na mensagem de saída e o valor identifica os dados a serem enviados.
  • filter: Consulta que define quais eventos da origem devem ser exportados.

A resposta a essa solicitação é parecida com o seguinte exemplo:

{
    "id": "6e93df53-1ce5-45e4-ad61-3eb0d684b3a5",
    "displayName": "Enriched Export",
    "enabled": true,
    "source": "telemetry",
    "enrichments": {
        "Custom data": {
            "value": "My value"
        }
    },
    "destinations": [
        {
            "id": "9742a8d9-c3ca-4d8d-8bc7-357bdc7f39d9"
        }
    ],
    "status": "starting"
}

Enriquecimentos

Há três tipos de enriquecimento que você pode adicionar a uma exportação: cadeias de caracteres personalizadas, propriedades do sistema e propriedades personalizadas:

O exemplo a seguir mostra como usar o enrichments nó para adicionar uma cadeia de caracteres personalizada à mensagem de saída:

"enrichments": {
  "My custom string": {
    "value": "My value"
  },
  //...
}

O exemplo a seguir mostra como usar o enrichments nó para adicionar uma propriedade do sistema à mensagem de saída:

"enrichments": {
  "Device template": {
    "path": "$templateDisplayName"
  },
  //...
}

Você pode adicionar as seguintes propriedades do sistema:

Propriedade Descrição
$enabled O dispositivo está habilitado?
$displayName O nome do dispositivo.
$templateDisplayName O nome do modelo de dispositivo.
$organizations As organizações às quais o dispositivo pertence.
$provisioned O dispositivo está provisionado?
$simulated O dispositivo é simulado?

O exemplo a seguir mostra como usar o enrichments nó para adicionar uma propriedade personalizada à mensagem de saída. As propriedades personalizadas são propriedades definidas no modelo de dispositivo ao qual o dispositivo está associado:

"enrichments": {
  "Device model": {
    "target": "dtmi:azure:DeviceManagement:DeviceInformation;1",
    "path": "model"
  },
  //...
}

Filtros

Você pode filtrar as mensagens exportadas com base em valores de telemetria ou propriedade.

O exemplo a seguir mostra como usar o filter campo para exportar somente mensagens em que o valor de telemetria accelerometer-X é maior que 0:

{
  "id": "export-001",
  "displayName": "Enriched Export",
  "enabled": true,
  "source": "telemetry",
  "filter": "SELECT * FROM dtmi:eclipsethreadx:devkit:gsgmxchip;1 WHERE accelerometerX > 0",
  "destinations": [
    {
      "id": "dest-001"
    }
  ],
  "status": "healthy"
}

O exemplo a seguir mostra como usar o filter campo para exportar somente mensagens em que o valor de temperature telemetria é maior que a targetTemperature propriedade :

{
  "id": "export-001",
  "displayName": "Enriched Export",
  "enabled": true,
  "source": "telemetry",
  "filter": "SELECT * FROM dtmi:eclipsethreadx:devkit:gsgmxchip;1 AS A, dtmi:contoso:Thermostat;1 WHERE A.temperature > targetTemperature",
  "destinations": [
    {
      "id": "dest-001"
    }
  ],
  "status": "healthy"
}

Obter uma exportação por ID

Use a solicitação a seguir para recuperar detalhes de uma definição de exportação do seu aplicativo:

GET https://{your app subdomain}/api/dataExport/exports/{exportId}?api-version=2022-10-31-preview

A resposta a essa solicitação é parecida com o seguinte exemplo:

{
    "id": "8dbcdb53-c6a7-498a-a976-a824b694c150",
    "displayName": "Blob Storage Destination",
    "type": "blobstorage@v1",
    "connectionString": "DefaultEndpointsProtocol=https;AccountName=yourAccountName;AccountKey=********;EndpointSuffix=core.windows.net",
    "containerName": "central-data",
    "status": "waiting"
}

Listar definições de exportação

Use a solicitação a seguir para recuperar uma lista de definições de exportação do seu aplicativo:

GET https://{your app subdomain}/api/dataExport/exports?api-version=2022-10-31-preview

A resposta a essa solicitação é parecida com o seguinte exemplo:

{
  "value": [
    {
      "id": "6e93df53-1ce5-45e4-ad61-3eb0d684b3a5",
      "displayName": "Enriched Export",
      "enabled": true,
      "source": "telemetry",
      "enrichments": {
        "Custom data": {
          "value": "My value"
        }
      },
      "destinations": [
        {
          "id": "9742a8d9-c3ca-4d8d-8bc7-357bdc7f39d9"
        }
      ],
      "status": "starting"
    },
    {
      "id": "802894c4-33bc-4f1e-ad64-e886f315cece",
      "displayName": "Enriched Export",
      "enabled": true,
      "source": "telemetry",
      "enrichments": {
        "Custom data": {
          "value": "My value"
        }
      },
      "destinations": [
        {
          "id": "9742a8d9-c3ca-4d8d-8bc7-357bdc7f39d9"
        }
      ],
      "status": "healthy"
    }
  ]
}

Aplicar patch em uma definição de exportação

PATCH https://{your app subdomain}/dataExport/exports/{exportId}?api-version=2022-10-31-preview

Você pode usar esta chamada para executar uma atualização incremental para uma exportação. O corpo da solicitação de amostra é semelhante ao exemplo a seguir, que atualiza o enrichments para uma exportação:

{
    "enrichments": {
        "Custom data": {
            "value": "My value 2"
        }
    }
}

A resposta a essa solicitação é parecida com o seguinte exemplo:

{
    "id": "6e93df53-1ce5-45e4-ad61-3eb0d684b3a5",
    "displayName": "Enriched Export",
    "enabled": true,
    "source": "telemetry",
    "enrichments": {
        "Custom data": {
            "value": "My value 2"
        }
    },
    "destinations": [
        {
            "id": "9742a8d9-c3ca-4d8d-8bc7-357bdc7f39d9"
        }
    ],
    "status": "healthy"
}

Excluir um patch em uma definição de exportação

Use a seguinte solicitação para excluir uma definição de exportação:

DELETE https://{your app subdomain}/api/dataExport/destinations/{destinationId}?api-version=2022-10-31-preview

Próximas etapas

Agora que você aprendeu a gerenciara exportação de dados com a API REST, uma próxima etapa sugerida é Como usar a API REST do IoT Central para gerenciar modelos de dispositivo.