Importazione dei dati del servizio Web: la nuova richiesta HTTP in JMP ® 14 (US 2018 231)
Livello: Intermedio
Bryan Boone, sviluppatore software principale di JMP, SAS
Gli enti pubblici e privati stanno rendendo sempre più disponibili i propri dati su Internet tramite i servizi RESTful. JMP 14 ha una nuova funzione chiamata Richiesta HTTP , disponibile tramite JSL, che consente di accedere a questi servizi RESTful. Questo documento descrive cosa sono i servizi RESTful e fornisce diversi esempi su come utilizzarli Richiesta HTTP per portare nuovi dati in JMP.
Cos'è il RIPOSO
REST, o Representational state transfer, è un modo per fornire l'interoperabilità tra i sistemi informatici su Internet. Un servizio RESTful è un servizio basato sul Web che utilizza questo paradigma. Un'API RESTful è un'API (Application Program Interface) che utilizza le richieste HTTP per OTTENERE , INVIARE , METTERE E ELIMINARE dati per interagire con il servizio RESTful.
Il protocollo HTTP definisce un insieme di metodi HTTP di richiesta per indicare l'azione che un client vorrebbe che un server eseguisse su una risorsa. Sono:
OTTENERE
|
Richiedi la risorsa
|
TESTA
|
Richiedi solo i metadati della risorsa
|
INVIARE
|
Richieste di accettare la risorsa
|
METTERE
|
Richieste di archiviare o creare la risorsa
|
ELIMINARE
|
Richieste di eliminare la risorsa
|
TOPPA
|
Richiesta di modificare lo stato di una risorsa
|
Nuova terminologia, attività familiari
Questo può sembrare un concetto completamente nuovo, ma hai già familiarità con due dei metodi di richiesta più comuni, OTTENERE E INVIARE .
OTTENERE
OTTENERE ha due personalità.
La prima personalità è giusta OTTENERE -ting una risorsa. Cioè, l'intento è semplicemente accedere a una risorsa web. Questo può essere visto nella Figura 1. Qui, il browser sta accedendo alla pagina web.
Figura 1. “ OTTENERE per una risorsa web”
Il secondo è OTTENERE -ting (accesso) a una risorsa, insieme a quella che è nota come stringa di query. Una stringa di query è un insieme di coppie chiave/valore definite dalla risorsa Web e utilizzate dal client per richiedere al server di filtrare o modificare il OTTENERE richiesta utilizzando questi parametri. Questo può essere visto nella Figura 2. Qui il browser chiede al server di modificare un file OTTENERE richiesta utilizzando:
INVIARE
INVIARE , invece, è più complesso. UN INVIARE chiede al server di modificare o creare una risorsa. UN INVIARE tipicamente contiene un modulo HTML che a sua volta contiene una raccolta di coppie chiave/valore di dati carattere e/o coppie chiave/valore di file. La figura 3 è un esempio che firma un utente in Amazon. Qui le coppie chiave/valore sono:
E-mail
|
La tua email accedi
|
Parola d'ordine
|
La tua password
|
IL "Registrazione" pulsante esegue il INVIARE

