Compartir a través de


Referencia del conector de datos restApiPoller para Codeless Connector Framework

Puede crear un conector de datos de RestApiPoller con codeless Connector Framework (CCF) mediante este artículo como complemento de la API REST de Microsoft Sentinel para conectores de datos documentos.

Cada conector de datos representa un connection específico 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 Crear un conector sin código para Microsoft Sentinel.

Creación o actualización de conectores de datos

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

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 del identificador URI

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

Nombre Descripción
dataConnectorId Identificador del conector de datos. Debe ser un nombre único que sea el mismo que el 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 Nombre del área de trabajo, no el identificador.
El patrón regex es .
api-version Versión de API que se usará para la operación.

Cuerpo de la solicitud

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

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

RestApiPoller

es un conector de datos CCF del 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 Descripción
name Cierto Cuerda Nombre único de la conexión que coincide con el parámetro URI.
kind Cierto Cuerda Valor de tipo . Este campo debe establecerse en .
etag Identificador Único Global (GUID) Valor de tipo . Este campo debe dejarse vacío para la creación del nuevo conector. Para las operaciones de actualización, debe coincidir con el conector existente (GUID).
properties.connectorDefinitionName Cuerda Nombre del recurso que define la configuración de la interfaz de usuario del conector de datos. Para más información, vaya a Definición del conector de datos.
properties.auth Cierto 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 Cierto 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 Configuración de solicitudes.
properties. response Cierto 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 Los 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

CcF admite los siguientes tipos de autenticación:

  • Básico
  • Clave de API
  • OAuth2
  • JWT

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 inicio adicional. Este paso permite que los parámetros asignen un valor en función de la interacción del usuario con el conector. Para obtener más información, consulte Caracteres de escape de expresiones de plantilla.

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

Autenticación básica

Campo Obligatorio Tipo
UserName Cierto Cuerda
Password Cierto Cuerda

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

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

Clave de API

Campo Obligatorio Tipo Descripción Valor predeterminado
ApiKey Cierto Cuerda Clave secreta de usuario.
ApiKeyName Cuerda Nombre del encabezado URI que contiene el valor. Authorization
ApiKeyIdentifier Cuerda 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 del encabezado. false

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 siguiente encabezado: : .

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

En este ejemplo se usan los valores predeterminados y se produce el siguiente encabezado: : .

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

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

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 para un token de acceso.

Después de que el usuario vuelva 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 Descripción
ClientId Verdadero. Cuerda Identificador de cliente.
ClientSecret Verdadero. Cuerda Secreto de cliente.
AuthorizationCode True cuando el valor es . Cuerda Si el tipo de concesión es , este valor de campo es el código de autorización que devolvió el servidor de autenticación.
Scope True para el tipo de concesión.
Opcional para el tipo de concesión.
Cuerda 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 valor es . Cuerda La dirección URL para el redireccionamiento debe ser .
GrantType Verdadero. Cuerda Tipo de concesión. Puede ser o .
TokenEndpoint Verdadero. Cuerda Dirección URL para intercambiar código con un token válido en la concesión, o un identificador de cliente y un secreto con un token válido en la concesión.
TokenEndpointHeaders Objeto Objeto de clave/valor opcional para enviar encabezados personalizados al servidor de tokens.
TokenEndpointQueryParameters Objeto Objeto de clave/valor opcional para enviar parámetros de consulta personalizados al servidor de tokens.
AuthorizationEndpoint Verdadero. Cuerda Dirección URL del consentimiento del usuario para el flujo.
AuthorizationEndpointHeaders Objeto Objeto de clave/valor opcional para enviar encabezados personalizados al servidor de autenticación.
AuthorizationEndpointQueryParameters Objeto Un par de clave-valor opcional que se usa 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 :

"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 :

"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 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. Envíe credenciales para obtener el token JWT.

    • Si : envía un encabezado de autenticación básico con .
    • Si : envía credenciales en un cuerpo.
  2. Extraiga el token mediante o desde el encabezado de respuesta.

  3. Use el token en las solicitudes de API posteriores con el encabezado .

