Volver al blog
TutorialOctober 1, 20228 min

Serie di Esempi: Richieste Http-Client

Le interfacce ReST sono popolari e abbondanti. Ti mostriamo come configurare le richieste Http-Client all'interno di layline.io utilizzando Yahoo Finance come esempio.

Serie di Esempi: Richieste Http-Client

Cosa mostreremo

In questo articolo mostreremo come configurare rapidamente un workflow di layline.io per interrogare un REST-API utilizzando come esempio l'API di Yahoo Finance. Creeremo un workflow che interroga Yahoo per le quotazioni azionarie a intervalli frequenti.

Configurazione del servizio Http

Per prima cosa avviamo l'interfaccia web e creiamo un nuovo Progetto "sample-http-client-yahoo". Quindi creiamo un Asset Http-Service "Yahoo-Finance-Source".

Cosa sono i Servizi?

I Servizi in layline.io rappresentano Assets specifici che incapsulano definizioni di interfacce complesse e le espongono ad altri Assets come semplici chiamate di funzione denominate per un facile invocazione. Le definizioni REST-API si adattano a questo schema, così come ad esempio le istruzioni del database. A questo scopo, layline.io fornisce una serie di Service Assets orientati verso i tipi specifici di interfaccia, come Http, JDBC, Aerospike e altri. Nel nostro esempio, utilizzeremo l'Http-Service Asset per accedere all'API di Yahoo Finance.

L'API REST delle quotazioni azionarie di Yahoo

Yahoo Finance fornisce un'API molto completa per accedere alle informazioni finanziarie delle società quotate pubblicamente. Per questa demo passeremo attraverso Rapid-API che funge da servizio proxy. Se non conosci Rapid-API, dovresti dargli un'occhiata. È davvero interessante.

Puoi trovare l'URL esatto del servizio e la sua descrizione qui, quindi controlla il percorso "market/v2/get-quotes".

Configurazione del servizio Http

Utilizzando il Configuration Center creiamo un Asset Http-Service:

Host

Successivamente definiamo l'indirizzo host generico presso il quale i dati possono essere accessibili. Questo non richiede credenziali, ma chiavi API che definiremo in seguito.

Richieste

Prima di definire le Funzioni, ci assicuriamo che layline.io comprenda le richieste e le risposte corrispondenti. Puoi definire un numero qualsiasi di richieste. Qui definiamo solo "GetQuotes" che dovrebbe recuperare le quotazioni azionarie e i dati correlati per un determinato numero di simboli ticker azionari. Questo è anche il punto in cui viene definito il percorso della richiesta. Inoltre, configuriamo i parametri richiesti per invocare l'API (regione e simboli, oltre alla chiave e host RapidAPI). Forniamo i valori quando definiamo l'Asset Source in un passaggio successivo.

Se volessimo utilizzare altre richieste, potremmo semplicemente aggiungerle qui.

Risposta

Successivamente definiamo le possibili risposte alla nostra richiesta. Ci aspettiamo un documento JSON che abbiamo definito in "Quotes". layline.io è fortemente tipizzato. Nel nostro caso mappiamo semplicemente la risposta al tipo interno "AnyMap". Risposte aggiuntive potrebbero essere errori da 3xx a 5xx che ci interessano anche.

Funzioni

Ora che abbiamo definito richieste e risposte, possiamo creare le funzioni astratte che vogliamo esporre internamente.

Creiamo una funzione con il nome "GetQuotes". Fa riferimento alla richiesta con lo stesso nome che abbiamo creato sopra e assegna possibili risposte a questa richiesta ("Quotes").

Ora possiamo accedere all'API di Yahoo Finance semplicemente invocando la funzione "GetQuotes" e passando i parametri richiesti. Vedremo un esempio di questo quando definiremo il Service Source qui sotto.

Ahimè, un bel po' da configurare per un primo Http-Service. Ma nota che richieste aggiuntive allo stesso host possono essere aggiunte molto rapidamente.

