Importation de données de service Web : la nouvelle requête HTTP dans JMP ® 14 (US 2018 231)
Niveau : Intermédiaire
Bryan Boone, développeur principal de logiciels JMP, SAS
Les entités gouvernementales et privées mettent de plus en plus leurs données à disposition sur Internet via les services RESTful. JMP 14 a une nouvelle fonctionnalité appelée Requête HTTP , disponible via JSL, qui vous permet d'accéder à ces services RESTful. Ce document décrit ce que sont les services RESTful et fournit plusieurs exemples d'utilisation Requête HTTP pour importer de nouvelles données dans JMP.
Qu'est-ce que le REPOS
REST, ou transfert d'état représentatif, est un moyen d'assurer l'interopérabilité entre les systèmes informatiques sur Internet. Un service RESTful est un service Web qui utilise ce paradigme. Une API RESTful est une interface de programme d'application (API) qui utilise des requêtes HTTP pour OBTENIR , POSTE , METTRE et SUPPRIMER données pour interagir avec le service RESTful.
Le protocole HTTP définit un ensemble de méthodes HTTP de requête pour indiquer l'action qu'un client souhaite qu'un serveur effectue sur une ressource. Ils sont:
OBTENIR
|
Demander la ressource
|
DIRIGER
|
Demander uniquement les métadonnées des ressources
|
POSTE
|
Demandes d'acceptation de la ressource
|
METTRE
|
Demandes de stockage ou de création de la ressource
|
SUPPRIMER
|
Demandes de suppression de la ressource
|
CORRECTIF
|
Demande de modification de l'état d'une ressource
|
Nouvelle terminologie, activités familières
Cela peut sembler être des concepts complètement nouveaux, mais vous connaissez déjà deux des méthodes de requête les plus courantes, OBTENIR et POSTE .
OBTENIR
OBTENIR a deux personnalités.
La première personnalité est juste OBTENIR -ting une ressource. Autrement dit, l'intention est simplement d'accéder à une ressource Web. Ceci peut être vu sur la figure 1. Ici, le navigateur accède à la page Web.
Figure 1. " OBTENIR pour une ressource Web »
La seconde est OBTENIR -ting (accès) à une ressource, ainsi que ce que l'on appelle une chaîne de requête. Une chaîne de requête est un ensemble de paires clé/valeur définies par la ressource Web et utilisées par le client pour demander au serveur de filtrer ou de modifier OBTENIR demande à l'aide de ces paramètres. Ceci peut être vu sur la figure 2. Ici, le navigateur demande au serveur de modifier un OBTENIR demande en utilisant :
POSTE
POSTE , en revanche, est plus complexe. UN POSTE demande au serveur de modifier ou de créer une ressource. UN POSTE contient généralement un formulaire HTML qui contient à son tour une collection de paires clé/valeur de données de caractères et/ou de paires clé/valeur de fichiers. La figure 3 est un exemple qui connecte un utilisateur à Amazon. Ici, les paires clé/valeur sont :
E-mail
|
Votre e-mail de connexion
|
Mot de passe
|
Votre mot de passe
|
Le "S'identifier" le bouton effectue la POSTE

