导入 Web 服务数据:JMP ® 14 中的新 HTTP 请求 (US 2018 231)
级别:中级
Bryan Boone,SAS JMP 首席软件开发人员
政府和私人实体越来越多地通过 RESTful 服务在互联网上提供数据。 JMP 14 有一个新功能称为HTTP请求,通过 JSL 提供,允许您访问这些 RESTful 服务。 本文介绍了什么是 RESTful 服务,并提供了几个有关如何使用的示例HTTP请求将新数据引入 JMP。
什么是休息
REST(即表述性状态传输)是一种在 Internet 上的计算机系统之间提供互操作性的方法。 RESTful 服务是一种利用此范例的基于 Web 的服务。 RESTful API 是一种应用程序编程接口 (API),它使用 HTTP 请求来得到,邮政,放和删除与 RESTful 服务交互的数据。
HTTP 协议定义了一组请求 HTTP 方法来指示客户端希望服务器对资源执行的操作。 他们是:
得到
|
请求资源
|
头
|
仅请求资源元数据
|
邮政
|
请求接受资源
|
放
|
存储或创建资源的请求
|
删除
|
请求删除资源
|
修补
|
请求修改资源状态
|
新术语,熟悉的活动
这可能看起来像是全新的概念,但您已经熟悉两种最常见的请求方法,得到和邮政。
得到
得到有两种性格。
第一人格只是得到-设置资源。 也就是说,意图只是访问网络资源。 这可以在图 1 中看到。 这里,浏览器正在访问网页。
图1。 “得到对于网络资源”
第二个是得到-ting(访问)资源以及所谓的查询字符串。 查询字符串是由Web资源定义的一组键/值对,客户端使用它来请求服务器过滤或修改得到使用这些参数的请求。 这可以在图 2 中看到。 这里浏览器要求服务器修改得到请求使用:
- q=jmp
- SPF=1499884333995

图 2. “得到使用网络资源的查询字符串”
邮政
邮政另一方面,则更为复杂。 A邮政要求服务器更改或创建资源。 A邮政通常包含一个 HTML 表单,该表单又包含字符数据的键/值对和/或文件的键/值对的集合。 图 3 是用户登录 Amazon 的示例。 这里的键/值对是:

图 3. “邮政将数据形成网络资源”
为什么使用它
HTTP 协议使我们能够将信息高速公路想象为“高速公路已铺好;街道标志已经到位,桥梁也已经建成。”该标准使得新的数据管理公司得以成立。 此外,HTTP 标准的采用消除了老牌公司中常见的信息孤岛。 其中一些公司包括:
Text-Processing.com(情感数据)
|
詹金斯
|
吉拉
|
枢纽
|
办公室365
|
谷歌
|
投递箱
|
一个驱动器
|
AWS(亚马逊网络服务)
|
美国人口普查局
|
美国宇航局
|
公共化学
|
纽约时报
|
菲比特
|
雅虎
|
比特币
|
漫威漫画
|
SAS
|
开放式AQ
|
联合管理计划
|
如何使用它
JSON
JSON(JavaScript 对象表示法)是一种轻量级数据交换格式。 它基于 JavaScript 编程语言的子集。 JSON 是一种独立于语言的文本格式,但使用大多数程序员已经熟悉的概念。
JSON 建立在两种结构之上:
- 名称/值对的集合。 (字典、哈希表、关联数组……)
- 值的有序列表。 (数组、向量、列表、...)
新术语,熟悉的活动(再次)
吉林省
当涉及 JMP 时,JSL 是首选的脚本语言。 JSON 可能是一个新术语,但 JSL 支持 JSON 所需的两种数据结构。
列表
列表是存储物品的容器,例如:
- 数字
- 变量
- 字符串
- 表达式(例如,赋值或函数调用)
- 矩阵
- 嵌套列表
关联数组
- 一个关联数组将唯一键映射到可以不唯一的值。 关联数组也称为字典、映射、哈希映射或哈希表。
JSL 还包含两个特定于 JSON 处理的函数。
解析 JSON
- 根据 JSON 数据的结构将 JSON 文本转换为关联数组或列表。
作为 JSON 表达式
这些函数允许脚本编写者在 JSL 容器和 JSON 之间无缝转换。
HTTP请求
HTTP请求是 JMP 14 中的新增功能。 最初,该技术是为了处理 JMP 和 JMP Public 之间的交互而创建的。 人们很快意识到,除了将数据发布到 JMP Public 之外,它还有更多的应用,并且该技术在 JSL 中得到了体现: HTTP请求。
HTTP 请求入门
HTTP请求无缝支持 http 和 https 协议,并封装了您期望从 cURL 获得的大部分行为。
“cURL 用于命令行或脚本中来传输数据。 它还用于汽车、电视机、路由器、打印机、音频设备、手机、平板电脑、机顶盒、媒体播放器,并且是每天影响数十亿人的数千个软件应用程序的互联网传输骨干网。”
更重要的是,你可以想到HTTP请求作为将 Web 资源绑定到 JSL 的粘合剂。 那是, HTTP请求与 Web 资源通信并允许脚本编写者处理 JSL 中的响应。 JSL的复杂度由作者控制。
与 Web 资源交互时最常用的 HTTP 方法是:
在 GET 操作中使用 HTTP 请求
A得到行动可能是最常见的HTTP请求行动。 此操作是只读操作,可以将数据带入 JMP。
常见消息HTTP请求:

图 4. “ HTTP请求得到”
HTTP请求得到行动常常伴随着“请求参数”将参数发送到 Web 资源。 图 5 使用HTTP请求与一个“请求参数” 。 在 JSL 中, “请求参数”是一个关联数组将键映射到字符值或列表的字符值。 当图 5 中的脚本运行时,URL 将自动扩展为:
http://quotes.rest/qod.json?category=inspire
图 5. “ HTTP请求得到用一个 '请求参数' ”
在 POST 操作中使用 HTTP 请求
HTTP请求邮政动作往往更加复杂。
常见消息HTTP请求:
- “方法”
- “网址”
- “形式”
- “JSON”
- “文件”
- “一团”
- “发送”
图 6 显示了HTTP请求“形式”数据。 在JSL中, “形式”数据可以有两个属性, “田野”和/或“文件” 。 他们都是JSL关联数组将键映射到字符值或列表的字符值。 在这种情况下“文件” 、字符值或列表字符值是您要添加到“形式”。

图 6. “ HTTP请求邮政用一个形式”
图 7 显示了HTTP请求“ JSON”数据。 在JSL中, “JSON”可以是关联数组或 JSON 格式的字符数据。 作为 JSON 表达式将创建一个定义良好的 JSON 对象来使用HTTP请求。 JSON 数据作为请求正文发送。
图 7. “ HTTP请求邮政使用 ' JSON' ”
图 8 显示了HTTP请求“文件”数据。 在JSL中, “文件”是您要作为请求正文发送的文件名。
图 8. “ HTTP请求邮政使用 '文件' ”
最后一项行动HTTP请求“斑点”数据。 在JSL中, “一团”是要作为请求正文发送的二进制 blob 数据。 这意味着您不必在将文件作为请求的一部分发送之前将其写入磁盘。
这得到action 是 while 发出的最简单的请求邮政是最复杂的。 之间的相互作用HTTP请求并且网络资源始终由服务器定义。 尽管 HTTP 协议是一个定义明确的标准,但数据(和数据结构)是基于每个 Web 资源定义的。 也就是说,One Drive 的 API 与 Dropbox 不同,尽管它们执行类似的功能。
返回发件人
数据来自HTTP请求“发送”消息可以是字符数据、二进制 blob 数据或空,具体取决于 Web 资源。 检查“是空的”对返回的数据进行最粗略的数据调查(除了没有)。 但是,如果您需要进行细粒度的调查,您可以使用“是字符串”检查字符数据。
对于更细粒度的调查,您可以使用“获取 MIME 类型” 。 常见的 MIME 类型可以在MIME 类型的不完整列表论文参考文献部分的文章。
最后,如果需要,您可以使用以下消息调查来自 Web 资源的低级 HTTP 状态代码:
“有信息”
|
100-199
|
“成功了”
|
200-299
|
“有重定向”
|
300-399
|
“有客户端错误”
|
400-499
|
“服务器出现错误”
|
500-599
|
“有错误”
|
客户端或服务器出现错误
|
“获取状态”
|
HTTP 状态代码
|
HTTP 状态代码描述可以在状态代码定义论文参考文献部分的文章。
在哪里使用它
虽然HTTP请求能够处理来自任何 Web 资源的字符数据或二进制 blob 数据,我们将重点关注来自 RESTful 服务的字符数据,即 JSON 数据。
这很甜蜜
PubChem 是基于使用 REST 的 HTTP 协议标准创建的新数据管理公司之一。 PubChem 成立于 2004 年,作为美国国立卫生研究院 (NIH) 的开放化学数据源。 来自大学、制药公司、政府机构和化学品供应商等机构的数百个数据源用于每月更新 PubChem 记录。 它是最大的公开化学信息来源集合。
PubChem 将其数据查询分解为物质、化合物和分析等。从那里,您可以获得大量的属性、描述、剂量和其他感兴趣的特征。
我把它理解为 M&M 成分。
图 9. “简单的M&M原料”
我编写了一个 JSL 脚本,该脚本创建了普通 M&M 巧克力豆成分的 JMP 数据表,以查看其中的成分。 毫不奇怪,成分中含有大量人工色素。
JMP 部分数据表表示如下:
图 10. 《部分原味M&M成分数据表》
当 JSL 脚本运行时, HTTP请求用于检索物质或化合物图像以及 PubChem 的 RESTful 服务提供的其他属性。
图 11. “带有 PubChem 数据的部分普通 M&M 成分数据表”
感兴趣的 RESTful 服务 URL 是:
( [姓名]是图 9 和 10 中的物质或化合物名称。)
为了检索乳糖等化合物的图像数据, HTTP请求好像:
图 12. “得到-来自 PubChem 的乳糖图像”

