Importación de datos de servicios web: la nueva solicitud HTTP en JMP ® 14 (US 2018 231)
Nivel: Intermedio
Bryan Boone, desarrollador principal de software de JMP, SAS
Las entidades gubernamentales y privadas están poniendo cada vez más a disposición sus datos a través de Internet a través de servicios RESTful. JMP 14 tiene una nueva característica llamada Solicitud HTTP , disponible a través de JSL, que le permite acceder a estos servicios RESTful. Este documento describe qué son los servicios RESTful y proporciona varios ejemplos sobre cómo utilizar Solicitud HTTP para traer nuevos datos a JMP.
¿Qué es REST?
REST, o transferencia de estado representacional, es una forma de proporcionar interoperabilidad entre sistemas informáticos en Internet. Un servicio RESTful es un servicio basado en web que utiliza este paradigma. Una API RESTful es una interfaz de programa de aplicación (API) que utiliza solicitudes HTTP para CONSEGUIR , CORREO , PONER y BORRAR datos para interactuar con el servicio RESTful.
El protocolo HTTP define un conjunto de métodos HTTP de solicitud para indicar la acción que un cliente desea que un servidor realice en un recurso. Ellos son:
CONSEGUIR
|
Solicita el recurso
|
CABEZA
|
Solicitar solo metadatos de recursos
|
CORREO
|
Solicitudes para aceptar el recurso
|
PONER
|
Solicitudes para almacenar o crear el recurso
|
BORRAR
|
Solicitudes para eliminar el recurso
|
PARCHE
|
Solicitud para modificar el estado de un recurso
|
Nueva terminología, actividades conocidas
Esto puede parecer conceptos completamente nuevos, pero ya está familiarizado con dos de los métodos de solicitud más comunes, CONSEGUIR y CORREO .
CONSEGUIR
CONSEGUIR tiene dos personalidades.
La primera personalidad es sólo CONSEGUIR -ting un recurso. Es decir, la intención es simplemente acceder a un recurso web. Esto se puede ver en la Figura 1. Aquí, el navegador está accediendo a la página web.
Figura 1. “ CONSEGUIR para un recurso web”
el segundo es CONSEGUIR -ting (acceder) a un recurso, junto con lo que se conoce como cadena de consulta. Una cadena de consulta es un conjunto de pares clave/valor definidos por el recurso web y utilizados por el cliente para solicitar al servidor que filtre o modifique el CONSEGUIR solicitud utilizando estos parámetros. Esto se puede ver en la Figura 2. Aquí el navegador le pide al servidor que modifique un CONSEGUIR solicitud usando:
CORREO
CORREO , por otro lado, es más complejo. A CORREO pide al servidor que cambie o cree un recurso. A CORREO normalmente contiene un formulario HTML que, a su vez, contiene una colección de pares clave/valor de datos de caracteres y/o pares de archivos clave/valor. La Figura 3 es un ejemplo que registra a un usuario en Amazon. Aquí los pares clave/valor son:
Correo electrónico
|
Su correo electrónico iniciar sesión
|
Contraseña
|
Tu contraseña
|
El "Iniciar sesión" botón realiza la CORREO