Figure 3. " POSTE données de formulaire à une ressource Web »
Pourquoi l'utiliser
Le protocole HTTP nous permet de penser aux super autoroutes de l'information comme « les autoroutes sont pavées ; les panneaux de signalisation sont installés et des ponts ont été construits. La norme a permis à de nouvelles sociétés de gestion de données de se former. De plus, l'adoption de la norme HTTP a supprimé les silos d'informations que l'on trouve souvent dans les entreprises établies. Certaines de ces entreprises comprennent :
Text-Processing.com (données sur les sentiments)
|
Jenkins
|
Jira
|
Le HUB
|
Bureau 365
|
Google
|
Boîte de dépôt
|
Un lecteur
|
AWS (Amazon Web Services)
|
Bureau du recensement des États-Unis
|
Nasa
|
PubChem
|
New York Times
|
Fitbit
|
Yahoo
|
Bitcoin
|
Bandes dessinées Marvel
|
SAS
|
OpenAQ
|
JMP
|
Comment l'utiliser
JSON
JSON (JavaScript Object Notation) est un format d'échange de données léger. Il est basé sur un sous-ensemble du langage de programmation JavaScript. JSON est un format de texte indépendant du langage mais qui utilise des concepts déjà familiers à la plupart des programmeurs.
JSON est construit sur deux structures :
- Une collection de paires nom/valeur. (dictionnaire, table de hachage, tableau associatif, …)
- Une liste ordonnée de valeurs. (tableau, vecteur, liste, ...)
Nouvelle terminologie, activités familières (encore)
JSL
JSL est le langage de script de choix lorsque JMP est impliqué. JSON est peut-être un nouveau terme, mais JSL prend en charge les deux structures de données requises par JSON.
Liste
Listes sont des conteneurs pour stocker des éléments, tels que les suivants :
- Nombres
- variables
- chaînes de caractères
- expressions (par exemple, affectations ou appels de fonction)
- matrices
- listes imbriquées
Tableau associatif
- Un Tableau associatif mappe des clés uniques à des valeurs qui peuvent être non uniques. Un tableau associatif est également appelé dictionnaire, carte, carte de hachage ou table de hachage.
JSL contient également deux fonctions spécifiques au traitement JSON.
Analyser JSON
- Convertit le texte JSON en un tableau associatif ou une liste en fonction de la structure des données JSON.
En tant qu'expression JSON
- Renvoie une représentation JSON de l'expression.
Ces fonctions permettent au rédacteur de script de convertir de manière transparente vers et depuis les conteneurs JSL et JSON.
Requête HTTP
Requête HTTP est nouveau dans JMP 14. À l'origine, la technologie a été créée pour gérer l'interaction entre JMP et JMP Public. On s'est vite rendu compte qu'il avait d'autres applications que la publication de données sur JMP Public et la technologie a fait surface dans JSL comme Requête HTTP .
Introduction aux requêtes HTTP
Requête HTTP prend en charge de manière transparente les protocoles http et https et encapsule une grande partie du comportement que vous attendez de cURL.
"cURL est utilisé dans les lignes de commande ou les scripts pour transférer des données. Il est également utilisé dans les voitures, les téléviseurs, les routeurs, les imprimantes, les équipements audio, les téléphones portables, les tablettes, les décodeurs, les lecteurs multimédias et constitue l'épine dorsale du transfert Internet pour des milliers d'applications logicielles affectant quotidiennement des milliards d'humains.
Plus important encore, vous pouvez penser à Requête HTTP comme le ciment qui lie les ressources Web à JSL. C'est, Requête HTTP communique avec une ressource Web et permet au rédacteur de script de traiter les réponses en JSL. La complexité JSL est contrôlée par l'auteur.
Les méthodes HTTP les plus courantes que vous utilisez lorsque vous interagissez avec une ressource Web sont :
Utilisation de la requête HTTP dans une action GET
UN OBTENIR l'action est probablement la plus courante Requête HTTP action. Cette action est une action en lecture seule qui peut importer des données dans JMP.
Messages courants pour Requête HTTP :
- "Méthode"
- "URL"
- "Chaîne de requête"
- "Envoyer"

Figure 4. " Requête HTTP OBTENIR ”
Requête HTTP OBTENIR les actions s'accompagnent souvent d'un "Chaîne de requête" pour envoyer des paramètres à une ressource Web. La figure 5 utilise un Requête HTTP avec un "Chaîne de requête" . Dans JSL, un "Chaîne de requête" est un Tableau associatif qui associe une clé à une valeur de caractère ou à un Liste de valeurs de caractères. Lorsque le script de la figure 5 est exécuté, l'URL sera automatiquement étendue à :
http://quotes.rest/qod.json?category=inspire
Figure 5. " Requête HTTP OBTENIR utilisant un ' Chaîne de requête' ”
Utilisation de la requête HTTP dans une action POST
Requête HTTP POSTE les actions sont souvent plus complexes.
Messages courants pour Requête HTTP :
- "Méthode"
- "URL"
- "Former"
- "Des champs"
- "Des dossiers"
- "JSON"
- "Déposer"
- "Goutte"
- "Envoyer"
La figure 6 montre un Requête HTTP " Former" données. En JSL, "Former" les données peuvent avoir deux attributs, "Des champs" et/ou "Des dossiers" . Ils sont tous les deux JSL Tableaux associatifs qui mappent une clé à une valeur de caractère ou un Liste de valeurs de caractère. Dans le cas du "Des dossiers" , la valeur du caractère ou Liste des valeurs de caractères sont les noms de fichiers que vous souhaitez ajouter au " Former".

