Referencia del conector de datos RestApiPoller para Codeless Connector Framework

Puede crear un RestApiPoller conector de datos con Codeless Connector Framework (CCF) mediante este artículo como complemento a la MICROSOFT SENTINEL API REST para los documentos de conectores de datos.

Cada conector de datos representa una conexión específica de un conector de datos Microsoft Sentinel. Un conector de datos puede tener varias conexiones, que capturan datos de distintos puntos de conexión. Puede completar la plantilla de implementación para el conector de datos CCF mediante la configuración JSON que se compila con este artículo.

Para obtener más información, consulte Creación de un conector sin código para Microsoft Sentinel.

Creación o actualización de conectores de datos

Busque la versión más reciente de la API estable o en versión preliminar haciendo referencia a las create operaciones o update en los documentos de la API REST. La diferencia entre las create operaciones y update es que update requiere el etag valor .

PUT método:

https://management.azure.com/subscriptions/{{subscriptionId}}/resourceGroups/{{resourceGroupName}}/providers/Microsoft.OperationalInsights/workspaces/{{workspaceName}}/providers/Microsoft.SecurityInsights/dataConnectors/{{dataConnectorId}}?api-version={{apiVersion}}

Parámetros de URI

Para obtener más información sobre la versión más reciente de la API, consulte Conectores de datos: crear o actualizar parámetros de URI.

Nombre Descripción
dataConnectorId Identificador del conector de datos. Debe ser un nombre único que sea el mismo que el name parámetro en el cuerpo de la solicitud.
resourceGroupName Nombre del grupo de recursos, no distingue mayúsculas de minúsculas.
subscriptionId Identificador de la suscripción de destino.
workspaceName El nombre del área de trabajo, no el identificador.
El patrón regex es ^[A-Za-z0-9][A-Za-z0-9-]+[A-Za-z0-9]$.
api-version Versión de API que se va a usar para esta operación.

Cuerpo de la solicitud

El cuerpo de la solicitud para un RestApiPoller conector de datos CCF tiene la siguiente estructura:

{
   "name": "{{dataConnectorId}}",
   "kind": "RestApiPoller",
   "etag": "",
   "properties": {
        "connectorDefinitionName": "",
        "auth": {},
        "request": {},
        "response": {},
        "paging": "",
        "dcrConfig": ""
   }
}

RestApiPoller

RestApiPoller es un conector de datos CCF de sondeo de API que puede usar para personalizar las cargas de paginación, autorización y solicitud/respuesta para el origen de datos.

Nombre Obligatorio Tipo Description
name Verdadero Cadena Nombre único de la conexión que coincide con el parámetro URI.
kind Verdadero Cadena Valor kind . Este campo debe establecerse en RestApiPoller.
etag GUID Valor etag . Este campo debe dejarse vacío para la creación del nuevo conector. Para las operaciones de actualización, etag debe coincidir con el conector etag (GUID) existente.
properties.connectorDefinitionName Cadena Nombre del DataConnectorDefinition recurso que define la configuración de la interfaz de usuario del conector de datos. Para obtener más información, vaya a Definición del conector de datos.
properties.auth Verdadero JSON anidado Propiedades de autenticación para sondear los datos. Para obtener más información, vaya a Configuración de autenticación.
properties.request Verdadero JSON anidado Carga de solicitud para sondear los datos, como el punto de conexión de API. Para obtener más información, vaya a Solicitud de configuración.
properties. response Verdadero JSON anidado El objeto de respuesta y el mensaje anidado que devuelve la API cuando sondea los datos. Para obtener más información, vaya a Configuración de respuesta.
properties.paging JSON anidado Carga de paginación al sondear los datos. Para obtener más información, vaya a Configuración de paginación.
properties.dcrConfig JSON anidado Parámetros necesarios cuando los datos se envían a una regla de recopilación de datos (DCR). Para obtener más información, vaya a Configuración de DCR.

Configuración de autenticación

El CCF admite los siguientes tipos de autenticación:

Nota:

La implementación de CCF OAuth2 no admite credenciales de certificado de cliente.

Como procedimiento recomendado, use parámetros en la sección de autenticación en lugar de credenciales de codificación rígida. Para obtener más información, consulte Protección de la entrada confidencial.