Figura 3. “ CORREO datos de formulario a un recurso web”
Por qué usarlo
El protocolo HTTP nos permite pensar en las súper autopistas de la información como “Las autopistas están pavimentadas; los letreros de las calles están puestos y se han construido puentes”. El estándar ha permitido que se formen nuevas empresas de gestión de datos. Además, la adopción del estándar HTTP eliminó los silos de información que a menudo se encuentran en las empresas establecidas. Algunas de estas empresas incluyen:
Text-Processing.com (Datos de opinión)
|
Jenkins
|
jira
|
El CENTRO
|
Oficina 365
|
Google
|
Buzón
|
Una unidad
|
AWS (servicios web de Amazon)
|
Oficina del Censo de EE.UU
|
NASA
|
PubChem
|
New York Times
|
fitbit
|
yahoo
|
Bitcoin
|
Comics Marvel
|
S.A.S.
|
AbrirAQ
|
JMP
|
Cómo usarlo
JSON
JSON (Notación de objetos de JavaScript) es un formato ligero de intercambio de datos. Se basa en un subconjunto del lenguaje de programación JavaScript. JSON es un formato de texto que es independiente del idioma, pero utiliza conceptos que ya son familiares para la mayoría de los programadores.
JSON se basa en dos estructuras:
- Una colección de pares de nombre/valor. (diccionario, tabla hash, matriz asociativa, …)
- Una lista ordenada de valores. (matriz, vector, lista, ...)
Nueva terminología, actividades familiares (otra vez)
JSL
JSL es el lenguaje de secuencias de comandos elegido cuando se trata de JMP. JSON puede ser un término nuevo, pero JSL admite las dos estructuras de datos que requiere JSON.
Lista
Liza son recipientes para almacenar artículos, como los siguientes:
- números
- Variables
- cadenas de caracteres
- expresiones (por ejemplo, asignaciones o llamadas a funciones)
- matrices
- listas anidadas
matriz asociativa
- Un matriz asociativa asigna claves únicas a valores que pueden no ser únicos. Una matriz asociativa también se denomina diccionario, mapa, mapa hash o tabla hash.
JSL también contiene dos funciones que son específicas del procesamiento JSON.
Analizar JSON
- Convierte texto JSON en una matriz o lista asociativa según la estructura de los datos JSON.
Como JSON Expr
- Devuelve una representación JSON de la expresión.
Estas funciones permiten al escritor de secuencias de comandos realizar conversiones sin problemas hacia y desde contenedores JSL y JSON.
Solicitud HTTP
Solicitud HTTP es nuevo en JMP 14. Originalmente, la tecnología se creó para manejar la interacción entre JMP y JMP Public. Pronto se dio cuenta de que tenía otras aplicaciones además de la publicación de datos en JMP Public y la tecnología apareció en JSL como Solicitud HTTP .
Introducción a las solicitudes HTTP
Solicitud HTTP admite a la perfección tanto el protocolo http como el https y encapsula gran parte del comportamiento que esperaría de cURL.
“cURL se usa en líneas de comando o scripts para transferir datos. También se utiliza en automóviles, televisores, enrutadores, impresoras, equipos de audio, teléfonos móviles, tabletas, descodificadores, reproductores multimedia y es la columna vertebral de transferencia de Internet para miles de aplicaciones de software que afectan a miles de millones de seres humanos a diario”.
Más importante aún, puedes pensar en Solicitud HTTP como el pegamento que une los recursos web a JSL. Eso es, Solicitud HTTP se comunica con un recurso web y permite que el escritor del script procese las respuestas en JSL. La complejidad de JSL está controlada por el autor.
Los métodos HTTP más comunes que utiliza al interactuar con un recurso web son:
Uso de solicitud HTTP en una acción GET
A CONSEGUIR La acción es probablemente la más común. Solicitud HTTP acción. Esta acción es una acción de solo lectura que puede traer datos a JMP.
Mensajes comunes para Solicitud HTTP :
- "Método"
- "URL"
- "Cadena de consulta"
- "Enviar"

Figura 4. “ Solicitud HTTP CONSEGUIR ”
Solicitud HTTP CONSEGUIR Las acciones suelen ir acompañadas de una "Cadena de consulta" para enviar parámetros a un recurso web. La figura 5 utiliza un Solicitud HTTP con un "Cadena de consulta" . En JSL, un "Cadena de consulta" es un matriz asociativa que asigna una clave a un valor de carácter o un Lista de valores de carácter. Cuando se ejecuta el script de la Figura 5, la URL se expandirá automáticamente a:
http://quotes.rest/qod.json?category=inspire
Figura 5. “ Solicitud HTTP CONSEGUIR usando un ' Cadena de consulta' ”
Uso de solicitud HTTP en una acción POST
Solicitud HTTP CORREO las acciones suelen ser más complejas.
Mensajes comunes para Solicitud HTTP :
- "Método"
- "URL"
- "Forma"
- "JSON"
- "Archivo"
- "Gota"
- "Enviar"
La Figura 6 muestra un Solicitud HTTP “ Forma" datos. En JSL, "Forma" Los datos pueden tener dos atributos, "Campos" y/o "Archivos" . Ambos son JSL Matrices asociativas que asignan una clave a un valor de carácter o un Lista de valores de carácter. en el caso de la "Archivos" , el valor del carácter o Lista de valores de carácter son los nombres de archivo que desea agregar a la " Forma".