Configurazione del Service-Source

Abbiamo intenzione di interrogare costantemente l'API per ottenere i dati azionari più recenti e vogliamo trattarla come una normale fonte di dati nel workflow. Dobbiamo definire un Asset Service-Source per questo. Un Asset Service-Source è un tipo speciale di Source che utilizza Funzioni definite in Service Assets, proprio come quello che abbiamo definito sopra.

Colleghiamo l'Http-Service che abbiamo definito a questo Source:

Infine, impostiamo la frequenza di polling dell'API e i parametri effettivi della chiamata API.

Attraverso un'impostazione simile a una tabella cron definiamo un intervallo di query di 10 secondi. Object name denota il nome dell'oggetto che verrà restituito da ciascuna query. Nota che aggiungiamo la data e l'ora al nome dell'oggetto per distinguere ciascun oggetto di risposta. Utilizziamo un parametro costante per il polling, il che significa nient'altro che vogliamo passare parametri codificati alla funzione di servizio invece di parametri dinamici. Quindi stiamo sempre invocando la funzione per gli stessi simboli ticker azionari nel nostro esempio. Il Constant Type descrive il percorso verso la funzione di servizio effettiva che vogliamo chiamare e il suo oggetto di richiesta. Per ora questo deve essere inserito manualmente, ma sarà guidato dall'utente a breve. Inseriamo Yahoo.Finance.Functions.GetQuotes.Request qui.

Infine, forniamo i parametri che vogliamo passare alla funzione GetQuotes in formato JSON. Ricorda che li abbiamo definiti quando abbiamo creato l'Asset Http-Service.

Ecco fatto, ora possiamo creare il workflow effettivo.

Creazione del Workflow

Andiamo all'interfaccia del Workflow e impostiamo un semplice Workflow con un Stream-Input e un JavaScript Processor.

Nelle impostazioni per l'Asset Service-Input lo colleghiamo all'Http-Source che abbiamo appena creato.

Per il Javascript Processor aggiungiamo uno script molto semplice che invia il messaggio ricevuto al log dello stream. Questo è il modo in cui possiamo ispezionare i risultati tramite l'Audit Trail nell'interfaccia. Naturalmente, normalmente non invieresti i risultati al log, ma li elaboreresti a valle nel Workflow.

Distribuzione al Cluster ed esecuzione

Siamo pronti per testare il Workflow. Per farlo dobbiamo distribuirlo a un Reactive Engine Cluster. Puoi semplicemente usare quello sul tuo laptop (singolo nodo). Oppure, se hai un cluster layline.io più grande altrove, puoi distribuirlo lì. Per distribuire passiamo alla scheda DEPLOYMENT del Progetto:

Creiamo una Configurazione dell'Engine per distribuire il Progetto. Questo definisce le parti del Progetto che desideriamo distribuire. Nel nostro esempio sarebbe il Workflow che abbiamo definito, così come l'Asset Environment che lo accompagna.

Poiché vogliamo distribuire al cluster locale, scegliamo "Deploy to Cluster" e quindi la nostra configurazione "Local Cluster" predefinita. Ogni distribuzione necessita di un Tag. Utilizziamo "yahoo-quotes-" seguito da una macro "${build-timestamp}" per identificare la Distribuzione. La macro verrà sostituita da un timestamp al momento del trasferimento della distribuzione. Questo assicura che otteniamo sempre un tag diverso con ciascuna Distribuzione.

Selezioniamo di distribuire tutti i Workflows che abbiamo creato (solo uno). Infine, avviamo il trasferimento della distribuzione cliccando su "TRANSFER DEPLOYMENT TO CLUSTER" (Assicurati che il Cluster su cui stai distribuendo sia attivo e funzionante).

Se la distribuzione è andata bene dovresti vedere questo:

Altrimenti, verrà visualizzato un messaggio di errore che ti guiderà su come risolvere il problema.

