導入 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/