Figura 6. “ Solicitud HTTP CORREO usando un Forma ”
La Figura 7 muestra un Solicitud HTTP “ JSON” datos. En JSL, "JSON" puede ser un matriz asociativa o datos de caracteres en formato JSON. Como JSON Expr creará un objeto JSON bien definido para usar con Solicitud HTTP . Los datos JSON se envían como el cuerpo de la solicitud.
Figura 7. “ Solicitud HTTP CORREO usando ' JSON' ”
La Figura 8 muestra un Solicitud HTTP “ Archivo" datos. En JSL, "Archivo" es el nombre de archivo que desea enviar como cuerpo de la solicitud.
Figura 8. “ Solicitud HTTP CORREO usando ' Archivo' ”
Una última acción para Solicitud HTTP “ Gota" datos. En JSL, "Gota" es un dato de blob binario que desea enviar como cuerpo de la solicitud. Esto significa que no tiene que escribir un archivo en el disco antes de enviarlo como parte de una solicitud.
El CONSEGUIR La acción es la solicitud más simple de hacer mientras CORREO es el más complejo. La interacción entre Solicitud HTTP y el recurso web siempre está definido por el servidor. Aunque el protocolo HTTP es un estándar bien definido, los datos (y las estructuras de datos) se definen por recurso web. Es decir, la API de One Drive es diferente a la de Dropbox, aunque realizan funciones similares.
Devolver al remitente
Datos de un Solicitud HTTP “ Enviar" el mensaje puede ser datos de caracteres, datos de blobs binarios o estar vacío, según el recurso web. Comprobación " Esta vacio" en los datos devueltos es el nivel más bajo de investigación de datos (además de ninguno). Sin embargo, si necesita un nivel de investigación detallado, puede usar " es cuerda” para comprobar los datos de caracteres.
Para un nivel de investigación aún más detallado, puede utilizar "Obtener tipo MIME" . Los tipos MIME comunes se pueden encontrar en el Lista incompleta de tipos MIME artículo en la sección de referencia del documento.
Finalmente, si es necesario, puede investigar los códigos de estado HTTP de bajo nivel desde un recurso web utilizando estos mensajes:
“Tiene información”
|
100-199
|
"Es exitoso"
|
200-299
|
“Tiene redirección”
|
300-399
|
“Tiene error de cliente”
|
400-499
|
"Tiene un error del servidor"
|
500-599
|
“Tiene error”
|
Tiene un error de cliente o servidor
|
"Obtener el estado"
|
El código de estado HTTP
|
Las descripciones de los códigos de estado HTTP se pueden encontrar en el Definiciones de código de estado artículo en la sección de referencia del documento.
Dónde usarlo
A pesar de Solicitud HTTP es capaz de datos de caracteres o datos de blobs binarios de cualquier recurso web, nos centraremos en los datos de caracteres de los servicios RESTful, es decir, los datos JSON.
Esto es dulce
Una de las nuevas empresas de gestión de datos fundada en el estándar de protocolo HTTP que utiliza REST es PubChem. PubChem se formó en 2004 como una fuente abierta de datos químicos en los Institutos Nacionales de Salud (NIH). Cientos de fuentes de datos de instituciones como universidades, compañías farmacéuticas, agencias gubernamentales y proveedores de productos químicos se utilizan para actualizar los registros de PubChem cada mes. Es la colección más grande de fuentes de información química disponible públicamente.
PubChem desglosa sus consultas de datos en sustancias, compuestos y ensayos, etc. A partir de ahí, puede obtener una amplia gama de propiedades, descripciones, dosis y otras características de interés.
Lo leí como ingredientes de M&M.
Figura 9. “Ingredientes simples de M&M”
Escribí un script JSL que creó una tabla de datos JMP de los ingredientes de Plain M&M para ver qué hay en ellos. No fue una sorpresa que los ingredientes tuvieran mucho colorante artificial.
Una representación de tabla de datos parciales de JMP tiene este aspecto:
Figura 10. “Tabla de datos de ingredientes de M&M sin sabor parcial”
Cuando se ejecuta el script JSL, Solicitud HTTP se utiliza para recuperar la imagen de la sustancia o el compuesto, así como otras propiedades proporcionadas por el servicio RESTful de PubChem.
Figura 11. "Tabla de datos de ingredientes de M&M sin formato parcial con datos de PubChem"
Las URL del servicio RESTful de interés son:
( [NOMBRE] es el nombre de la sustancia o compuesto que se encuentra en las Figuras 9 y 10.)
Para recuperar los datos de imagen de un compuesto como la lactosa, el Solicitud HTTP parece:
Figura 12. “ CONSEGUIR -ing la imagen de Lactosa de PubChem”