Figura 3. “ INVIARE formare i dati in una risorsa web”
Perché usarlo
Il protocollo HTTP ci permette di pensare alle super autostrade dell'informazione come “Le autostrade sono asfaltate; i segnali stradali sono presenti e i ponti sono stati costruiti. Lo standard ha consentito la formazione di nuove società di gestione dei dati. Inoltre, l'adozione dello standard HTTP ha rimosso i silos di informazioni che si trovano spesso nelle aziende affermate. Alcune di queste società includono:
Text-Processing.com (Dati sentiment)
|
Jenkins
|
Jira
|
L'HUB
|
Ufficio 365
|
Google
|
Casella di riepilogo
|
Una guida
|
AWS (Amazon Web Services)
|
Ufficio censimento degli Stati Uniti
|
NASA
|
PubChem
|
New York Times
|
Fitbit
|
Yahoo
|
Bitcoin
|
Fumetti Marvel
|
SAS
|
ApriAQ
|
JMP
|
Come usarlo
JSON
JSON (JavaScript Object Notation) è un formato di interscambio di dati leggero. Si basa su un sottoinsieme del linguaggio di programmazione JavaScript. JSON è un formato di testo indipendente dalla lingua ma utilizza concetti già familiari alla maggior parte dei programmatori.
JSON si basa su due strutture:
- Una raccolta di coppie nome/valore. (dizionario, hash table, array associativo, …)
- Un elenco ordinato di valori. (array, vettore, elenco, ...)
Nuova terminologia, attività familiari (di nuovo)
JSL
JSL è il linguaggio di scripting preferito quando è coinvolto JMP. JSON potrebbe essere un nuovo termine, ma JSL supporta le due strutture di dati richieste da JSON.
Elenco
Liste sono contenitori per conservare oggetti, come i seguenti:
- numeri
- variabili
- stringhe di caratteri
- espressioni (ad esempio, assegnazioni o chiamate di funzione)
- matrici
- liste nidificate
matrice associativa
- UN matrice associativa associa chiavi univoche a valori che possono essere non univoci. Un array associativo è anche chiamato dizionario, mappa, mappa hash o tabella hash.
JSL contiene anche due funzioni specifiche dell'elaborazione JSON.
Analizza JSON
- Converte il testo JSON in un array o un elenco associativo in base alla struttura dei dati JSON.
Come JSON Expr
- Restituisce una rappresentazione JSON dell'espressione.
Queste funzioni consentono all'autore dello script di convertire senza problemi da e verso contenitori JSL e JSON.
Richiesta HTTP
Richiesta HTTP è nuovo in JMP 14. Originariamente, la tecnologia è stata creata per gestire l'interazione tra JMP e JMP Public. Ci si è presto resi conto che aveva ulteriori applicazioni oltre alla pubblicazione di dati su JMP Public e la tecnologia è emersa in JSL come Richiesta HTTP .
Prime richieste HTTP
Richiesta HTTP supporta perfettamente sia il protocollo http che https e incapsula gran parte del comportamento che ti aspetteresti da cURL.
“cURL viene utilizzato nelle righe di comando o negli script per trasferire i dati. Viene utilizzato anche in automobili, televisori, router, stampanti, apparecchiature audio, telefoni cellulari, tablet, set-top box, lettori multimediali ed è la spina dorsale del trasferimento Internet per migliaia di applicazioni software che colpiscono miliardi di esseri umani ogni giorno.
Ancora più importante, puoi pensare Richiesta HTTP come il collante che lega le risorse web a JSL. Questo è, Richiesta HTTP comunica con una risorsa Web e consente allo script writer di elaborare le risposte in JSL. La complessità JSL è controllata dall'autore.
I metodi HTTP più comuni che utilizzi durante l'interazione con una risorsa web sono:
Utilizzo della richiesta HTTP in un'azione GET
UN OTTENERE l'azione è probabilmente la più comune Richiesta HTTP azione. Questa azione è un'azione di sola lettura che può portare i dati in JMP.
Messaggi comuni per Richiesta HTTP :
- "Metodo"
- "URL"
- "Stringa della domanda"
- "Inviare"

Figura 4. “ Richiesta HTTP OTTENERE "
Richiesta HTTP OTTENERE le azioni sono spesso accompagnate da a "Stringa della domanda" per inviare parametri a una risorsa web. La figura 5 utilizza un Richiesta HTTP con un "Stringa della domanda" . In JSL, a "Stringa della domanda" è un matrice associativa che associa una chiave a un valore di carattere o a Elenco dei valori caratteriali. Quando viene eseguito lo script nella Figura 5, l'URL verrà espanso automaticamente in:
http://quotes.rest/qod.json?category=inspire
Figura 5. “ Richiesta HTTP OTTENERE usare un ' Stringa della domanda' "
Utilizzo della richiesta HTTP in un'azione POST
Richiesta HTTP INVIARE le azioni sono spesso più complesse.
Messaggi comuni per Richiesta HTTP :
- "Metodo"
- "URL"
- "Modulo"
- "JSON"
- "File"
- "Macchia"
- "Inviare"
La figura 6 mostra un Richiesta HTTP “ Modulo" dati. In JSL, "Modulo" i dati possono avere due attributi, "Campi" e/o "File" . Sono entrambi JSL Array associativi che associano una chiave a un valore di carattere o a Elenco dei valori caratteriali. Nel caso del "File" , il valore del carattere o Elenco di valori di caratteri sono i nomi dei file che si desidera aggiungere al " Modulo".