Campo Obligatorio Tipo Descripción
type Cierto Cuerda Tipo. Debe ser
userName True (si no se usa) Objeto Par clave-valor para la credencial. Si y se envían en la solicitud de encabezado, especifique la propiedad con el nombre de usuario. Si y se envían en la solicitud body, especifique y .
password True (si no se usa) Objeto Par clave-valor para la credencial de contraseña. Si y se envían en la solicitud de encabezado, especifique la propiedad con . Si y se envían en la solicitud body, especifique y .
userToken True (si no se usa) Cuerda Token de usuario generado por el cliente para obtener el token del sistema para la autenticación.
UserTokenPrepend Falso Cuerda Valor que indica si se va a anteponer el texto antes del token. Ejemplo: .
NoAccessTokenPrepend Falso Booleano Marca de acceso que indica que el token no debe anteponer nada.
TokenEndpointHttpMethod Falso Cuerda Método HTTP para el punto de conexión de token. Puede ser o . El valor predeterminado es .
TokenEndpoint Cierto Cuerda Punto de conexión de dirección URL que se usa para obtener el token JWT.
IsCredentialsInHeaders Booleano Valor que indica si se deben enviar credenciales como un encabezado de autenticación básico () frente a un cuerpo (). El valor predeterminado es .
IsJsonRequest Booleano Valor que indica si se va a enviar la solicitud en JSON (encabezado ) frente a codificada con formato (encabezado ). El valor predeterminado es .
JwtTokenJsonPath Cuerda Valor que indica el valor que se va a usar para extraer el token de la respuesta. Por ejemplo: .
JwtTokenInResponseHeader Booleano Valor que indica si se va a extraer el token del encabezado de respuesta frente al cuerpo. El valor predeterminado es .
. Cuerda Valor que indica el nombre del encabezado cuando el token está en el encabezado de respuesta. El valor predeterminado es .
JwtTokenIdentifier Cuerda 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 , con un valor máximo de .

Siga este flujo de autenticación:

  1. Envíe credenciales para obtener el token JWT.

    • Si : envía un encabezado de autenticación básico con .
    • Si : envía credenciales en un cuerpo.
  2. Extraiga el token mediante o desde el encabezado de respuesta.

  3. Use el token en las solicitudes de API posteriores con el encabezado .

    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 sondear ese punto de conexión).

Campo Obligatorio Tipo Descripción
ApiEndpoint Verdadero. Cuerda Este campo determina la dirección URL del servidor remoto y define el punto de conexión desde el que extraer datos.
RateLimitQPS Entero Este campo define el número de llamadas o consultas permitidas en un segundo.
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 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 Cuerda Este campo define el método de API: (valor predeterminado) o .
QueryTimeFormat Cuerda 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 donde se use esta variable. Los valores posibles son las constantes: , o cualquier otra representación válida de fecha y hora. Por ejemplo: , .
El valor predeterminado es .
RetryCount Entero (1...6) Este campo define que los valores de en los reintentos pueden recuperarse de un error. El valor predeterminado es .
TimeoutInSeconds Entero (1...180) Este campo define el tiempo de espera de la solicitud en segundos. El valor predeterminado es .
IsPostPayloadJson Booleano Este campo determina si la carga está en formato JSON. El valor predeterminado es .
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 valor. Cuerda 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 ejemplo.
EndTimeAttributeName True cuando se establece. Cuerda Este campo define el nombre del parámetro de consulta para la hora de finalización de la consulta.
QueryTimeIntervalAttributeName Cuerda 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 parámetros y . Para obtener más información, vaya al ejemplo.
QueryTimeIntervalPrepend True cuando se establece. Cuerda Referencia a .
QueryTimeIntervalDelimiter True cuando se establece. Cuerda Referencia a .
QueryParametersTemplate Cuerda Este campo hace referencia a la plantilla de consulta que se va a usar al pasar parámetros en escenarios avanzados.

Por ejemplo: .

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

Variable integrada Para su uso en Para su uso en
_QueryWindowStartTime Yes Yes
_QueryWindowEndTime Yes Yes
_APIKeyName No Yes
_APIKey No Yes

Ejemplo de StartTimeAttributeName

Considere este ejemplo:

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

La consulta enviada al servidor remoto es: .

Ejemplo de QueryTimeIntervalAttributeName

Considere este ejemplo:

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

La consulta enviada al servidor remoto es: .

Ejemplo de RateLimitConfig

Considere este ejemplo:

.

"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 cabeceras de límite de velocidad, el conector puede usar esta información para ajustar su tasa de solicitud.

Solicitar ejemplos que usan Microsoft Graph como API de origen de datos

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

"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 solicitud a . La marca de tiempo se actualiza cada vez.

Con este ejemplo se obtienen 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 solicitud a .

Para consultas complejas, use . En este ejemplo se envía una 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 Descripción
EventsJsonPaths Cierto 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 Cuerda Define la ruta de acceso al mensaje de operación correcta en el JSON de respuesta. Cuando se define este parámetro, también se debe definir el parámetro .
SuccessStatusValue Cuerda 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 Cierto Cuerda Determina si el formato es , o .
CompressionAlgo Cuerda Define el algoritmo de compresión, ya sea o . Para el algoritmo de compresión GZIP, configure para en lugar de establecer un valor para este parámetro.
CsvDelimiter Cuerda Hace referencias 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 .
CsvEscape Cuerda Define un carácter de escape para un límite de campo. El valor predeterminado es .

Por ejemplo, un CSV con encabezados y una fila de datos que contienen espacios como requiere el límite del 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:

La especificación analiza el tipo de formato CSV.

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 la propiedad. El estado de la propiedad de respuesta indica que se ingieren los datos solo si el valor es .

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