Figura 13. “
CONSEGUIR -ing y mostrando la imagen de Lactose de PubChem”
La solicitud de lactosa usa el criterio de valoración de PubChem para el compuesto. Aquí se utilizan dos conceptos adicionales. El primero es Codificar URI . La codificación URI, también conocida como codificación porcentual, garantiza que la URL RESTful contenga solo caracteres ASCII (afortunadamente, Lactose sí). El segundo concepto es "Obtener tipo MIME" . El retorno de este extremo de PubChem es un dato de blob binario (una imagen PNG). El "Obtener tipo MIME" check asegura que el blob sea de hecho un PNG antes de que se use con Nueva imagen, ya que este extremo devolverá datos de caracteres si no se encuentra ningún PNG.
Para recuperar el registro completo de Lactosa en datos JSON, el Solicitud HTTP parece:

Figura 14. “ CONSEGUIR -ing el registro completo de Lactosa de PubChem”
El punto final definido por PubChem especifica que el /JSON El sufijo indica que el servicio RESTful debe devolver datos JSON, por lo que comprobar el tipo MIME de "datos" no es necesario Sin embargo, tenemos que procesar el JSON. Hay [al menos] dos formas de procesar la devolución " datos" . La primera es usar "JSON a tabla de datos" . Esto intentará crear una tabla de datos JMP a partir de la "datos" . Para datos rectangulares o tabulares esto funciona bien (y rápido). Sin embargo, no todos los servicios RESTful devuelven datos tabulares (PubChem es uno que no lo hace). La segunda forma de procesar los datos devueltos es "Analizar JSON" . Esto crea un JSL matriz asociativa . Esto significa que no tiene que analizar el JSON. Sin embargo, necesita saber cómo se estructuran los datos devueltos. Es decir, necesitará saber si es un par clave/valor o un par clave/valor. Esto no es tan difícil como parece, ya que puede capturar el JSON sin procesar en el registro de JMP y usar cualquier editor de JSON para examinar su estructura.
Una visualización parcial de los datos JSON para la lactosa se ve así:
Figura 15. "Datos parciales de JSON de lactosa de PubChem"
Este editor muestra una representación en paralelo de JSON sin formato con el objeto JSON correspondiente. Cuando examina los datos, un {..} en JSON, piense en JSL matriz asociativa . Del mismo modo, cuando encuentre un [..] piense en JSL Lista .
Con esta técnica, puede modificar el script de registro completo que se muestra en la Figura 14 y usarlo para crear una tabla de datos JMP para las propiedades de la lactosa:
Figura 16. “ CONSEGUIR -ing el registro completo de lactosa de PubChem y haciendo " accesorios" una tabla de datos”
Este ejemplo utiliza Analizar JSON para traducir el JSON sin procesar de PubChem a un JSL matriz asociativa . Después de investigar la estructura de datos de JSON, nos damos cuenta de que solo nos interesan los datos de "props" en Lactose JSON. Entonces podemos usar el JSL familiar matriz asociativa navegación para recuperar el JSL Lista encontrado en "PC_Compounds". Solo queremos el primer elemento de la lista (ya que la mayoría de los " accesorios" se repiten)
"Accesorios" los datos son un JSL matriz asociativa para que podamos usar Como JSON Expr traducir "accesorios" volver a JSON y usarlo en JSON a tabla de datos . El resultado está en la Figura 17.
Figura 17. “Tabla de datos de propiedades parciales de la lactosa”
Recordar, Solicitud HTTP es solo pegamento que une los recursos web a JSL. Una vez que ingrese sus datos en JSL, puede usarlos de manera simple o compleja según sus necesidades.
Algo para maravillarse
En 2014, Marvel Comics creó un servicio RESTful que permite a los usuarios acceder a 70 años de información sobre cómics. La API de Marvel Comics está limitada solo por la imaginación del guionista, por lo que, por supuesto, tuve que registrarme para obtener una clave y tocarla para ver qué podía encontrar. escribí un maravilla:API Función JSL que utiliza varias columnas que rastrean el Universo Marvel.
Siendo el fanático de Deadpool que soy, vine con una consulta inicial que creó esta tabla de datos:
Figura 18. "Tabla de datos parcial de Deadpool".
Esto desenmascaró a 4 personajes diferentes de Deadpool en el Universo Marvel Comics. Me interesó la identidad del primer personaje y seleccioné el serie haga clic en el controlador de eventos que había creado. Dado el origen del clic, el maravilla:API La función puede generar una nueva consulta a Marvel donde el valor devuelto ilustra dónde se cruza Deadpool en la MCU. Limité los resultados a 50 filas; sin embargo, pude descubrir algunos resultados interesantes. Hice un análisis de distribución rápido en " título" y "año de inicio" solo para ver cuándo la popularidad de Deadpool subió y cayó (y volvió a subir).

