REST GET e le API pubbliche di SnapLogic per le esecuzioni delle pipeline

4 minuti di lettura
snaplogic_REST_pipeline

Nell'ambito di un progetto analitico più ampio a cui sto lavorando, che prevede l'analisi delle informazioni di runtime della piattaforma SnapLogic, ho scelto di utilizzare le funzionalità esposte a tutti i clienti, l'API pubblica per l'API di monitoraggio delle pipeline e l'API REST. Questi due elementi sono stati combinati in questo post. Ho iniziato leggendo la documentazione (ovviamente), che mostra il formato della richiesta e della risposta. Ho quindi creato una nuova pipeline e ho inserito un REST GET Snap nel canvas:

Volevo ottenere i dati di runtime dall'organizzazione snaplogic sulla piattaforma SnapLogic, quindi nell'URL ho specificato snaplogic come organizzazione. L'altra cosa da ricordare è che l'API richiede l'autenticazione, quindi ho creato un account basic auth con le mie credenziali. Questo funziona bene e mi restituisce le informazioni che volevo, come segue:

[ 
  {  
     "headers": {  
        "x-frame-options": "DENY",
        "connection": "keep-alive",
        "x-sl-userid": "[email protected]",
        "access-control-max-age": "17600",
        "content-type": "application/json",
        "date": "Sun, 31 Jan 2016 01: 29: 59 GMT",
        "access-control-allow-credentials": "true",
        "access-control-allow-methods": "GET, POST, OPTIONS, PUT, DELETE",
        "x-sl-statuscode": "200",
        "content-length": "5175",
        "content-security-policy": "frame-ancestors 'none'",
        "access-control-allow-origin": "*",
        "server": "nginx/1.6.2",
        "access-control-allow-headers": "authorization, x-date, content-type, if-none-match"
     },
     "statusLine": {  
        "reasonPhrase": "OK",
        "statusCode": 200,
        "protoVersion": "HTTP/1.1"
     },
     "entity": {  
        "response_map": {  
           "entries": [  
              {  
                 "pipe_id": "1b10f684-24c0-4002-abd3-09b2e87e975f",
                 "ccid": "56ab61ed63766e7406c491ba",
                 "runtime_path_id": "snaplogic/rt/cloud/dev",
                 "subpipes": { },
                 "state_timestamp": "2016-01-31T01: 29: 43.758000+00: 00",
                 "parent_ruuid": null,
                 "create_time": "2016-01-31T01: 29: 43.484000+00: 00",
                 "id": "0aa7943d-d6c3-408c-9490-1d2b6b281227",
                 "runtime_label": "cloud-dev",
                 "cc_label": "prodxl-jcc1",
                 "documents": 9,
                 "user_id": "[email protected]",
                 "label": "REPORT - NGM FSM Ultra Task Failure Audit",
                 "state": "Completed",
                 "invoker": "scheduled"
              },
           ...another 9 of these...
           ],
           "total": 154,
           "limit": 10,
           "offset": 0
        },
        "http_status_code": 200
     }
  }
]

Si noti la piccola sezione alla fine, con il totale, il limite e l'offset, che indica che ho recuperato solo i primi 10 runtime disponibili. Il recupero di più runtime richiede la funzione di "paginazione" che è stata aggiunta allo Snap REST GET l'anno scorso (la documentazione illustra in dettaglio gli esempi di utilizzo della paginazione con Eloqua, Marketo e HubSpot). I due campi dell'infobox per lo snap sono "Has Next", un booleano che indica se c'è un'ulteriore iterazione da fare, e "Next URL", entrambi espressioni, quindi la condizione può essere dinamica.

snaplogic_mapper

Nel caso della mia API runtime SnapLogic, dovevo capire da questi tre campi (total, limit, offset) come indicare se e quale sarebbe stato l'URL successivo. Quindi, per elaborare la mia logica, ho inserito un mapper Snap next nella pipeline, in modo da poter iterare fino a ottenere le espressioni giuste.
Per dare un'idea del modo in cui ho risolto il problema, ecco lo stato del mio mapper:

L'elemento importante qui è l'espressione che ho usato per indicare se c'è altro da recuperare, hasNext:

$entity.response_map.offset + $entity.response_map.limit <  $entity.response_map.total

Ora posso applicarlo allo snap REST GET, ma prima devo capire come creare l'URL Next. L'URL Next sarà lo stesso dell'URL Service, ma aggiungendo semplicemente "?offset=n", dove n è il numero che ho già recuperato, meno uno, dato che iniziamo sempre il conteggio in vero stile CS, con 0! Quindi il mio URL sarà l'espressione

'https://elastic.snaplogic.com/api/1/rest/public/runtime/snaplogic?offset=' + ($entity.response_map.offset+$entity.response_map.limit)

È necessario assicurarsi che entrambi i campi siano impostati in modalità espressione.

Questo può essere testato per assicurarsi che venga recuperato l'intero set di dati. Quando salvo questa volta, l'anteprima della GET REST è la seguente:

snaplogic_rest_runtimes

Quando l'ho eseguito, il conteggio dei tempi di esecuzione era il seguente:

snaplogic_rest_example

Da qui le diciassette iterazioni.

snaplogic_rest_view

Qui sta un altro problema: vengono fuori diciassette documenti, uno per ogni set di iterazioni, ma con un massimo di 10 (la dimensione limite predefinita) runtime per iterazione.
Questo mi spinge a inserire un JSON Splitter Snap per espanderlo:

json_splitter_snaplogic

Si noti che ho selezionato $entity.response_mpa.entries come percorso JSON da dividere. Questo è selezionabile dal menu a tendina (si noti che ho tagliato la parte inferiore dell'elenco, ma continua per tutte le chiavi del documento:

snaplogic_json_path

Ho incluso anche lo Scalar Parent, in modo che ogni documento includa i genitori diretti:

snaplogic_pipeline

Ora, quando eseguo, otterrò il numero completo di runtime della pipeline, ciascuno come documento separato:

pipeline_runtime_Snaplogic

Nota: si può notare che il numero di tempi di esecuzione nella richiesta varia nel corso di questo articolo; ciò è dovuto alla disponibilità di una serie diversa di dati nel periodo di tempo che ho impiegato per scriverlo. È possibile utilizzare le opzioni dell'API per specificare il periodo della richiesta.

Prossimi passi:

Ex responsabile dei dati di SnapLogic
Categoria: Integrazione
Argomenti: API REST
REST GET e le API pubbliche di SnapLogic per le esecuzioni delle pipeline

Stiamo assumendo!

Scoprite la vostra prossima grande opportunità di carriera.