Figure 6. " Requête HTTP POSTE utilisant un Former ”
La figure 7 montre un Requête HTTP " JSON » données. En JSL, "JSON" peut être soit un Tableau associatif ou des données de caractères au format JSON. En tant qu'expression JSON créera un objet JSON bien défini à utiliser avec Requête HTTP . Les données JSON sont envoyées dans le corps de la requête.
Figure 7. " Requête HTTP POSTE en utilisant ' JSON' ”
La figure 8 montre un Requête HTTP " Déposer" données. En JSL, "Déposer" est le nom de fichier que vous souhaitez envoyer comme corps de la requête.
Figure 8. " Requête HTTP POSTE en utilisant ' Déposer' ”
Une dernière action pour Requête HTTP " Goutte" données. En JSL, "Goutte" est une donnée blob binaire que vous souhaitez envoyer comme corps de la requête. Cela signifie que vous n'avez pas besoin d'écrire un fichier sur le disque avant de l'envoyer dans le cadre d'une requête.
Le OBTENIR l'action est la demande la plus simple à faire alors que POSTE est le plus complexe. L'interaction entre Requête HTTP et la ressource Web est toujours définie par le serveur. Bien que le protocole HTTP soit une norme bien définie, les données (et les structures de données) sont définies par ressource Web. Autrement dit, l'API de One Drive est différente de celle de Dropbox, bien qu'elles remplissent des fonctions similaires.
Retourner à l'expéditeur
Les données d'un Requête HTTP " Envoyer" Le message peut être soit des données de caractères, soit des données blob binaires, soit vide, selon la ressource Web. Vérification " Est vide" sur les données renvoyées est le niveau le plus grossier d'investigation des données (à part aucun). Cependant, si vous avez besoin d'un niveau d'investigation plus fin, vous pouvez utiliser " est une chaîne » pour vérifier les données de caractères.
Pour un niveau d'investigation encore plus fin, vous pouvez utiliser "Obtenir le type MIME" . Les types MIME courants peuvent être trouvés dans le Liste incomplète des types MIME article dans la section Référence de l'article.
Enfin, si nécessaire, vous pouvez rechercher les codes d'état HTTP de bas niveau à partir d'une ressource Web à l'aide des messages suivants :
"A des informations"
|
100-199
|
"Est réussi"
|
200-299
|
"A une redirection"
|
300-399
|
"A une erreur client"
|
400-499
|
"A une erreur de serveur"
|
500-599
|
"A une erreur"
|
A une erreur client ou serveur
|
"Obtenir le statut"
|
Le code d'état HTTP
|
Les descriptions des codes d'état HTTP se trouvent dans le Définitions des codes d'état article dans la section Référence de l'article.
Où l'utiliser
Bien que Requête HTTP est capable de données de caractères ou de données de blob binaires à partir de n'importe quelle ressource Web, nous allons nous concentrer sur les données de caractères des services RESTful, à savoir les données JSON.
C'est mignon
PubChem est l'une des nouvelles sociétés de gestion de données fondées sur la norme de protocole HTTP qui utilise REST. PubChem a été créé en 2004 en tant que source de données de chimie ouverte aux National Institutes of Health (NIH). Des centaines de sources de données provenant d'institutions telles que des universités, des sociétés pharmaceutiques, des agences gouvernementales et des fournisseurs de produits chimiques sont utilisées pour mettre à jour les enregistrements PubChem chaque mois. Il s'agit de la plus grande collection de sources d'informations chimiques accessibles au public.
PubChem décompose leurs requêtes de données en substances, composés et dosages, etc. À partir de là, vous pouvez obtenir un vaste éventail de propriétés, de descriptions, de doses et d'autres caractéristiques d'intérêt.
J'ai lu cela comme des ingrédients M&M.
Figure 9. “Ingrédients M&M simples”
J'ai écrit un script JSL qui a créé une table de données JMP des ingrédients de Plain M&M's pour voir ce qu'ils contiennent. Il n'était pas surprenant que les ingrédients soient lourds sur la coloration artificielle.
Une représentation de table de données partielle JMP ressemble à ceci :
Figure 10. "Tableau de données d'ingrédients M&M partiellement nature"
Lorsque le script JSL est exécuté, Requête HTTP est utilisé pour récupérer l'image de la substance ou du composé ainsi que d'autres propriétés fournies par le service RESTful de PubChem.
Figure 11. "Tableau de données partiel sur les ingrédients M&M avec données PubChem"
Les URL de service RESTful qui vous intéressent sont :
( [NOM] est le nom de la substance ou du composé trouvé dans les figures 9 et 10.)
Pour récupérer les données d'image d'un composé comme le lactose, le Requête HTTP ressemble à:
Figure 12. " OBTENIR -ing l'image de Lactose de PubChem "

