Forum Discussion

Syndicate_Admin's avatar
Syndicate_Admin
Icon for Administrator rankAdministrator
5 years ago

API de cursor que tiene que retroalimentar sus propios datos

Hola. Estoy trabajando en un panel que extrae sensordata de una API. Aun así, soy struggeling para entender cómo este API espera que maneje sus llamadas cuando i no ha visto cualquier cosa como esto antes.

La documentación describe lo siguiente:

Obtener un lote de nuevas muestras

Devuelve todos los ejemplos desde el último identificador de ejemplo entregado, de todas las secuencias a las que el cliente tiene acceso. sampleID y backfillHours se excluyen mutuamente; si define ambos, se omite backfillHours. Si no se define ninguno de los dos, la API devuelve un lote de muestras desde su último identificador de ejemplo interno entregado.

El uso recomendado de esta API es el siguiente:

  1. La primera vez que llame a esta API, especifique un sampleID o backfillHours para definir el punto de partida desde el que se va a proporcionar el lote de muestras. Además, establezca enableAck en true para que el sistema no actualice su último campo de identificador de ejemplo entregado interno en función del último ejemplo enviado en este lote.
  2. Después de cada llamada a getSamplesBatch, llame a ackSamplesBatch para establecer el 'último identificador de ejemplo entregado interno.

  3. En todas las llamadas a getSamplesBatch excepto en la primera, no especifique un sampleID o backfillHours.

    Si el lote consta de más de 10.000 muestras, se desglosa en trozos de no más de 10.000 muestras cada uno, enviados consecutivamente. La marca de retorno hasMore indica si un fragmento determinado es el último fragmento.

    Tenga en cuenta que las muestras no se envían en orden cronológico. Puede recibir una muestra de hoy seguida de una muestra de ayer, dependiendo de cuándo cada dispositivo transmitió sus datos.

    GetAck: https://XXXXXXXX/batch/ack?id=&agent=

    GetSample: https://XXXXXXX/batch?enableAck=&sampleID=&backfillHours=

    Así que, básicamente, tengo que llamar a la API por primera vez con parámetros y después de eso, tengo que comprobar si la bandera hasMore devuelve true y, si es así, sacar el último SampleID de los datos, alimentarlo al acklink y llamar a la api getsample de nuevo sin ningún parámetro y continuar bucle esto hasta que el indicador hasMore devuelve False.

    Soy bastante nuevo en M-code, así que creo que me falta el conocimiento de cómo manejar esto mejor.


    Hasta ahora tengo esto. Devuelve un error. Utilizo parámetros para los encabezados:

    dejar
    GetPage2 = (id como texto) =>
    dejar
    Ack = Web.Contents("https://XXXXXXXXX/batch/ack?sampleId=" & id & "&agente=",
    [Encabezados = [#"Authorization"=#"Obtener clave de seguridad"]]),

    datos = Web.Contents("https://XXXXXXXXX/batch?enableAck=false&sampleID=&backfillHours=",
    [Encabezados = [#"Authorization"=#"Obtener clave de seguridad"]]),
    resultado = Json.Document(data),
    hasmore = resultado[hasMore],
    muestras = resultado[muestras],
    samples1 = List.Last(samples),
    id = samples1[id],
    páginas = List.Combine(result,lijst),
    continuar =
    if hasmore = "TRUE"
    a continuación, @GetPage2(id)
    páginas else
    en
    continuar

    datos = Web.Contents("https://XXXXXXXXX/batch?enableAck=false&sampleID=&backfillHours=168",
    [Encabezados = [#"Authorization"=#"Obtener clave de seguridad"]]),
    lijst= Json.Document(data),
    hasmore = lijst[hasMore],
    samples = lijst[muestras],
    samples1 = List.Last(samples),
    id = Text.From(samples1[id]),
    Completo = @GetPage2(id)
    en
    íntegro

4 Replies