Como utilizar a API REST do IoT Central para gerir exportações de dados
A API REST do IoT Central permite-lhe desenvolver aplicações cliente que se integram com aplicações do IoT Central. Pode utilizar a API REST para criar e gerir exportações de dados na sua aplicação do IoT Central.
Cada chamada à API REST do IoT Central requer um cabeçalho de autorização. Para saber mais, veja Como autenticar e autorizar chamadas à API REST do IoT Central.
Para obter a documentação de referência da API REST do IoT Central, veja Referência da API REST do Azure IoT Central.
Dica
Pode utilizar o Postman para experimentar as chamadas à API REST descritas neste artigo. Transfira a coleção do Postman do IoT Central e importe-a para o Postman. Na coleção, terá de definir variáveis como o subdomínio da aplicação e o token de administrador.
Para saber como gerir a exportação de dados com a IU do IoT Central, veja Exportar dados de IoT para o Armazenamento de Blobs.
Exportação de dados
Pode utilizar a funcionalidade de exportação de dados do IoT Central para transmitir telemetria, alterações de propriedades, 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, Azure Service Bus, Armazenamento de Blobs do Azure e pontos finais do 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
Utilize o seguinte pedido 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
é um ID exclusivo para o destino.
O exemplo seguinte mostra um corpo do pedido 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 do pedido tem alguns campos necessários:
displayName
: nome a apresentar do destino.type
: tipo de objeto de destino. Um de:blobstorage@v1
,dataexplorer@v1
, ,servicebusqueue@v1
eventhubs@v1
,servicebustopic@v1
, .webhook@v1
connectionString
: a cadeia de ligação para aceder ao recurso de destino.containerName
: para um destino de armazenamento de blobs, o nome do contentor onde os dados devem ser escritos.
A resposta a este pedido tem 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
Utilize o seguinte pedido para obter detalhes de um destino da sua aplicação:
GET https://{your app subdomain}/api/dataExport/destinations/{destinationId}?api-version=2022-10-31-preview
A resposta a este pedido tem 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"
}
Listar destinos
Utilize o seguinte pedido para obter uma lista de destinos da sua aplicação:
GET https://{your app subdomain}/api/dataExport/destinations?api-version=2022-10-31-preview
A resposta a este pedido tem 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
Pode utilizar esta chamada para efetuar uma atualização incremental para uma exportação. O corpo do pedido de exemplo tem o seguinte exemplo que atualiza o connectionString
de um destino:
{
"connectionString": "DefaultEndpointsProtocol=https;AccountName=yourAccountName;AccountKey=********;EndpointSuffix=core.windows.net"
}
A resposta a este pedido tem 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"
}
Eliminar um destino
Utilize o seguinte pedido para eliminar 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
Utilize o seguinte pedido 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 seguinte mostra um corpo do pedido que cria uma definição de exportação para a 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 do pedido tem alguns campos necessários:
displayName
: nome a apresentar da exportação.enabled
: Alternar para iniciar/impedir que uma exportação envie dados.source
: o tipo de dados a exportar.destinations
: a lista de destinos para os quais a exportação deve enviar dados. Os IDs de destino já têm de existir na aplicação.
Existem alguns campos opcionais que pode utilizar para adicionar mais detalhes à exportação.
enrichments
: informações adicionais a incluir com cada mensagem enviada. Os dados são representados como um conjunto de pares chave/valor, em que a chave é o nome do melhoramento que será apresentado na mensagem de saída e o valor identifica os dados a enviar.filter
: Consulta que define que eventos da origem devem ser exportados.
A resposta a este pedido tem 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"
}
Melhoramentos
Existem três tipos de melhoramento que pode adicionar a uma exportação: cadeias personalizadas, propriedades do sistema e propriedades personalizadas:
O exemplo seguinte mostra como utilizar o enrichments
nó para adicionar uma cadeia personalizada à mensagem de envio:
"enrichments": {
"My custom string": {
"value": "My value"
},
//...
}
O exemplo seguinte mostra como utilizar o enrichments
nó para adicionar uma propriedade do sistema à mensagem de envio:
"enrichments": {
"Device template": {
"path": "$templateDisplayName"
},
//...
}
Pode adicionar as seguintes propriedades do sistema:
Propriedade | Descrição |
---|---|
$enabled |
O dispositivo está ativado? |
$displayName |
O nome do dispositivo. |
$templateDisplayName |
O nome do modelo do dispositivo. |
$organizations |
As organizações a que pertence o dispositivo. |
$provisioned |
O dispositivo está aprovisionado? |
$simulated |
O dispositivo está simulado? |
O exemplo seguinte mostra como utilizar o enrichments
nó para adicionar uma propriedade personalizada à mensagem de envio. 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
Pode filtrar as mensagens exportadas com base em valores de telemetria ou propriedade.
O exemplo seguinte mostra como utilizar o filter
campo para exportar apenas mensagens em que o valor de telemetria accelerometer-X é superior a 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 seguinte mostra como utilizar o filter
campo para exportar apenas mensagens em que o temperature
valor de telemetria é maior do 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
Utilize o seguinte pedido para obter detalhes de uma definição de exportação da sua aplicação:
GET https://{your app subdomain}/api/dataExport/exports/{exportId}?api-version=2022-10-31-preview
A resposta a este pedido tem 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
Utilize o seguinte pedido para obter uma lista de definições de exportação da sua aplicação:
GET https://{your app subdomain}/api/dataExport/exports?api-version=2022-10-31-preview
A resposta a este pedido tem 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"
}
]
}
Corrigir uma definição de exportação
PATCH https://{your app subdomain}/dataExport/exports/{exportId}?api-version=2022-10-31-preview
Pode utilizar esta chamada para efetuar uma atualização incremental para uma exportação. O corpo do pedido de exemplo tem o seguinte exemplo que atualiza o enrichments
para uma exportação:
{
"enrichments": {
"Custom data": {
"value": "My value 2"
}
}
}
A resposta a este pedido tem 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"
}
Eliminar uma definição de exportação
Utilize o seguinte pedido para eliminar uma definição de exportação:
DELETE https://{your app subdomain}/api/dataExport/destinations/{destinationId}?api-version=2022-10-31-preview
Passos seguintes
Agora que aprendeu a gerir a exportação de dados com a API REST, um passo seguinte sugerido é Como utilizar a API REST do IoT Central para gerir modelos de dispositivos.