Figure 13. "
OBTENIR -ing et afficher l'image de Lactose de PubChem "
La requête Lactose utilise le point de terminaison de PubChem pour le composé. Deux concepts supplémentaires sont utilisés ici. Le premier est Encoder l'URI . L'encodage URI, également connu sous le nom d'encodage en pourcentage, garantit que l'URL RESTful ne contient que des caractères ASCII (heureusement, Lactose le fait). La deuxième notion est "Obtenir le type MIME" . Le retour de ce point de terminaison PubChem est une donnée blob binaire (une image PNG). Le "Obtenir le type MIME" check garantit que le blob est bien un PNG avant d'être utilisé avec New Image puisque ce point de terminaison renverra des données de caractères si aucun PNG n'est trouvé.
Pour récupérer l'enregistrement complet de Lactose dans les données JSON, le Requête HTTP ressemble à:

Figure 14. " OBTENIR -ing le dossier complet de Lactose de PubChem "
Le point final défini par PubChem spécifie que le /JSON suffixe indique que le service RESTful doit renvoyer des données JSON, donc vérifier le type MIME de "données" n'est pas nécessaire. Cependant, nous devons traiter le JSON. Il y a [au moins] deux façons de traiter le retour " données" . La première consiste à utiliser "JSON vers table de données" . Cela essaiera de créer une table de données JMP à partir du "données" . Pour les données rectangulaires ou tabulaires, cela fonctionne bien (et rapidement). Cependant, tous les services RESTful ne renvoient pas de données tabulaires (PubChem en est un qui ne le fait pas). La deuxième façon de traiter les données renvoyées est "Parser JSON" . Cela crée un JSL Tableau associatif . Cela signifie que vous n'avez pas à analyser le JSON. Cependant, vous devez savoir comment les données renvoyées sont structurées. Autrement dit, vous devrez savoir s'il s'agit d'une paire clé/valeur ou d'une paire clé/valeurs. Ce n'est pas aussi difficile qu'il n'y paraît puisque vous pouvez capturer le JSON brut dans le journal JMP et utiliser n'importe quel éditeur JSON pour examiner sa structure.
Un affichage partiel des données JSON pour le lactose ressemble à :
Figure 15. "Données JSON partielles sur le lactose de PubChem"
Cet éditeur affiche une représentation côte à côte du JSON brut avec l'objet JSON correspondant. Lorsque vous examinez les données, un {..} dans JSON, pensez JSL Tableau associatif . De même, lorsque vous rencontrez un [..] pensez JSL Liste .
À l'aide de cette technique, vous pouvez modifier le script d'enregistrement complet illustré à la figure 14 et l'utiliser pour créer une table de données JMP pour les propriétés de Lactose :
Figure 16. " OBTENIR -ing le dossier complet de Lactose de PubChem et faire " accessoires » un tableau de données »
Cet exemple utilise Analyser JSON pour traduire le JSON brut de PubChem en JSL Tableau associatif . Après avoir étudié la structure des données JSON, nous nous rendons compte que nous n'intéressant que les données "props" dans le Lactose JSON. Nous pouvons alors utiliser le JSL familier Tableau associatif navigation pour récupérer le JSL Liste trouvé dans "PC_Compounds". Nous ne voulons que le premier élément de la liste (puisque la plupart des " accessoires » se répètent)
"Accessoires" les données sont un JSL Tableau associatif afin que nous puissions utiliser En tant qu'expression JSON traduire "accessoires" retour à JSON et l'utiliser dans JSON vers table de données . Le résultat est dans la figure 17.
Figure 17. "Tableau de données des propriétés partielles du lactose"
Se souvenir, Requête HTTP n'est qu'un ciment qui lie les ressources Web à JSL. Une fois vos données entrées dans JSL, vous pouvez les utiliser de manière simple ou complexe selon vos besoins.
Quelque chose à s'émerveiller
En 2014, Marvel Comics a créé un service RESTful qui permet aux utilisateurs d'accéder à 70 ans d'informations sur les bandes dessinées. L'API Marvel Comics n'est limitée que par l'imagination du scénariste, donc bien sûr, j'ai dû m'inscrire pour obtenir une clé et y accéder pour voir ce que je pouvais trouver. j'ai écrit un merveille : API Fonction JSL qui utilise diverses colonnes qui parcourent l'univers Marvel.
Étant le fan de Deadpool que je suis, je suis venu avec une requête initiale qui a créé cette table de données :
Figure 18. "Table de données partielle de Deadpool."
Cela a démasqué 4 personnages différents de Deadpool dans l'univers Marvel Comics. Je me suis intéressé à l'identité du premier personnage et j'ai sélectionné le série cliquez sur le gestionnaire d'événements que j'avais créé. Compte tenu de l'origine du clic, le merveille : API La fonction peut générer une nouvelle requête à Marvel où la valeur de retour illustre où Deadpool se croise dans le MCU. J'ai limité les résultats à 50 lignes ; cependant, j'ai pu découvrir des résultats intéressants. J'ai fait une analyse de distribution rapide sur " titre" et "année de début" juste pour voir quand la popularité de Deadpool a augmenté et diminué (et a augmenté à nouveau).