Figura 6. “ Richiesta HTTP INVIARE usare un Modulo "
La figura 7 mostra un Richiesta HTTP “ JSON" dati. In JSL, "JSON" può essere un matrice associativa o dati carattere in formato JSON. Come JSON Expr creerà un oggetto JSON ben definito da usare con Richiesta HTTP . I dati JSON vengono inviati come corpo della richiesta.
Figura 7. “ Richiesta HTTP INVIARE usando ' JSON' "
La figura 8 mostra un Richiesta HTTP “ File" dati. In JSL, "File" è il nome del file che vuoi inviare come corpo della richiesta.
Figura 8. “ Richiesta HTTP INVIARE usando ' File' "
Un'ultima azione per Richiesta HTTP “ chiazza" dati. In JSL, "Macchia" è un dato BLOB binario che si desidera inviare come corpo della richiesta. Ciò significa che non è necessario scrivere un file su disco prima di inviarlo come parte di una richiesta.
IL OTTENERE action è la richiesta più semplice da fare while INVIARE è il più complesso. L'interazione tra Richiesta HTTP e la risorsa web è sempre definita dal server. Sebbene il protocollo HTTP sia uno standard ben definito, i dati (e le strutture dei dati) sono definiti in base alla risorsa web. Cioè, l'API di One Drive è diversa da Dropbox, sebbene svolgano funzioni simili.
Ritornare al mittente
Dati da un Richiesta HTTP “ Inviare" il messaggio può essere dati carattere, dati BLOB binari o vuoto, a seconda della risorsa Web. Controllo " È vuoto" sui dati restituiti è il livello più grossolano di indagine dei dati (oltre a nessuno). Tuttavia, se hai bisogno di un livello di indagine a grana fine puoi usare " è stringa” per controllare i dati dei caratteri.
Per un livello di indagine ancora più dettagliato è possibile utilizzare "Ottieni tipo MIME" . Tipi MIME comuni possono essere trovati nel file Elenco incompleto dei tipi MIME articolo nella sezione Riferimenti del documento.
Infine, se necessario, puoi esaminare i codici di stato HTTP di basso livello da una risorsa Web utilizzando questi messaggi:
"Ha informazioni"
|
100-199
|
"Ha successo"
|
200-299
|
"Ha reindirizzamento"
|
300-399
|
"Ha un errore del client"
|
400-499
|
"Ha un errore del server"
|
500-599
|
"Con errore"
|
Presenta un errore del client o del server
|
"Ottieni stato"
|
Il codice di stato HTTP
|
Le descrizioni dei codici di stato HTTP sono disponibili nel file Definizioni del codice di stato articolo nella sezione Riferimenti del documento.
Dove usarlo
Sebbene Richiesta HTTP è in grado di contenere dati di carattere o dati di blob binari da qualsiasi risorsa Web, ci concentreremo sui dati di carattere dai servizi RESTful, vale a dire i dati JSON.
Questo è dolce
Una delle nuove società di gestione dei dati fondata sullo standard del protocollo HTTP che utilizza REST è PubChem. PubChem è stata costituita nel 2004 come fonte di dati di chimica aperta presso il National Institutes of Health (NIH). Centinaia di fonti di dati provenienti da istituzioni come università, aziende farmaceutiche, agenzie governative e fornitori di prodotti chimici vengono utilizzate per aggiornare ogni mese i record di PubChem. È la più grande raccolta di fonti pubblicamente disponibili di informazioni chimiche.
PubChem suddivide le query di dati in sostanze, composti e dosaggi, ecc. Da lì, è possibile ottenere una vasta gamma di proprietà, descrizioni, dosi e altre caratteristiche di interesse.
L'ho letto come ingredienti M&M.
Figura 9. “Semplici ingredienti M&M”
Ho scritto uno script JSL che ha creato una tabella di dati JMP degli ingredienti di Plain M&M's per vedere cosa c'è dentro. Non sorprende che gli ingredienti fossero pesanti sulla colorazione artificiale.
Una rappresentazione della tabella di dati parziali di JMP ha il seguente aspetto:
Figura 10. "Tabella dei dati degli ingredienti M&M Plain parziale"
Quando viene eseguito lo script JSL, Richiesta HTTP viene utilizzato per recuperare la sostanza o l'immagine composta nonché altre proprietà fornite dal servizio RESTful di PubChem.
Figura 11. "Tabella dei dati degli ingredienti M&M Plain parziale con dati PubChem"
Gli URL del servizio RESTful di interesse sono:
( [NOME] è il nome della sostanza o del composto trovato nelle Figure 9 e 10.)
Per recuperare i dati dell'immagine di un composto come il lattosio, il Richiesta HTTP sembra:
Figura 12. “ OTTENERE -ing l'immagine del lattosio da PubChem”

