Share via


Uso de la API REST de IoT Central para administrar las exportaciones de datos

La API de REST de IoT Central permite desarrollar aplicaciones cliente que se integran con aplicaciones de IoT Central. Puede usar la API REST para crear y administrar las exportaciones de datos en la aplicación de IoT Central.

Cada llamada API de REST de IoT Central requiere un encabezado de autorización. Para obtener más información, vea los procedimientos de autenticación y autorización de llamadas a la API REST de IoT Central.

Para ver la documentación de referencia sobre la API REST de IoT Central, consulte Referencia de la API REST de Azure IoT Central.

Sugerencia

Puede usar Postman para probar las llamadas API REST que se describen en este artículo. Descargue la colección de Postman de IoT Central e impórtela en Postman. En la colección, deberá establecer variables como el subdominio de la aplicación y el token de administrador.

Para aprender a administrar la exportación de datos mediante la interfaz de usuario de IoT Central, consulte Exportación de datos de IoT a Blob Storage.

Exportación de datos

Puede usar la característica de exportación de datos de IoT Central para transmitir datos de telemetría, cambios de propiedad, eventos de conectividad de dispositivos, eventos de ciclo de vida de dispositivos y eventos de ciclo de vida de plantilla de dispositivo a destinos como Azure Event Hubs, Azure Service Bus, Azure Blob Storage y puntos de conexión de webhook.

Cada definición de exportación de datos puede enviar datos a uno o varios destinos. Cree las definiciones de destino antes de crear la definición de exportación.

Creación o actualización de un destino

Use la siguiente solicitud para crear o actualizar una definición de destino:

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

destinationId es un identificador único para el destino.

En el ejemplo siguiente se muestra un cuerpo de solicitud que crea un destino de almacenamiento de blob:

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

El cuerpo de la solicitud tiene algunos campos obligatorios:

  • displayName: nombre para mostrar del destino.
  • type: tipo del objeto de destino. Uno de los siguientes: blobstorage@v1, dataexplorer@v1, eventhubs@v1, servicebusqueue@v1, servicebustopic@v1, webhook@v1.
  • connectionString: cadena de conexión para acceder al recurso de destino.
  • containerName: para un destino de almacenamiento de blobs, el nombre del contenedor donde se deben escribir los datos.

La respuesta a esta solicitud es similar al ejemplo siguiente:

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

Obtener un destino por identificador

Use la siguiente solicitud para recuperar los detalles de un destino desde la aplicación:

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

La respuesta a esta solicitud es similar al ejemplo siguiente:

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

Destinos de la lista

Use la siguiente solicitud para recuperar una lista de destinos de la aplicación:

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

La respuesta a esta solicitud es similar al ejemplo siguiente:

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

Revisión de un destino

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

Puede usar esta llamada para realizar una actualización incremental de una exportación. El cuerpo de la solicitud de ejemplo es similar al ejemplo siguiente que actualiza el connectionString de un destino:

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

La respuesta a esta solicitud es similar al ejemplo siguiente:

{
    "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 un destino

Use la siguiente solicitud para eliminar un destino:

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

Creación o actualización de una definición de exportación

Use la siguiente solicitud para crear o actualizar una definición de exportación de datos:

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

En el ejemplo siguiente se muestra un cuerpo de solicitud que crea una definición de exportación para la telemetría del dispositivo:

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

El cuerpo de la solicitud tiene algunos campos obligatorios:

  • displayName: nombre para mostrar de la exportación.
  • enabled: alterna para iniciar o detener la exportación de un envío de datos.
  • source: tipo de datos para exportar.
  • destinations: lista de destinos a los que la exportación debe enviar datos. Los identificadores de destino ya deben existir en la aplicación.

Hay algunos campos opcionales que puede usar para agregar más detalles a la exportación.

  • enrichments: fragmentos de información extra que se incluirán con cada mensaje enviado. Los datos se representan como un conjunto de pares clave/valor, donde la clave es el nombre del enriquecimiento que aparecerá en el mensaje de salida y el valor identifica los datos que se van a enviar.
  • filter: consulta que define qué eventos del origen se deben exportar.

La respuesta a esta solicitud es similar al ejemplo siguiente:

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

Características enriquecidas

Hay tres tipos de enriquecimiento que se pueden agregar a una exportación: cadenas personalizadas, propiedades del sistema y propiedades personalizadas:

En el ejemplo siguiente se muestra cómo usar el enrichments nodo para agregar una cadena personalizada al mensaje saliente:

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

En el ejemplo siguiente se muestra cómo usar el enrichments nodo para agregar una propiedad del sistema al mensaje saliente:

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

Puede agregar las siguientes propiedades del sistema:

Propiedad Descripción
$enabled ¿Está habilitado el dispositivo?
$displayName El nombre de dispositivo.
$templateDisplayName Nombre de la plantilla de dispositivo.
$organizations Las organizaciones a las que pertenece el dispositivo.
$provisioned ¿Se aprovisiona el dispositivo?
$simulated ¿Se simula el dispositivo?

En el ejemplo siguiente se muestra cómo usar el enrichments nodo para agregar una propiedad personalizada al mensaje saliente. Las propiedades personalizadas son propiedades definidas en la plantilla de dispositivo a la que está asociado el dispositivo:

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

Filtros

Puede filtrar los mensajes exportados en función de los valores de telemetría o propiedad.

En el ejemplo siguiente se muestra cómo usar el filter campo para exportar solo los mensajes en los que el valor de telemetría accelerometer-X es mayor 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"
}

En el ejemplo siguiente se muestra cómo usar el filter campo para exportar solo los mensajes en los que el temperature valor de telemetría es mayor que la targetTemperature propiedad :

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

Obtener una exportación por identificador

Use la siguiente solicitud para recuperar los detalles de una definición de exportación desde la aplicación:

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

La respuesta a esta solicitud es similar al ejemplo siguiente:

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

Lista de definiciones de exportación

Use la siguiente solicitud para recuperar una lista de definiciones de exportación de la aplicación:

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

La respuesta a esta solicitud es similar al ejemplo siguiente:

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

Revisión de una definición de exportación

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

Puede usar esta llamada para realizar una actualización incremental de una exportación. El cuerpo de la solicitud de ejemplo es similar al ejemplo siguiente, que actualiza enrichments a una exportación:

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

La respuesta a esta solicitud es similar al ejemplo siguiente:

{
    "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 una definición de exportación

Use la siguiente solicitud para eliminar una definición de exportación:

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

Pasos siguientes

Ahora que ha aprendido a administrar la exportación de datos con la API de REST, el siguiente paso que se sugiere es Empleo de la API de REST de IoT Central para administrar plantillas de dispositivos.