Figure 19. "Distribution partielle de Deadpool."
La figure 19 montre qu'en 2007, Deadpool est passé à de nombreux titres différents de Marvel Comic, notamment :
- Avengers: l'initiative (2007-2010)
- Câble et Deadpool
- Guerre civile : Univers X-Men.
L'intérêt pour Deadpool a de nouveau diminué après 2007, mais a repris (comme on le voit dans l'analyse) après que Ryan Reynolds ait joué le personnage pour la première fois dans X-Men Origins: Wolverine (2009) donc un regain d'intérêt pour le personnage, atteignant un sommet en 2011.
En 2012-2015, l'univers Marvel Comic explose dans Deadpool tue l'univers Marvel pour un redémarrage Marvel.
Enfin, pas de surprise pour 2016-2018. C'est alors que les films sont sortis.
Peter de Deadpool 2 résume le mieux l'API Marvel Comics : "Je viens de voir l'annonce et j'ai trouvé ça amusant".
Conventions utilisées
Le terme service RESTful est utilisé lorsque la ressource Web est basée sur REST
Le terme ressource Web est un terme générique utilisé lorsqu'un accès Web générique est implicite.
Les actions HTTP sont en gras
Les boutons/contrôles de dialogue sont " cité et en gras »
Les hyperliens sont souligné
Les objets et fonctions JSL sont en italique
Les noms des variables/colonnes/messages JSL sont " cité et en italique ”
Les références
Faucon, Sandro (2011, 16 décembre) REPOS récupéré de https://www.w3.org/2001/sw/wiki/REST
W3.org Définitions de méthode récupéré de https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html
W3.org Définitions des codes d'état récupéré https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
Mozilla.org (2018, 13 mai) Méthodes de requête HTTP récupéré de https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods
JSON.org (2017, décembre) Présentation de JSON récupéré de https://www.json.org
JMP.com (2018, 12 juillet) Listes récupéré de https://www.jmp.com/support/help/14/lists.shtml
JMP.com (2018, 12 juillet) Travailler avec des tableaux associatifs récupéré de https://www.jmp.com/support/help/14/work-with-associative-arrays.shtml
Outil de ligne de commande CURL et bibliothèque pour transférer des données avec des URL récupéré de https://curl.haxx.se/
W3.org (2015, 22 janvier) Sécuriser le Web récupéré de https://www.w3.org/2001/tag/doc/web-https
W3.org (2014, 11 juin) HTTP - Protocole de transfert hypertexte récupéré de https://www.w3.org/Protocols/
Mozilla.org (2018, 3 juillet) Liste incomplète des types MIME récupéré de https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Complete_list_of_MIME_types
PubChem.ncbi.nlm.nih.gov À propos de PubChem récupéré de https://pubchemdocs.ncbi.nlm.nih.gov/
MMs.com Ingrédients récupéré de http://www.mms.com/us/nutrition
W3Schools.com Référence de codage d'URL HTML récupéré de https://www.w3schools.com/tags/ref_urlencode.asp
Développeur.marvel.com Portail des développeurs récupéré de https://developer.marvel.com/