Figura 13. “
OTTENERE -ing e visualizzazione dell'immagine di Lactose da PubChem"
La richiesta Lactose utilizza l'endpoint di PubChem per il composto. Ci sono due concetti aggiuntivi usati qui. Il primo è Codifica l'URI . La codifica URI, nota anche come Percent Encoding, assicura che l'URL RESTful contenga solo caratteri ASCII (fortunatamente Lactose lo fa). Il secondo concetto è "Ottieni tipo MIME" . Il ritorno da questo endpoint PubChem è un dato BLOB binario (un'immagine PNG). IL "Ottieni tipo MIME" check garantisce che il blob sia effettivamente un PNG prima di essere utilizzato con New Image poiché questo endpoint restituirà i dati dei caratteri se non viene trovato alcun PNG.
Per recuperare il record completo di lattosio nei dati JSON, il file Richiesta HTTP sembra:

Figura 14. “ OTTENERE -ing il record completo di lattosio da PubChem”
L'endpoint definito da PubChem specifica che il file /JSON suffisso indica che il servizio RESTful dovrebbe restituire dati JSON, quindi controllando il tipo MIME di "dati" non è necessario. Tuttavia, dobbiamo elaborare il JSON. Ci sono [almeno] due modi in cui puoi elaborare il reso " dati" . Il primo è da usare "JSON alla tabella dati" . Questo proverà a creare una tabella di dati JMP dal file "dati" . Per i dati rettangolari o tabulari funziona bene (e velocemente). Tuttavia, non tutti i servizi RESTful restituiscono dati tabulari (PubChem è uno che non lo fa). Il secondo modo di elaborare i dati restituiti è "Analizza JSON" . Questo crea un JSL matrice associativa . Ciò significa che non è necessario analizzare il JSON. Tuttavia, è necessario sapere come sono strutturati i dati restituiti. Cioè, dovrai sapere se si tratta di una coppia chiave/valore o di una coppia chiave/valori. Questo non è così difficile come sembra poiché puoi acquisire il JSON non elaborato nel registro JMP e utilizzare qualsiasi editor JSON per esaminarne la struttura.
Una visualizzazione parziale dei dati JSON per il lattosio è simile a:
Figura 15. "Dati JSON parziali sul lattosio da PubChem"
Questo editor mostra una rappresentazione affiancata di JSON non elaborato con l'oggetto JSON corrispondente. Quando esamini i dati, un {..} in JSON, pensa a JSL matrice associativa . Allo stesso modo, quando incontri un [..] pensa a JSL Elenco .
Utilizzando questa tecnica, è possibile modificare lo script del record completo mostrato nella Figura 14 e utilizzarlo per creare una tabella di dati JMP per le proprietà del lattosio:
Figura 16. “ OTTENERE -ing il record completo di lattosio da PubChem e fare " oggetti di scena” una tabella di dati”
Questo esempio usa Analizza JSON per tradurre il JSON non elaborato da PubChem a un JSL matrice associativa . Dopo aver esaminato la struttura dei dati JSON, ci rendiamo conto che ci interessano solo i dati "oggetti di scena" nel Lactose JSON. Possiamo quindi utilizzare il familiare JSL matrice associativa navigazione per recuperare il JSL Elenco trovato in "PC_Compounds". Vogliamo solo il primo elemento dell'elenco (poiché la maggior parte dei " oggetti di scena” si ripetono)
"oggetti di scena" i dati sono un JSL matrice associativa così possiamo usare Come JSON Espr tradurre "oggetti di scena" torna a JSON e usalo in JSON a Datatable . Il risultato è in Figura 17.
Figura 17. “Tabella dati proprietà parziali del lattosio”
Ricordare, Richiesta HTTP è solo colla che lega le risorse web a JSL. Una volta inseriti i dati in JSL, è possibile utilizzarli in modo semplice o complesso in base alle proprie esigenze.
Qualcosa di cui meravigliarsi
Nel 2014, Marvel Comics ha creato un servizio RESTful che consente agli utenti di accedere a 70 anni di informazioni sui fumetti. L'API Marvel Comics è limitata solo dall'immaginazione dello sceneggiatore, quindi ovviamente ho dovuto registrarmi per ottenere una chiave e inserirla per vedere cosa potevo trovare. Ho scritto un meraviglia: API Funzione JSL che utilizza varie colonne che attraversano l'Universo Marvel.
Essendo il fan di Deadpool che sono, sono arrivato con una query iniziale che ha creato questa tabella di dati:
Figura 18. "Tabella dati parziale di Deadpool".
Questo ha smascherato 4 diversi personaggi di Deadpool nell'universo dei fumetti Marvel. Ero interessato all'identità del primo personaggio e ho selezionato il serie gestore di eventi click che avevo creato. Data l'origine del clic, il meraviglia: API la funzione può generare una nuova query a Marvel in cui il valore restituito illustra dove Deadpool si incrocia nell'MCU. Ho limitato i risultati a 50 righe; tuttavia, sono stato in grado di scoprire alcuni risultati interessanti. Ho fatto una rapida analisi della distribuzione su " titolo" E "inizioanno" solo per vedere quando la popolarità di Deadpool è aumentata e diminuita (ed è aumentata di nuovo).