图 13. “
得到-ing 并显示来自 PubChem 的乳糖图像”
乳糖请求使用 PubChem 的化合物端点。 这里使用了两个额外的概念。 第一个是编码 URI 。 URI 编码,也称为百分比编码,可确保 RESTful URL 仅包含 ASCII 字符(幸运的是,Lactose 确实如此)。 第二个概念是“获取 MIME 类型” 。 此 PubChem 端点返回的是二进制 blob 数据(PNG 图片)。 这“获取 MIME 类型”检查确保 blob 在与新图像一起使用之前确实是 PNG,因为如果找不到 PNG,此端点将返回字符数据。
要检索 JSON 数据中乳糖的完整记录, HTTP请求好像:

图 14. “得到-来自 PubChem 的乳糖完整记录”
PubChem 定义的端点指定/JSON后缀表示RESTful服务应该返回JSON数据,因此检查MIME类型“数据”没有必要。 但是,我们确实必须处理 JSON。 有[至少]两种方法可以处理返回的“数据” 。 第一个是使用“JSON 到数据表” 。 这将尝试从以下位置创建 JMP 数据表: “数据” 。 对于矩形或表格数据,这种方法效果很好(而且速度很快)。 然而,并非所有 RESTful 服务都返回表格数据(PubChem 就是不返回表格数据的服务)。 第二种处理返回数据的方式是“解析 JSON” 。 这将创建一个 JSL关联数组。 这意味着您不必解析 JSON。 但是,您确实需要知道返回的数据的结构。 也就是说,您需要知道它是键/值对还是键/值对。 这并不像看起来那么难,因为您可以捕获 JMP 日志中的原始 JSON 并使用任何 JSON 编辑器检查其结构。
乳糖 JSON 数据的部分显示如下所示:
图 15. “来自 PubChem 的部分乳糖 JSON 数据”
此编辑器显示原始 JSON 与相应 JSON 对象的并排表示。 当您检查数据时,JSON 中的 {..},请考虑 JSL关联数组。 同样,当您遇到 [..] 时,请考虑 JSL列表。
使用此技术,您可以修改图 14 中所示的完整记录脚本,并使用它为乳糖的属性创建 JMP 数据表:
图 16. “得到- 从 PubChem 获取乳糖的完整记录并制作“道具”数据表”
本示例使用解析 JSON将原始 JSON 从 PubChem 转换为 JSL关联数组。 研究完 JSON 数据结构后,我们意识到我们只对 Lactose JSON 中的“props”数据感兴趣。 然后我们就可以使用熟悉的JSL了关联数组导航以检索 JSL列表在“PC_Compounds”中找到。 我们只想要列表中的第一项(因为大多数“道具”重复)
“道具”数据是 JSL关联数组所以我们可以使用作为 JSON 表达式翻译“道具”返回 JSON 并在中使用它JSON 到数据表。 结果如图 17 所示。
图 17. 《部分乳糖性质数据表》
记住, HTTP请求只是将 Web 资源绑定到 JSL 的粘合剂。 将数据导入 JSL 后,您可以根据需要使用简单或复杂的数据。
令人惊叹的东西
2014年,漫威漫画创建了RESTful服务,允许用户访问70年的漫画信息。 Marvel Comics API 仅受脚本编写者想象力的限制,所以我当然必须注册一个密钥并点击它才能看到我能找到什么。 我写了一个奇迹:API JSL 函数使用漫威宇宙中的各种列。
作为死侍粉丝,我附带了一个创建此数据表的初始查询:
图 18. “部分死侍数据表。”
这揭开了漫威漫画宇宙中 4 个不同的死侍角色的面纱。 我对第一个角色的身份感兴趣并选择了系列我创建的单击事件处理程序。 考虑到点击的来源,奇迹:API函数可以向 Marvel 生成一个新查询,其中返回值说明了 Deadpool 在 MCU 中交叉的位置。 我将结果限制为 50 行;然而,我发现了一些有趣的结果。 我对“标题”和“开始年份”只是为了看看死侍的受欢迎程度何时上升和下降(然后再次上升)。