Figura 19. "Distribución parcial de Deadpool".
La Figura 19 muestra que, en 2007, Deadpool pasó a muchos títulos diferentes de Marvel Comic, entre ellos:
- Vengadores: La iniciativa (2007-2010)
- cable y consorcio inactivo
- Guerra Civil: Universo X-Men.
El interés en Deadpool volvió a disminuir después de 2007, pero repuntó nuevamente (como se ve en el análisis) después de que Ryan Reynolds interpretó al personaje por primera vez en X-Men Origins: Wolverine (2009), por lo que renovó el interés en el personaje, alcanzando su punto máximo en 2011.
En 2012-2015, Marvel Comic Universe explota en Deadpool Kills the Marvel Universe para un reinicio de Marvel.
Finalmente, ninguna sorpresa para 2016-2018. Fue entonces cuando salieron las películas.
Peter de Deadpool 2 resume mejor la API de Marvel Comics: "Acabo de ver el anuncio y me pareció divertido".
Convenciones utilizadas
El término servicio RESTful se usa cuando el recurso web está basado en REST
El término recurso web es un término genérico que se utiliza cuando se implica un acceso web genérico.
Las acciones HTTP son en negrita
Los botones/controles de diálogo son “ citado y en negrita”
Los hipervínculos son subrayada
Los objetos y funciones JSL son en cursiva
Los nombres de variables/columnas/mensajes de JSL son “ citado y en cursiva ”
Referencias
Halcón, Sandro (2011, 16 de diciembre) DESCANSAR recuperado de https://www.w3.org/2001/sw/wiki/REST
W3.org Definiciones de métodos recuperado de https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html
W3.org Definiciones de código de estado recuperado https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
Mozilla.org (2018, 13 de mayo) Métodos de solicitud HTTP recuperado de https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods
JSON.org (diciembre de 2017) Introducción a JSON recuperado de https://www.json.org
JMP.com (2018, 12 de julio) Liza recuperado de https://www.jmp.com/support/help/14/lists.shtml
JMP.com (2018, 12 de julio) Trabajar con matrices asociativas recuperado de https://www.jmp.com/support/help/14/work-with-asociative-arrays.shtml
Biblioteca y herramienta de línea de comando CURL para transferir datos con URL recuperado de https://curl.haxx.se/
W3.org (2015, 22 de enero) Proteger la Web recuperado de https://www.w3.org/2001/tag/doc/web-https
W3.org (2014, 11 de junio) HTTP - Protocolo de transferencia de hipertexto recuperado de https://www.w3.org/Protocolos/
Mozilla.org (3 de julio de 2018) Lista incompleta de tipos MIME recuperado 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 Acerca de PubChem recuperado de https://pubchemdocs.ncbi.nlm.nih.gov/
MMs.com Ingredientes recuperado de http://www.mms.com/us/nutrition
W3Schools.com Referencia de codificación de URL HTML recuperado de https://www.w3schools.com/tags/ref_urlencode.asp
Desarrollador.marvel.com Portal para desarrolladores recuperado de https://developer.marvel.com/