La respuesta esperada de este ejemplo se prepara para un 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 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 la API admite un parámetro para el número de objetos que se omitirán al paginar?
¿La respuesta de la 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 .

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

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

-type paging tiene las mismas propiedades que , excepto que el encabezado de vínculo persiste en el almacenamiento back-end. Esta opción permite paginar vínculos entre ventanas de consulta.

Por ejemplo, algunas API no admiten las horas de inicio o las horas de finalización de 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, consulte ¿Qué es un cursor?.

Nota:

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

Campo Obligatorio Tipo Descripción
LinkHeaderTokenJsonPath Falso Cuerda 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: , el valor es .
PageSize Falso Entero Use esta propiedad para determinar el número de eventos por página.
PageSizeParameterName Falso Cuerda Use este nombre de parámetro de consulta para indicar el tamaño de página.
PagingInfoPlacement Falso Cuerda Use esta propiedad para determinar cómo se rellena la información de paginación. Acepta o .
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 
}

Configurar NextPageUrl

La paginación de tipo significa que la respuesta de la API incluye un vínculo complejo en el cuerpo de la respuesta similar a , pero la dirección URL se incluye en el cuerpo de la respuesta en lugar del encabezado.

Campo Obligatorio Tipo Descripción
PageSize Falso Entero Número de eventos por página.
PageSizeParameterName Falso Cuerda Nombre del parámetro de consulta para el tamaño de página.
NextPageUrl Falso Cuerda 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 Cuerda Nombre de la página siguiente en la solicitud.
HasNextFlagJsonPath Falso Cuerda Ruta de acceso al atributo flag.
NextPageRequestHeader Falso Cuerda Nombre del encabezado de página siguiente en la solicitud.
NextPageUrlQueryParametersTemplate Falso Cuerda Campo que solo se usa si el conector es para la API de Coralogix.
PagingInfoPlacement Falso Cuerda Campo que determina cómo se rellena la información de paginación. Acepta o .
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\")}" 
}

Configurar NextPageToken o PersistentToken

-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 la 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.

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 las solicitudes posteriores. El cliente continúa donde se dejó, incluso si realiza nuevas solicitudes más adelante.

Campo Obligatorio Tipo Descripción
PageSize Falso Entero Número de eventos por página.
PageSizeParameterName Falso Cuerda Nombre del parámetro de consulta para el tamaño de página.
NextPageTokenJsonPath Falso Cuerda Ruta de acceso JSON para el token de página siguiente en el cuerpo de la respuesta.
NextPageTokenResponseHeader Falso Cuerda Campo que especifica que si está vacío, use el token en este nombre de encabezado para la página siguiente.
NextPageParaName Falso Cuerda Campo que determina el nombre de página siguiente en la solicitud.
HasNextFlagJsonPath Falso Cuerda Campo que define la ruta de acceso a un atributo flag al determinar si quedan más páginas en la respuesta.
NextPageRequestHeader Falso Cuerda Campo que determina el nombre del encabezado de página siguiente en la solicitud.
PagingInfoPlacement Falso Cuerda Campo que determina cómo se rellena la información de paginación. Acepta o .
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" 
}

Configurar desplazamiento

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

Campo Obligatorio Tipo Descripción
PageSize Falso Entero Número de eventos por página.
PageSizeParameterName Falso Cuerda Nombre del parámetro de consulta para el tamaño de página.
OffsetParaName Falso Cuerda Nombre del parámetro de consulta de solicitud siguiente. El CCF calcula el valor de desplazamiento de cada solicitud (todos los eventos ingeridos + 1).
PagingInfoPlacement Falso Cuerda Campo que determina cómo se rellena la información de paginación. Acepta o .
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

La paginación de tipo permite al cliente especificar el número de elementos que se van a devolver 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 Descripción
pageNumberParaName Cierto Cuerda Nombre de 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 Cuerda Ruta de acceso JSON de la marca en la carga de respuesta HTTP que indica que hay más páginas.
TotalResultsJsonPath Falso Cuerda Ruta de acceso JSON del número total de resultados en la carga de respuesta HTTP.
PageNumberJsonPath Falso Cuerda Ruta de acceso JSON del número de página en la carga de respuesta HTTP. Obligatorio si se proporciona.
PageCountJsonPath Falso Cuerda Ruta de acceso JSON del recuento de páginas en la carga de respuesta HTTP. Obligatorio si se proporciona.
PagingInfoPlacement Falso Cuerda Campo que determina cómo se rellena la información de paginación. Acepta o .
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 Descripción
DataCollectionEndpoint Cierto Cuerda Punto final de recopilación de datos (DCE). Por ejemplo: .
DataCollectionRuleImmutableId Cierto Cuerda Identificador inmutable de DCR. Para encontrarlo, consulte la respuesta de creación de DCR o mediante la API de DCR.
StreamName Cierto Cuerda Este valor es el definido en el DCR. El prefijo debe comenzar por .

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": ["$"]
      }
   }
}