Elaborazione dell'API di Groupon – Conclusione

Casi limite rari possono compromettere le applicazioni di mappatura dei dati che non sono strettamente integrate. Questo è particolarmente vero quando si elaborano grandi set di dati disponibili su Internet e si ha poca o nessuna influenza sui dati di origine. In questo articolo, descriviamo una tecnica di debug che consente agli sviluppatori che lavorano su progetti di mappatura e trasformazione dei dati di identificare rapidamente e gestire dati inattesi provenienti da una fonte remota. Il problema La scorsa estate, abbiamo pubblicato una serie di articoli sul blog in cui spiegavamo come lavorare con l'API di Groupon per recuperare un sottoinsieme di offerte in tutte le città in cui Groupon è presente e formattare l'elenco per la visualizzazione su un browser web o un dispositivo mobile.

Abbiamo concluso con un comando da riga di comando per eseguire una mappatura dei dati con MapForce, che chiama l'API di Groupon più di 150 volte: una volta per ogni città in cui Groupon è attivo. Successivamente, i dati vengono filtrati per estrarre le offerte vendute online, invece che in un negozio fisico, e i risultati vengono formattati in HTML utilizzando StyleVision. Ogni mattina, eseguiamo questo comando in un file batch che salva l'output HTML su un server locale, in modo che i nostri colleghi possano visualizzarlo con qualsiasi browser per trovare offerte interessanti da tutta la nazione. La mappatura ha funzionato correttamente per più di due mesi, fino a quando un giorno non si è interrotta con questo messaggio di errore: "Impossibile convertire il valore sorgente "" di tipo dateTime nel tipo di destinazione dateTime." La spiegazione specifica è che, in un punto della mappatura in cui ci aspettavamo un valore di tipo dateTime, abbiamo ricevuto un valore vuoto. A un livello più astratto, l'errore suggerisce un potenziale difetto nella logica della nostra strategia di mappatura. Ogni volta che chiamiamo l'API di Groupon, riceviamo un flusso di dati XML ben formattato, racchiuso all'interno di un elemento , ma le specifiche dell'API non includono uno schema XML che definisca i dati che possono essere restituiti. Quando abbiamo sviluppato la nostra mappatura, è stato necessario analizzare i dati grezzi e selezionare l'output desiderato, quindi il nostro primo passo è stato chiamare l'API per acquisire tutte le offerte di Groupon per una vasta area metropolitana. Abbiamo assunto di ottenere un campione di dati sufficientemente ampio da includere tutte le possibili opzioni nella risposta dell'API. Dopo che la nostra mappatura ha funzionato correttamente per due mesi, l'API ha finalmente restituito un caso limite raro che non corrispondeva al modello che ci aspettavamo.

Strumenti di debug MapForce fornisce strumenti di aiuto per il debug. Possiamo eseguire la nostra mappatura dei dati utilizzando il motore di esecuzione integrato di MapForce per visualizzare maggiori dettagli nella finestra dei messaggi.

Le righe etichettate "Posizione correlata" contengono collegamenti ipertestuali che rimandano ai componenti della mappa in cui si è verificato l'errore. Cliccando sull'errore visualizzato, si viene reindirizzati alla funzione "format-dateTime".

Possiamo sia fare clic sull'indicazione di "errore", sia seguire il collegamento del valore per identificare l'elemento di input della funzione "format-dateTime". In entrambi i casi, identifichiamo l'elemento che ha causato l'errore.

L'elemento problematico risiede nel componente di input, che raccoglie tutti i dati restituiti dalle nostre chiamate all'API di Groupon prima che avvengano qualsiasi filtro o conversione. Quando abbiamo progettato la mappatura, l'elemento "endAt" nei nostri dati di esempio indicava sempre la data e l'ora di scadenza per ogni offerta di Groupon, ma per qualche motivo abbiamo ricevuto un valore vuoto in questo campo. Se l'errore si fosse verificato utilizzando un file di input locale, potremmo semplicemente esaminare il contenuto del file, ma in questo caso i dati provengono da più URL e vengono conservati solo temporaneamente fino a quando non vengono mappati al componente di output. Fortunatamente, possiamo utilizzare una tecnica per modificare facilmente la mappatura e preservare tutti i dati ricevuti dall'API di Groupon. Semplicemente, copiamo il componente di input e incolliamo una copia all'interno della mappatura. Possiamo collegare l'elemento di risposta dell'originale alla copia, il che mappa simultaneamente tutti gli elementi secondari tra i due componenti.

Il nostro componente di input originale è ora collegato a due componenti di output. Possiamo selezionare quale componente di output verrà generato dal motore di esecuzione integrato di MapForce facendo clic sull'icona a forma di occhio nell'angolo in alto a destra di qualsiasi componente di output. Il nuovo componente di output salva semplicemente una copia di tutto ciò che si trova nel componente di input. Quando esaminiamo i dati grezzi utilizzando XMLSpy, confermiamo che troviamo un elemento vuoto dove ci aspettavamo di trovare una data e un'ora:

La soluzione

Ora che sappiamo che un'offerta potrebbe non avere una data di scadenza specifica, possiamo tenerne conto nella mappatura. Nella versione aggiornata della gestione dell'elemento "endAt", eseguiamo un controllo "se" prima della funzione originale di formattazione della data e dell'ora, e forniamo un risultato alternativo quando l'elemento "endAt" è vuoto.

Dovevamo lavorare velocemente perché tutti i dati di Groupon sono soggetti a limiti di tempo. Questo caso particolare sarebbe scaduto e scomparso dal flusso di dati. Questa esperienza ci ha dimostrato quanto sia importante disporre di strumenti di debug potenti e utilizzarli in modo creativo, anche quando si pensa che un progetto di mappatura dei dati stia procedendo correttamente! Altova MapForce è Disponibile in versione di prova gratuita – il prossimo caso limite che risolverete potrebbe essere il vostro.

Nota dell'editore: La nostra serie originale sulla mappatura dei dati dall'API di Groupon è stata pubblicata in tre parti, che potete consultare cliccando sui seguenti link: La prima parte, intitolata "Utilizzo di Altova MapForce per l'elaborazione dell'API di Groupon", descrive come creare input dinamici raccogliendo dati da più URL. La seconda parte, intitolata "Elaborazione dell'API di Groupon con MapForce – Parte 2", spiega come abbiamo filtrato i dati provenienti dall'API e definito l'output per estrarre solo le informazioni più rilevanti. La terza parte, intitolata "Elaborazione dell'API di Groupon – Parte 3", descrive come formattare l'output come un singolo documento HTML ottimizzato per dispositivi desktop e mobili, e illustra i modi per automatizzare l'esecuzione ripetuta.