图 19. “部分死侍分布。”
图 19 显示 2007 年《死侍》跨入了许多不同的漫威漫画作品,包括:
- 复仇者联盟:倡议 (2007-2010)
- 有线与死侍
- 内战:X战警宇宙。
2007 年之后,人们对《死侍》的兴趣再次减弱,但在瑞安·雷诺兹首次在《X 战警前传:金刚狼》(2009 年) 中扮演该角色后,人们对死侍的兴趣再次回升(如分析所示),因此人们对这个角色的兴趣重新燃起,并在 2011 年达到顶峰。
2012-2015 年,漫威漫画宇宙在《死侍杀死漫威宇宙》中爆炸,漫威重启。
最后,2016-2018 年并不令人意外。 那是电影上映的时候。
《死侍 2》的彼得对漫威漫画 API 做了最好的总结,“我刚刚看到了广告,觉得它看起来很有趣”。
使用的约定
当 Web 资源基于 REST 时,使用术语 RESTful 服务
术语 Web 资源是在暗示通用 Web 访问时使用的通用术语。
HTTP 操作是加粗的
按钮/对话框控件是“引用和加粗”
超链接是下划线的
JSL 对象和函数是斜体字
JSL 变量/列/消息名称为“引用并斜体”
参考
桑德罗·霍克 (2011 年 12 月 16 日)休息从...获得https://www.w3.org/2001/sw/wiki/REST
W3.org方法定义从...获得https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html
W3.org状态代码定义检索到的https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
Mozilla.org(2018 年 5 月 13 日) HTTP请求方式从...获得https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods
JSON.org(2017 年 12 月)介绍 JSON从...获得https://www.json.org
JMP.com(2018 年 7 月 12 日)列表从...获得https://www.jmp.com/support/help/14/lists.shtml
JMP.com(2018 年 7 月 12 日)使用关联数组从...获得https://www.jmp.com/support/help/14/work-with-associative-arrays.shtml
CURL 命令行工具和库,用于通过 URL 传输数据从...获得https://curl.haxx.se/
W3.org(2015 年 1 月 22 日)保护网络安全从...获得https://www.w3.org/2001/tag/doc/web-https
W3.org(2014 年,6 月 11 日) HTTP - 超文本传输协议从...获得https://www.w3.org/Protocols/
Mozilla.org(2018 年 7 月 3 日) MIME 类型的不完整列表从...获得https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Complete_list_of_MIME_types
PubChem.ncbi.nlm.nih.gov关于 PubChem从...获得https://pubchemdocs.ncbi.nlm.nih.gov/
MMs.com原料从...获得http://www.mms.com/us/nutrition
W3Schools.com HTML URL 编码参考从...获得https://www.w3schools.com/tags/ref_urlencode.asp
开发者.marvel.com开发者门户从...获得https://developer.marvel.com/