Figura 19. "Distribuzione parziale di Deadpool".
La Figura 19 mostra che nel 2007 Deadpool è passato a molti diversi titoli Marvel Comic, tra cui:
- Avengers: L'iniziativa (2007-2010)
- Cavo e Deadpool
- Guerra civile: l'universo degli X-Men.
L'interesse per Deadpool è diminuito di nuovo dopo il 2007, ma è ripreso di nuovo (come visto nell'analisi) dopo che Ryan Reynolds ha interpretato per la prima volta il personaggio in X-Men Origins: Wolverine (2009), quindi rinnovato interesse per il personaggio, raggiungendo un picco nel 2011.
Nel 2012-2015, il Marvel Comic Universe esplode in Deadpool Kills the Marvel Universe per un riavvio Marvel.
Infine, nessuna sorpresa per il 2016-2018. Fu allora che uscirono i film.
Peter di Deadpool 2 riassume al meglio l'API Marvel Comics: "Ho appena visto l'annuncio e ho pensato che fosse divertente".
Convenzioni utilizzate
Il termine servizio RESTful viene utilizzato quando la risorsa Web è basata su REST
Il termine risorsa Web è un termine generico utilizzato quando è implicito un accesso Web generico.
Le azioni HTTP sono in grassetto
Pulsanti/Controlli di dialogo sono " citato e in grassetto”
I collegamenti ipertestuali sono sottolineato
Gli oggetti e le funzioni JSL sono corsivo
I nomi di variabili/colonne/messaggi JSL sono " citato e in corsivo "
Riferimenti
Falco, Sandro (2011, 16 dicembre) RIPOSO recuperato da https://www.w3.org/2001/sw/wiki/REST
W3.org Definizioni di metodo recuperato da https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html
W3.org Definizioni del codice di stato recuperato https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
Mozilla.org (13 maggio 2018) Metodi di richiesta HTTP recuperato da https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods
JSON.org (2017, dicembre) Presentazione di JSON recuperato da https://www.json.org
JMP.com (2018, 12 luglio) Liste recuperato da https://www.jmp.com/support/help/14/lists.shtml
JMP.com (2018, 12 luglio) Lavora con gli array associativi recuperato da https://www.jmp.com/support/help/14/work-with-associative-arrays.shtml
Strumento da riga di comando CURL e libreria per il trasferimento di dati con URL recuperato da https://curl.haxx.se/
W3.org (2015, 22 gennaio) Protezione del Web recuperato da https://www.w3.org/2001/tag/doc/web-https
W3.org (2014, 11 giugno) HTTP - Protocollo di trasferimento ipertestuale recuperato da https://www.w3.org/Protocolli/
Mozilla.org (3 luglio 2018) Elenco incompleto dei tipi MIME recuperato da https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Complete_list_of_MIME_types
PubChem.ncbi.nlm.nih.gov A proposito di PubChem recuperato da https://pubchemdocs.ncbi.nlm.nih.gov/
MMs.com ingredienti recuperato da http://www.mms.com/us/nutrition
W3Schools.com Riferimento per la codifica dell'URL HTML recuperato da https://www.w3schools.com/tags/ref_urlencode.asp
Developer.marvel.com Portale degli sviluppatori recuperato da https://developer.marvel.com/