Attivazione della Distribuzione

Dovremmo ora essere pronti per attivare la Distribuzione. Per questo, passiamo alla scheda "CLUSTER". Questo ci dà una vista di tutte le cose "cluster". Nel caso tu stia gestendo più di un cluster, assicurati di aver selezionato quello corretto dal menu a discesa in alto a sinistra.

Renderla la Distribuzione predefinita

Seleziona "Deployment Storage" dall'albero a sinistra. Qui troviamo tutte le Distribuzioni attualmente conosciute dal cluster selezionato. Nel nostro esempio di screenshot, nella sezione "Deployment Configuration" vediamo 1 "DeploymentRoot": Questa è la distribuzione predefinita vuota di base che è sempre presente. 2 "yahoo-quotes-20221011093550": Questa è la Distribuzione che abbiamo appena trasferito al cluster. Per attivare ora la nuova Distribuzione sul cluster selezionala e quindi seleziona la casella "is the cluster's default deployment".

Pianificazione

Ora che la Distribuzione è attiva sul Cluster, dobbiamo verificare se sta effettivamente eseguendo istanze del Workflow. Se questa è la prima volta che hai distribuito questo Workflow, la risposta è probabilmente "no". Verifichiamo:

  • Seleziona la scheda "Cluster"
  • Seleziona la voce "Scheduler Master" nell'albero a sinistra

  • Nella Scheduler Settings Box seleziona il nodo Scheduler nell'albero
  • Successivamente assicurati che il numero target di istanze sia impostato almeno a 1. Impostarlo su un numero più alto avvierà più istanze dello stesso Workflow. Entro pochi secondi dovresti vedere l'istanza avviata. Devi fare questo solo una volta. La prossima volta che distribuisci il Workflow, il Reactive Engine ricorderà il numero di istanze che vuoi eseguire da questo Workflow. Puoi anche definire le impostazioni dello Scheduler che desideri come parte di una Distribuzione. Ma questo è per un'altra dimostrazione.

Stato dell'Engine

Passa alla scheda "Engine". Assicurati che tutte le categorie dell'Engine siano verdi. Controlla anche lo stato dei singoli Asset nell'albero a sinistra.

Verifica dei Risultati

Non appena hai pianificato il Workflow (sopra), inizia a interrogare l'interfaccia di Yahoo Finance per i risultati ogni pochi secondi.

Vai alla scheda Audit Trail per vedere i risultati che appaiono nel Stream Log in formato JSON:

Ovviamente, questo output è solo per scopi dimostrativi. In un ambiente di lavoro reale elaboreresti questi dati a valle nel Workflow.

Sommario

Questa dimostrazione evidenzia come puoi creare un Http-Client-Workflow al volo senza troppi problemi. E ottieni molto di più con questo fuori dalla scatola:

  • Reactive — Abbraccia il paradigma di elaborazione reattiva. Completamente costruito sulla gestione dei flussi reattivi al nucleo
  • Alta scalabilità — Si scala all'interno di un'istanza di motore e oltre, su più motori e nodi distribuiti
  • Resilienza — Sicuro contro i guasti in ambienti distribuiti. Operatività completa 24/7 e aggiornabilità
  • Distribuzione automatica — Distribuisci le configurazioni modificate con un clic
  • Real-time e batch — Esegui integrazioni di dati sia in tempo reale che batch utilizzando la stessa piattaforma
  • Metriche — Generazione automatica delle metriche da utilizzare nel tuo toolkit di monitoraggio e allerta preferito (es. Prometheus)

Ci sono troppe funzionalità da spiegare qui. Per maggiori informazioni, consulta la documentazione o contattaci semplicemente a hello@layline.io. Grazie per aver letto!

Risorse

#Risorsa
1Github: Sample Http-Client for Yahoo Finance (file di test di input nella directory _test_files del Progetto)
Share:

Enjoyed this article?

Subscribe to get more insights delivered to your inbox.