Para crear la plantilla de implementación, que también usa parámetros, debe escapar los parámetros de esta sección con un elemento de inicio [adicional. Este paso permite a los parámetros asignar un valor en función de la interacción del usuario con el conector. Para obtener más información, vea Caracteres de escape de expresiones de plantilla.

Para permitir que las credenciales se escriban desde la interfaz de usuario, la connectorUIConfig sección requiere que escriba los parámetros deseados en instructions. Para obtener más información, vea Referencia de definiciones de conector de datos para Codeless Connector Framework.

Autenticación básica

Campo Obligatorio Tipo
UserName Verdadero Cadena
Password Verdadero Cadena

Este es un ejemplo de autenticación básica que usa parámetros definidos en connectorUIconfig:

"auth": {
    "type": "Basic",
    "UserName": "[[parameters('username')]",
    "Password": "[[parameters('password')]"
}

Clave de API

Campo Obligatorio Tipo Descripción Valor predeterminado
ApiKey Verdadero Cadena Clave secreta de usuario.
ApiKeyName Cadena Nombre del encabezado URI que contiene el ApiKey valor. Authorization
ApiKeyIdentifier Cadena Valor de cadena para anteponer el token. token
IsApiKeyInPostPayload Booleano Valor que determina si se va a enviar el secreto en el cuerpo en lugar de en el POST encabezado. false

APIKey ejemplos de autenticación:

"auth": {
    "type": "APIKey",
    "ApiKey": "[[parameters('apikey')]",
    "ApiKeyName": "X-MyApp-Auth-Header",
    "ApiKeyIdentifier": "Bearer"
}

El resultado de este ejemplo es el secreto definido a partir de la entrada del usuario enviada en el encabezado siguiente: X-MyApp-Auth-Header: Bearer apikey.

"auth": { 
    "type": "APIKey",
    "ApiKey": "123123123",
}

En este ejemplo se usan los valores predeterminados y se da como resultado el encabezado siguiente: Authorizationtoken 123123123.

"auth": { 
    "type": "APIKey",
    "ApiKey": "123123123",
    "ApiKeyName": ""
}

Dado que ApiKeyName se establece explícitamente en "", el resultado es el encabezado siguiente: Authorization: 123123123.

OAuth2

Codeless Connector Framework admite la concesión de código de autorización de OAuth 2.0 y las credenciales de cliente. Los clientes confidenciales y públicos usan el tipo de concesión de código de autorización para intercambiar un código de autorización por un token de acceso.

Una vez que el usuario vuelve al cliente a través de la dirección URL de redireccionamiento, la aplicación obtendrá el código de autorización de la dirección URL y lo usará para solicitar un token de acceso.

Campo Obligatorio Tipo Description
ClientId Verdadero. Cadena Identificador de cliente.
ClientSecret Verdadero. Cadena Secreto de cliente.
AuthorizationCode True cuando el grantType valor es authorization_code. Cadena Si el tipo de concesión es authorization_code, este valor de campo es el código de autorización que devolvió el servidor de autenticación.
Scope True para el tipo de authorization_code concesión.
Opcional para el tipo de client_credentials concesión.
Cadena Una lista separada por espacios de ámbitos para el consentimiento del usuario. Para obtener más información, consulte Ámbitos y permisos de OAuth2.
RedirectUri True cuando el grantType valor es authorization_code. Cadena La dirección URL del redireccionamiento debe ser https://portal.azure.com/TokenAuthorize/ExtensionName/Microsoft_Azure_Security_Insights.
GrantType Verdadero. Cadena Tipo de concesión. Puede ser authorization_code o client_credentials.
TokenEndpoint Verdadero. Cadena Dirección URL para intercambiar código con un token válido en la authorization_code concesión, o un identificador de cliente y un secreto con un token válido en la client_credentials concesión.
TokenEndpointHeaders Objeto Un objeto de clave/valor opcional para enviar encabezados personalizados al servidor de tokens.
TokenEndpointQueryParameters Objeto Un objeto de clave/valor opcional para enviar parámetros de consulta personalizados al servidor de tokens.
AuthorizationEndpoint Verdadero. Cadena Dirección URL del consentimiento del usuario para el authorization_code flujo.
AuthorizationEndpointHeaders Objeto Un objeto de clave/valor opcional para enviar encabezados personalizados al servidor de autenticación.
AuthorizationEndpointQueryParameters Objeto Par clave-valor opcional usado en una solicitud de flujo de código de autorización de OAuth2.

Puede usar el flujo de código de autenticación para capturar datos en nombre de los permisos de un usuario. Puede usar credenciales de cliente para capturar datos con permisos de aplicación. El servidor de datos concede acceso a la aplicación. Dado que no hay ningún usuario en el flujo de credenciales de cliente, no se necesita ningún punto de conexión de autorización, solo un punto de conexión de token.

Este es un ejemplo del tipo de concesión de OAuth2 authorization_code :

"auth": {
    "type": "OAuth2",
    "ClientId": "[[parameters('appId')]",
    "ClientSecret": "[[parameters('appSecret')]",
    "tokenEndpoint": "https://login.microsoftonline.com/{{tenantId}}/oauth2/v2.0/token",
    "authorizationEndpoint": "https://login.microsoftonline.com/{{tenantId}}/oauth2/v2.0/authorize",
    "authorizationEndpointHeaders": {},
    "authorizationEndpointQueryParameters": {
        "prompt": "consent"
    },
    "redirectUri": "https://portal.azure.com/TokenAuthorize/ExtensionName/Microsoft_Azure_Security_Insights",
    "tokenEndpointHeaders": {
        "Accept": "application/json",
        "Content-Type": "application/x-www-form-urlencoded"
    },
    "TokenEndpointQueryParameters": {},
    "scope": "openid offline_access some_scope",
    "grantType": "authorization_code"
}

Este es un ejemplo del tipo de concesión de OAuth2 client_credentials :

"auth": {
    "type": "OAuth2",
    "ClientId": "[[parameters('appId')]",
    "ClientSecret": "[[parameters('appSecret')]",
    "tokenEndpoint": "https://login.microsoftonline.com/{{tenantId}}/oauth2/v2.0/token",
    "tokenEndpointHeaders": {
        "Accept": "application/json",
        "Content-Type": "application/x-www-form-urlencoded"
    },
    "TokenEndpointQueryParameters": {},
    "scope": "openid offline_access some_scope",
    "grantType": "client_credentials"
}

JWT

La autenticación de JSON Web Token (JWT) admite la obtención de tokens a través de credenciales de nombre de usuario y contraseña y su uso para las solicitudes de API.

Ejemplo básico
"auth": {
    "type": "JwtToken",
    "userName": {
        "key": "username",
        "value": "[[parameters('UserName')]"
    },
    "password": {
        "key": "password", 
        "value": "[[parameters('Password')]"
    },
    "TokenEndpoint": "https://token_endpoint.contoso.com",
    "IsJsonRequest": true,
    "JwtTokenJsonPath": "$.access_token"
}
Credenciales en el cuerpo post (valor predeterminado)
"auth": {
    "type": "JwtToken",
    "userName": {
        "key": "username",
        "value": "[[parameters('UserName')]"
    },
    "password": {
        "key": "password",
        "value": "[[parameters('Password')]"
    },
    "TokenEndpoint": "https://api.example.com/token",
    "Headers": {
        "Accept": "application/json",
        "Content-Type": "application/json"
    },
    "IsCredentialsInHeaders": false,
    "IsJsonRequest": true,
    "JwtTokenJsonPath": "$.access_token"
}
Credenciales en encabezados (autenticación básica)
"auth": {
    "type": "JwtToken",
    "userName": {
        "key": "client_id",
        "value": "[[parameters('ClientId')]"
    },
    "password": {
        "key": "client_secret",
        "value": "[[parameters('ClientSecret')]"
    },
    "TokenEndpoint": "https://api.example.com/oauth/token",
    "Headers": {
        "Accept": "application/json"
    },
    "IsCredentialsInHeaders": true,
    "IsJsonRequest": true,
    "JwtTokenJsonPath": "$.access_token",
    "RequestTimeoutInSeconds": 30
}
Credenciales en encabezados (token de usuario)
"auth": {
    "type": "JwtToken",
    "UserToken": "[[parameters('userToken')]",
    "UserTokenPrepend": "Bearer",
    "TokenEndpoint": "https://api.example.com/oauth/token",
    "Headers": {
        "Accept": "application/json"
    },
    "TokenEndpointHttpMethod": "GET",
    "NoAccessTokenPrepend": true,
    "JwtTokenJsonPath": "$.systemToken"
}

Siga este flujo de autenticación:

  1. Enviar credenciales a TokenEndpoint para obtener el token JWT, cuando se usa userName y password, IsCredentialsInHeaders se usa para determinar dónde colocar las credenciales en la solicitud.

    • Si IsCredentialsInHeaders: true: envía un encabezado de autenticación básico con username:password.
    • If IsCredentialsInHeaders: false: envía credenciales en un POST cuerpo.
  2. Extraiga el token mediante JwtTokenJsonPath o desde el encabezado de respuesta.

  3. El encabezado Authorization de los tokens JWT es una constante y siempre será "Authorization".

Campo Obligatorio Tipo Description
type Verdadero Cadena Tipo. Debe ser JwtToken
userName True (si userToken no se usa) Objeto Par clave-valor de la userName credencial. Si userName y password se envían en la solicitud de encabezado, especifique la value propiedad con el nombre de usuario. Si userName y password se envían en la solicitud de cuerpo, especifique Key y Value.
password True (si userToken no se usa) Objeto Par clave-valor de la credencial de contraseña. Si userName y password se envían en la solicitud de encabezado, especifique la value propiedad con .userName Si userName y password se envían en la solicitud de cuerpo, especifique Key y Value.
userToken True (si userName no se usa) Cadena Token de usuario generado por el cliente para obtener el token del sistema para la autenticación.
UserTokenPrepend Falso Cadena Valor que indica si se debe anteponer texto antes del token. Valor predeterminado: Bearer.
NoAccessTokenPrepend Falso Booleano Marca de acceso que indica que el token no debe anteponer nada.
TokenEndpointHttpMethod Falso Cadena Método HTTP para el punto de conexión de token. Puede ser Get o Post. El valor predeterminado es Post.
TokenEndpoint Verdadero Cadena Punto de conexión de dirección URL que se usa para obtener el token JWT.
IsCredentialsInHeaders Booleano Valor que indica si se van a enviar credenciales como un encabezado de autenticación básico (true) frente a un POST cuerpo (false), que se omite al usar userToken. El valor predeterminado es false.
IsJsonRequest Booleano Valor que indica si se va a enviar la solicitud en JSON (encabezado Content-Type = application/json) frente a codificado en formulario (encabezado Content-Type = application/x-www-form-urlencoded). El valor predeterminado es false.
JwtTokenJsonPath Cadena Valor que indica el JSONPath valor que se va a usar para extraer el token de la respuesta. Por ejemplo: $.access_token.
JwtTokenInResponseHeader Booleano Valor que indica si se va a extraer el token del encabezado de respuesta frente al cuerpo. El valor predeterminado es false.
JwtTokenHeaderName. Cadena Valor que indica el nombre del encabezado cuando el token está en el encabezado de respuesta. El valor predeterminado es Authorization.
JwtTokenIdentifier Cadena Identificador usado para extraer el JWT de una cadena de token con prefijo.
QueryParameters Objeto Parámetros de consulta personalizados que se van a incluir al enviar la solicitud al punto de conexión del token.
Headers Objeto Encabezados personalizados que se van a incluir al enviar la solicitud al punto de conexión del token.
RequestTimeoutInSeconds Entero Tiempo de espera de la solicitud en segundos. El valor predeterminado es 100, con un valor máximo de 180.

Nota:

Limitaciones

  • Requiere autenticación de nombre de usuario y contraseña para la adquisición de tokens.
  • No admite solicitudes de token basadas en claves de API
  • No admite la autenticación de encabezado personalizada (sin nombre de usuario y contraseña)

Configuración de la solicitud

La sección de solicitud define cómo el conector de datos CCF envía solicitudes al origen de datos (por ejemplo, el punto de conexión de API y la frecuencia con la que se sondea ese punto de conexión).

Campo Obligatorio Tipo Description
ApiEndpoint Verdadero. Cadena Este campo determina la dirección URL del servidor remoto y define el punto de conexión desde el que se van a extraer datos.
RateLimitQPS Entero Este campo define el número de llamadas o consultas permitidas en un segundo para la solicitud inicial. No se aplica a las solicitudes paginadas. Para limitar la paginación, establezca PaginatedCallsPerSecondtambién .
PaginatedCallsPerSecond Doble (0...1000) Este campo define el número de llamadas por segundo permitidas para las solicitudes paginadas a la API RESTful. Introduce un retraso de (1000 / paginatedCallsPerSecond) milisegundos entre cada llamada API paginada. Esta limitación solo se aplica a las solicitudes de paginación y es independiente de RateLimitQPS, que controla la tasa de solicitudes inicial. Normalmente, se establecerá el mismo valor que RateLimitQPS para respetar el límite de velocidad del origen de datos en todas las solicitudes. 0 value significa que no se aplica ninguna limitación de paginación.
RateLimitConfig Objeto Este campo define la configuración de límite de velocidad para la API RESTful. Para obtener más información, vaya al RateLimitConfig ejemplo.
QueryWindowInMin Entero Este campo define la ventana de consulta disponible en minutos. El mínimo es de 1 minuto. El valor predeterminado es 5 minutos.
HttpMethod Cadena Este campo define el método de API: GET(valor predeterminado) o POST.
QueryTimeFormat Cadena Este campo define el formato de fecha y hora que espera el punto de conexión (servidor remoto). El CCF usa la fecha y hora actuales siempre que se use esta variable. Los valores posibles son las constantes: UnixTimestamp, UnixTimestampInMillso cualquier otra representación válida de fecha y hora. Por ejemplo: yyyy-MM-dd, MM/dd/yyyy HH:mm:ss.
El valor predeterminado es ISO 8601 UTC.
RetryCount Entero (1...6) Este campo define que los valores de 1 para 6 reintentos pueden recuperarse de un error. El valor predeterminado es 3.
TimeoutInSeconds Entero (1...180) Este campo define el tiempo de espera de la solicitud en segundos. El valor predeterminado es 20.
IsPostPayloadJson Booleano Este campo determina si la POST carga está en formato JSON. El valor predeterminado es false.
Headers Objeto Este campo incluye pares clave-valor que definen los encabezados de solicitud.
QueryParameters Objeto Este campo incluye pares clave-valor que definen los parámetros de consulta de solicitud.
StartTimeAttributeName True cuando se establece el EndTimeAttributeName valor. Cadena Este campo define el nombre del parámetro de consulta para la hora de inicio de la consulta. Para obtener más información, vaya al StartTimeAttributeName ejemplo.
EndTimeAttributeName True cuando StartTimeAttributeName se establece. Cadena Este campo define el nombre del parámetro de consulta para la hora de finalización de la consulta.
QueryTimeIntervalAttributeName Cadena Este campo se usa si el punto de conexión requiere un formato especializado para consultar los datos en un período de tiempo. Use esta propiedad con los QueryTimeIntervalPrepend parámetros y QueryTimeIntervalDelimiter . Para obtener más información, vaya al QueryTimeIntervalAttributeName ejemplo.
QueryTimeIntervalPrepend True cuando QueryTimeIntervalAttributeName se establece. Cadena Haga referencia a QueryTimeIntervalAttributeName.
QueryTimeIntervalDelimiter True cuando QueryTimeIntervalAttributeName se establece. Cadena Haga referencia a QueryTimeIntervalAttributeName.
QueryParametersTemplate Cadena Este campo hace referencia a la plantilla de consulta que se va a usar al pasar parámetros en escenarios avanzados.

Por ejemplo: "queryParametersTemplate": "{'cid': 1234567, 'cmd': 'reporting', 'format': 'siem', 'data': { 'from': '{_QueryWindowStartTime}', 'to': '{_QueryWindowEndTime}'}, '{_APIKeyName}': '{_APIKey}'}".
InitialCheckpointTimeUtc DateTime (UTC) Especifica la hora de inicio de la consulta para el primer sondeo cuando no existe ningún punto de control almacenado. Una vez que se conserva un punto de control después del primer sondeo correcto, este valor se omite. Esta configuración solo surte efecto cuando la configuración de solicitud del conector define un parámetro de consulta de hora de inicio (como startTimeAttributeName o el token de {_QueryWindowStartTime} reemplazo) sin un parámetro de tiempo de finalización correspondiente. No tiene ningún efecto en los conectores que se basan únicamente en cursores o tokens de paginación. Formato: ISO 8601 UTC datetime (por ejemplo, 2024-01-15T00:00:00Z).

Cuando la API requiera parámetros complejos, use queryParameters o queryParametersTemplate. Estos comandos incluyen algunas variables integradas.

Variable integrada Para su uso en queryParameters Para su uso en queryParametersTemplate
_QueryWindowStartTime
_QueryWindowEndTime
_APIKeyName No
_APIKey No

Ejemplo de StartTimeAttributeName

Tenga en cuenta este ejemplo:

  • StartTimeAttributeName = from
  • EndTimeAttributeName = until
  • ApiEndpoint = https://www.example.com

La consulta enviada al servidor remoto es: https://www.example.com?from={QueryTimeFormat}&until={QueryTimeFormat + QueryWindowInMin}.

Ejemplo de QueryTimeIntervalAttributeName

Tenga en cuenta este ejemplo:

  • QueryTimeIntervalAttributeName = interval
  • QueryTimeIntervalPrepend = time:
  • QueryTimeIntervalDelimiter = ..
  • ApiEndpoint = https://www.example.com

La consulta enviada al servidor remoto es: https://www.example.com?interval=time:{QueryTimeFormat}..{QueryTimeFormat + QueryWindowInMin}.

Ejemplo de RateLimitConfig

Tenga en cuenta este ejemplo:

ApiEndpoint = https://www.example.com.

"rateLimitConfig": {
  "evaluation": {
    "checkMode": "OnlyWhen429"
  },
  "extraction": {
    "source": "CustomHeaders",
    "headers": {
      "limit": {
        "name": "X-RateLimit-Limit",
        "format": "Integer"
      },
      "remaining": {
        "name": "X-RateLimit-Remaining",
        "format": "Integer"
      },
      "reset": {
        "name": "X-RateLimit-RetryAfter",
        "format": "UnixTimeSeconds"
      }
    }
  },
  "retryStrategy": {
    "useResetOrRetryAfterHeaders": true
  }
}

Cuando la respuesta incluye encabezados de límite de velocidad, el conector puede usar esta información para ajustar su tasa de solicitudes.

Ejemplos de solicitud que usan Microsoft Graph como API de origen de datos

En este ejemplo se consultan los mensajes con un parámetro de consulta de filtro. Para obtener más información, consulte Parámetros de consulta de Microsoft Graph API.

"request": {
  "apiEndpoint": "https://graph.microsoft.com/v1.0/me/messages",
  "httpMethod": "Get",
  "queryTimeFormat": "yyyy-MM-ddTHH:mm:ssZ",
  "queryWindowInMin": 10,
  "retryCount": 3,
  "rateLimitQPS": 20,
  "headers": {
    "Accept": "application/json",
    "User-Agent": "Example-app-agent"
  },
  "QueryTimeIntervalAttributeName": "filter",
  "QueryTimeIntervalPrepend": "receivedDateTime gt ",
  "QueryTimeIntervalDelimiter": " and receivedDateTime lt "
}

En el ejemplo anterior se envía una GET solicitud a https://graph.microsoft.com/v1.0/me/messages?filter=receivedDateTime gt {time of request} and receivedDateTime lt 2019-09-01T17:00:00.0000000. La marca de tiempo se actualiza para cada queryWindowInMin vez.

Con este ejemplo se logran los mismos resultados:

"request": {
  "apiEndpoint": "https://graph.microsoft.com/v1.0/me/messages",
  "httpMethod": "Get",
  "queryTimeFormat": "yyyy-MM-ddTHH:mm:ssZ",
  "queryWindowInMin": 10,
  "retryCount": 3,
  "rateLimitQPS": 20,
  "headers": {
    "Accept": "application/json",
  },
  "queryParameters": {
    "filter": "receivedDateTime gt {_QueryWindowStartTime} and receivedDateTime lt {_QueryWindowEndTime}"
  }
}

Hay otra opción para situaciones en las que el origen de datos espera dos parámetros de consulta (uno para la hora de inicio y otro para la hora de finalización).

Ejemplo:

"request": {
  "apiEndpoint": "https://graph.microsoft.com/v1.0/me/calendarView",
  "httpMethod": "Get",
  "queryTimeFormat": "yyyy-MM-ddTHH:mm:ssZ",
  "queryWindowInMin": 10,
  "retryCount": 3,
  "rateLimitQPS": 20,
  "headers": {
    "Accept": "application/json",
  },
  "StartTimeAttributeName": "startDateTime",
  "EndTimeAttributeName": "endDateTime",
}

Esta opción envía una GET solicitud a https://graph.microsoft.com/me/calendarView?startDateTime=2019-09-01T09:00:00.0000000&endDateTime=2019-09-01T17:00:00.0000000.

Para consultas complejas, use QueryParametersTemplate. En este ejemplo se envía una POST solicitud con parámetros en el cuerpo:

"request": {
  "apiEndpoint": "https://graph.microsoft.com/v1.0/me/messages",
  "httpMethod": "POST",
  "queryTimeFormat": "yyyy-MM-ddTHH:mm:ssZ",
  "queryWindowInMin": 10,
  "retryCount": 3,
  "rateLimitQPS": 20,
  "headers": {
    "Accept": "application/json",
  },
  "isPostPayloadJson": true,
  "queryParametersTemplate": "{\"query":"TableName | where createdTimestamp between (datetime({_QueryWindowStartTime}) .. datetime({_QueryWindowEndTime}))\"}"
}

Configuración de respuesta

Defina cómo controla el conector de datos las respuestas mediante los parámetros siguientes:

Campo Obligatorio Tipo Description
EventsJsonPaths Verdadero Lista de cadenas Define la ruta de acceso al mensaje en el JSON de respuesta. Una expresión de ruta de acceso JSON especifica una ruta de acceso a un elemento, o un conjunto de elementos, en una estructura JSON.
SuccessStatusJsonPath Cadena Define la ruta de acceso al mensaje correcto en el JSON de respuesta. Cuando se define este parámetro, también se debe definir el SuccessStatusValue parámetro .
SuccessStatusValue Cadena Define la ruta de acceso al valor del mensaje correcto en el JSON de respuesta.
IsGzipCompressed Booleano Determina si la respuesta se comprime en un archivo GZIP.
format Verdadero Cadena Determina si el formato es json, csvo xml.
CompressionAlgo Cadena Define el algoritmo de compresión, ya sea multi-gzip o deflate. Para el algoritmo de compresión GZIP, configure IsGzipCompressed en True en lugar de establecer un valor para este parámetro.
CsvDelimiter Cadena Hace referencia a si el formato de respuesta es CSV y desea cambiar el delimitador CSV predeterminado de ",".
HasCsvBoundary Booleano Indica si los datos CSV tienen un límite.
HasCsvHeader Booleano Indica si los datos CSV tienen un encabezado. El valor predeterminado es True.
CsvEscape Cadena Define un carácter de escape para un límite de campo. El valor predeterminado es "

Por ejemplo, un ARCHIVO CSV con encabezados id,name,avg y una fila de datos que contienen espacios como 1,"my name",5.5 requiere el límite de " campo.
ConvertChildPropertiesToArray Booleano Hace referencia a un caso especial en el que el servidor remoto devuelve un objeto en lugar de una lista de eventos donde cada propiedad incluye datos.

Nota:

El tipo de formato CSV se analiza según la RFC4180 especificación.

Ejemplos de configuración de respuesta

Se espera una respuesta del servidor en formato JSON. La respuesta tiene los datos solicitados en el valor de propiedad. El estado de la propiedad response indica que se ingieren los datos solo si el valor es success.

"response": {
  "EventsJsonPaths ": ["$.value"],
  "format": "json",
  "SuccessStatusJsonPath": "$.status",
  "SuccessStatusValue": "success",
  "IsGzipCompressed": true
 }

La respuesta esperada en este ejemplo se prepara para un ARCHIVO CSV sin encabezado.

"response": {
  "EventsJsonPaths ": ["$"],
  "format": "csv",
  "HasCsvHeader": false
 }

Configuración de paginación

Cuando el origen de datos no puede enviar toda la carga de respuesta a la vez, el conector de datos CCF debe saber cómo recibir partes de los datos en las páginas de respuesta. Los tipos de paginación entre los que elegir son:

Tipo de paginación Factor de decisión
¿La respuesta de LA API tiene vínculos a las páginas siguientes y anteriores?
¿La respuesta de LA API tiene un token o cursor para las páginas siguientes y anteriores?
¿La respuesta de API admite un parámetro para el número de objetos que se omitirán al paginar?
¿La respuesta de API admite un parámetro para el número de objetos que se van a devolver?

Configuración de LinkHeader o PersistentLinkHeader

El tipo de paginación más común es cuando una API de origen de datos de servidor proporciona direcciones URL a las páginas de datos siguientes y anteriores. Para obtener más información sobre la especificación de encabezado de vínculo , vea RFC 5988.

LinkHeader paginación significa que la respuesta de la API incluye:

  • Encabezado de Link respuesta HTTP.
  • Ruta de acceso JSON para recuperar el vínculo del cuerpo de la respuesta.

PersistentLinkHeaderLa paginación de tipo -tiene las mismas propiedades que LinkHeader, excepto que el encabezado de vínculo persiste en el almacenamiento back-end. Esta opción habilita los vínculos de paginación en las ventanas de consulta.

Por ejemplo, algunas API no admiten las horas de inicio ni las horas de finalización de las consultas. En su lugar, admiten un cursor del lado servidor. Puede usar tipos de página persistentes para recordar el cursor del lado servidor. Para obtener más información, vea ¿Qué es un cursor?.

Nota:

Solo se puede ejecutar una consulta para el conector con PersistentLinkHeader para evitar condiciones de carrera en el cursor del lado servidor. Este problema puede afectar a la latencia.

Campo Obligatorio Tipo Description
LinkHeaderTokenJsonPath Falso Cadena Use esta propiedad para indicar dónde obtener el valor en el cuerpo de la respuesta.

Por ejemplo, si el origen de datos devuelve el siguiente JSON: { nextPage: "foo", value: [{data}]}, el LinkHeaderTokenJsonPath valor es $.nextPage.
PageSize Falso Entero Use esta propiedad para determinar el número de eventos por página.
PageSizeParameterName Falso Cadena Use este nombre de parámetro de consulta para indicar el tamaño de página.
PagingInfoPlacement Falso Cadena Use esta propiedad para determinar cómo se rellena la información de paginación. Acepta o QueryStringRequestBody.
PagingQueryParamOnly Falso Booleano Use esta propiedad para especificar parámetros de consulta. Si se establece en true, omite todos los demás parámetros de consulta excepto los parámetros de consulta de paginación.

Estos son algunos ejemplos:

"paging": {
  "pagingType": "LinkHeader",
  "linkHeaderTokenJsonPath" : "$.metadata.links.next"
}
"paging": {
 "pagingType" : "PersistentLinkHeader", 
 "pageSizeParameterName" : "limit", 
 "pageSize" : 500 
}

Configuración de NextPageUrl

NextPageUrl-type paging significa que la respuesta de la API incluye un vínculo complejo en el cuerpo de la respuesta similar a LinkHeader, pero la dirección URL se incluye en el cuerpo de la respuesta en lugar del encabezado.

Campo Obligatorio Tipo Description
PageSize Falso Entero Número de eventos por página.
PageSizeParameterName Falso Cadena Nombre del parámetro de consulta para el tamaño de página.
NextPageUrl Falso Cadena Campo que solo se usa si el conector es para la API de Coralogix.
NextPageUrlQueryParameters Falso Objeto Pares clave-valor que agregan un parámetro de consulta personalizado a cada solicitud de la página siguiente.
NextPageParaName Falso Cadena Nombre de página siguiente en la solicitud.
HasNextFlagJsonPath Falso Cadena Ruta de acceso al atributo flag HasNextPage .
NextPageRequestHeader Falso Cadena Nombre del encabezado de página siguiente en la solicitud.
NextPageUrlQueryParametersTemplate Falso Cadena Campo que solo se usa si el conector es para la API de Coralogix.
PagingInfoPlacement Falso Cadena Campo que determina cómo se rellena la información de paginación. Acepta o QueryStringRequestBody.
PagingQueryParamOnly Falso Booleano Campo que determina los parámetros de consulta. Si se establece en true, omite todos los demás parámetros de consulta excepto los parámetros de consulta de paginación.

Ejemplo:

"paging": {
 "pagingType" : "NextPageUrl", 
  "nextPageTokenJsonPath" : "$.data.repository.pageInfo.endCursor", 
  "hasNextFlagJsonPath" : "$.data.repository.pageInfo.hasNextPage", 
  "nextPageUrl" : "https://api.github.com/graphql", 
  "nextPageUrlQueryParametersTemplate" : "{'query':'query{repository(owner:\"xyz\")}" 
}

Configuración de NextPageToken o PersistentToken

NextPageToken-type pagination usa un token (un hash o un cursor) que representa el estado de la página actual. El token se incluye en la respuesta de API y el cliente lo anexa a la siguiente solicitud para capturar la página siguiente. Este método se usa a menudo cuando el servidor necesita mantener el estado exacto entre las solicitudes.

PersistentToken la paginación usa un token que conserva el lado servidor. El servidor recuerda el último token que recuperó el cliente y proporciona el siguiente token en solicitudes posteriores. El cliente continúa donde lo dejó, incluso si realiza nuevas solicitudes más adelante.

Campo Obligatorio Tipo Description
PageSize Falso Entero Número de eventos por página.
PageSizeParameterName Falso Cadena Nombre del parámetro de consulta para el tamaño de página.
NextPageTokenJsonPath Falso Cadena Ruta de acceso JSON para el token de página siguiente en el cuerpo de la respuesta.
NextPageTokenResponseHeader Falso Cadena Campo que especifica que, si NextPageTokenJsonPath está vacío, use el token en este nombre de encabezado para la página siguiente.
NextPageParaName Falso Cadena Campo que determina el nombre de página siguiente en la solicitud.
HasNextFlagJsonPath Falso Cadena Campo que define la ruta de acceso a un HasNextPage atributo de marca al determinar si quedan más páginas en la respuesta.
NextPageRequestHeader Falso Cadena Campo que determina el nombre del encabezado de página siguiente en la solicitud.
PagingInfoPlacement Falso Cadena Campo que determina cómo se rellena la información de paginación. Acepta o QueryStringRequestBody.
PagingQueryParamOnly Falso Booleano Campo que determina los parámetros de consulta. Si se establece en true, omite todos los demás parámetros de consulta excepto los parámetros de consulta de paginación.

Ejemplos:

"paging": {
 "pagingType" : "NextPageToken", 
 "nextPageRequestHeader" : "ETag", 
 "nextPageTokenResponseHeader" : "ETag" 
}
"paging": {
 "pagingType" : "PersistentToken", 
    "nextPageParaName" : "gta", 
    "nextPageTokenJsonPath" : "$.alerts[-1:]._id" 
}

Configuración del desplazamiento

Offset-type pagination especifica el número de páginas que se omitirán y un límite en el número de eventos que se recuperarán por página en la solicitud. Los clientes capturan un intervalo específico de elementos del conjunto de datos.

Campo Obligatorio Tipo Description
PageSize Falso Entero Número de eventos por página.
PageSizeParameterName Falso Cadena Nombre del parámetro de consulta para el tamaño de página.
OffsetParaName Falso Cadena Nombre del parámetro de consulta de la siguiente solicitud. El CCF calcula el valor de desplazamiento para cada solicitud (todos los eventos ingeridos + 1).
PagingInfoPlacement Falso Cadena Campo que determina cómo se rellena la información de paginación. Acepta o QueryStringRequestBody.
PagingQueryParamOnly Falso Booleano Campo que determina los parámetros de consulta. Si se establece en true, omite todos los demás parámetros de consulta excepto los parámetros de consulta de paginación.

Ejemplo:

"paging": {
  "pagingType": "Offset", 
  "offsetParaName": "offset",
  "pageSize": 50,
  "pagingQueryParamOnly": true,
  "pagingInfoPlacement": "QueryString"
}

Configuración de CountBasedPaging

CountBasedPaging-type pagination permite al cliente especificar el número de elementos que se devolverán en la respuesta. Esta capacidad es útil para las API que admiten la paginación en función de un parámetro count como parte de la carga de respuesta.

Campo Obligatorio Tipo Description
pageNumberParaName Verdadero Cadena Nombre del parámetro del número de página en la solicitud HTTP.
PageSize Falso Entero Número de eventos por página.
ZeroBasedIndexing Falso Booleano Marca que indica que el recuento está basado en cero.
HasNextFlagJsonPath Falso Cadena Ruta de acceso JSON de la marca en la carga de respuesta HTTP que indica que hay más páginas.
TotalResultsJsonPath Falso Cadena Ruta de acceso JSON del número total de resultados en la carga de respuesta HTTP.
PageNumberJsonPath Falso Cadena Ruta de acceso JSON del número de página en la carga de respuesta HTTP. Obligatorio si totalResultsJsonPath se proporciona.
PageCountJsonPath Falso Cadena Ruta de acceso JSON del recuento de páginas en la carga de respuesta HTTP. Obligatorio si totalResultsJsonPath se proporciona.
PagingInfoPlacement Falso Cadena Campo que determina cómo se rellena la información de paginación. Acepta o QueryStringRequestBody.
PagingQueryParamOnly Falso Booleano Campo que determina los parámetros de consulta. Si se establece en true, omite todos los demás parámetros de consulta excepto los parámetros de consulta de paginación.

Ejemplo:

"paging": {
 "pagingType" : "CountBasedPaging", 
 "pageNumberParaName" : "page", 
 "pageSize" : 10, 
 "zeroBasedIndexing" : true, 
 "hasNextFlagJsonPath" : "$.hasNext", 
 "totalResultsJsonPath" : "$.totalResults", 
 "pageNumberJsonPath" : "$.pageNumber", 
 "pageCountJsonPath" : "$.pageCount"
}

Configuración de DCR

Campo Obligatorio Tipo Description
DataCollectionEndpoint Verdadero Cadena Punto de conexión de recopilación de datos (DCE). Por ejemplo: https://example.ingest.monitor.azure.com.
DataCollectionRuleImmutableId Verdadero Cadena Identificador inmutable de DCR. Búsela mediante la visualización de la respuesta de creación de DCR o mediante la API de DCR.
StreamName Verdadero Cadena Este valor es el streamDeclaration definido en dcr. El prefijo debe comenzar por Custom-.

Conector de datos CCF de ejemplo

Este es un ejemplo de todos los componentes del JSON del conector de datos CCF:

{
   "kind": "RestApiPoller",
   "properties": {
      "connectorDefinitionName": "ConnectorDefinitionExample",
      "dcrConfig": {
           "streamName": "Custom-ExampleConnectorInput",
           "dataCollectionEndpoint": "https://example-dce-sbsr.location.ingest.monitor.azure.com",
           "dataCollectionRuleImmutableId": "dcr-32_character_hexadecimal_id"
            },
      "dataType": "ExampleLogs",
      "auth": {
         "type": "Basic",
         "password": "[[parameters('username')]",
         "userName": "[[parameters('password')]"
      },
      "request": {
         "apiEndpoint": "https://rest.contoso.com/example",
         "rateLimitQPS": 10,
         "rateLimitConfig": {
            "evaluation": {
              "checkMode": "OnlyWhen429"
            },
            "extraction": {
              "source": "CustomHeaders",
              "headers": {
                "limit": {
                  "name": "X-RateLimit-Limit",
                  "format": "Integer"
                },
                "remaining": {
                  "name": "X-RateLimit-Remaining",
                  "format": "Integer"
                },
                "reset": {
                  "name": "X-RateLimit-RetryAfter",
                  "format": "UnixTimeSeconds"
                }
              }
            },
            "retryStrategy": {
              "useResetOrRetryAfterHeaders": true
            }
         },
         "queryWindowInMin": 5,
         "httpMethod": "POST",
         "queryTimeFormat": "UnixTimestamp",
         "startTimeAttributeName": "t0",
         "endTimeAttributeName": "t1",
         "retryCount": 3,
         "timeoutInSeconds": 60,
         "headers": {
            "Accept": "application/json",
            "User-Agent": "Example-app-agent"
         } 
      },
      "paging": {
         "pagingType": "LinkHeader",
         "pagingInfoPlacement": "RequestBody",
         "pagingQueryParamOnly": true
      },
      "response": {
         "eventsJsonPaths": ["$"]
      }
   }
}