웹 서비스 데이터 가져오기: JMP ® 14의 새로운 HTTP 요청(US 2018 231)
레벨: 중급
Bryan Boone, JMP 수석 소프트웨어 개발자, SAS
정부 및 민간 기업은 점점 더 RESTful 서비스를 통해 인터넷을 통해 데이터를 사용할 수 있게 만들고 있습니다. JMP 14에는 다음과 같은 새로운 기능이 있습니다. HTTP 요청 , JSL을 통해 사용 가능하며 이러한 RESTful 서비스에 액세스할 수 있습니다. 이 백서는 RESTful 서비스가 무엇인지 설명하고 사용 방법에 대한 몇 가지 예를 제공합니다. HTTP 요청 새 데이터를 JMP로 가져올 수 있습니다.
REST 란 무엇입니까
REST 또는 Representational state transfer는 인터넷에서 컴퓨터 시스템 간의 상호 운용성을 제공하는 방법입니다. RESTful 서비스는 이러한 패러다임을 활용한 웹 기반 서비스입니다. RESTful API는 HTTP 요청을 사용하여 얻다 , 우편 , 놓다 그리고 삭제 RESTful 서비스와 상호 작용할 데이터.
HTTP 프로토콜은 요청 HTTP 메서드 집합을 정의하여 클라이언트가 서버에서 리소스에 대해 수행하기를 원하는 작업을 나타냅니다. 그들은:
얻다
|
리소스 요청
|
머리
|
리소스 메타데이터만 요청
|
우편
|
리소스 수락 요청
|
놓다
|
리소스 저장 또는 생성 요청
|
삭제
|
리소스 삭제 요청
|
반점
|
리소스 상태 수정 요청
|
새로운 용어, 친숙한 활동
이것은 완전히 새로운 개념처럼 보일 수 있지만 가장 일반적인 두 가지 요청 방법에 이미 익숙합니다. 얻다 그리고 우편 .
얻다
얻다 두 가지 성격을 가지고 있습니다.
첫 번째 성격은 바로 얻다 - 리소스를 지정합니다. 즉, 의도는 단순히 웹 리소스에 액세스하는 것입니다. 이는 그림 1에서 볼 수 있습니다. 여기서 브라우저는 웹 페이지에 액세스하고 있습니다.
그림 1. “ 얻다 웹 리소스용”
두 번째는 얻다 -질의 문자열로 알려진 것과 함께 리소스를 팅(액세스)합니다. 쿼리 문자열은 웹 리소스에 의해 정의되고 클라이언트가 서버에 필터링 또는 수정을 요청하는 데 사용하는 키/값 쌍의 집합입니다. 얻다 이 매개변수를 사용하여 요청합니다. 이는 그림 2에서 볼 수 있습니다. 여기서 브라우저는 서버에 얻다 다음을 사용하여 요청:
우편
우편 , 반면에 더 복잡합니다. ㅏ 우편 서버에 리소스를 변경하거나 생성하도록 요청합니다. ㅏ 우편 일반적으로 문자 데이터의 키/값 쌍 및/또는 파일의 키/값 쌍 모음을 차례로 포함하는 HTML 양식을 포함합니다. 그림 3은 사용자를 Amazon에 로그인하는 예입니다. 여기서 키/값 쌍은 다음과 같습니다.
그만큼 "로그인" 버튼은 다음을 수행합니다. 우편

그림 3. “ 우편 양식 데이터를 웹 리소스로”
그것을 사용하는 이유
HTTP 프로토콜을 사용하면 정보 슈퍼 고속도로를 “고속도로가 포장되어 있습니다. 거리 표지판이 있고 다리가 건설되었습니다.” 이 표준을 통해 새로운 데이터 관리 회사가 형성될 수 있었습니다. 또한 HTTP 표준의 채택으로 기존 회사에서 흔히 볼 수 있는 정보 사일로가 제거되었습니다. 이러한 회사 중 일부는 다음과 같습니다.
Text-Processing.com(감정 데이터)
|
젠킨스
|
지라
|
허브
|
오피스 365
|
Google
|
드롭 박스
|
원드라이브
|
AWS(아마존 웹 서비스)
|
미국 인구조사국
|
NASA
|
펍켐
|
뉴욕 타임즈
|
핏빗
|
야후
|
비트코인
|
마블 코믹스
|
SAS
|
OpenAQ
|
JMP
|
사용 방법
JSON
JSON(JavaScript Object Notation)은 가벼운 데이터 교환 형식입니다. JavaScript 프로그래밍 언어의 하위 집합을 기반으로 합니다. JSON은 언어 독립적인 텍스트 형식이지만 대부분의 프로그래머에게 이미 친숙한 개념을 사용합니다.
JSON은 두 가지 구조를 기반으로 합니다.
- 이름/값 쌍의 모음입니다. (사전, 해시 테이블, 연관 배열, …)
- 정렬된 값 목록입니다. (배열, 벡터, 목록, ...)
새로운 용어, 친숙한 활동(다시)
JSL
JSL은 JMP와 관련된 스크립팅 언어로 선택됩니다. JSON은 새로운 용어일 수 있지만 JSL은 JSON이 요구하는 두 가지 데이터 구조를 지원합니다.
목록
기울기 다음과 같은 항목을 저장하는 컨테이너입니다.
- 숫자
- 변수
- 문자열
- 식(예: 할당 또는 함수 호출)
- 행렬
- 중첩 목록
연관 배열
- 안 연관 배열 고유하지 않은 값에 고유한 키를 매핑합니다. 연관 배열은 사전, 맵, 해시 맵 또는 해시 테이블이라고도 합니다.
JSL에는 JSON 처리와 관련된 두 가지 기능도 포함되어 있습니다.
JSON 구문 분석
- JSON 데이터의 구조를 기반으로 JSON 텍스트를 연관 배열 또는 목록으로 변환합니다.
JSON Expr로
이러한 기능을 통해 스크립트 작성자는 JSL 컨테이너와 JSON 간에 원활하게 변환할 수 있습니다.
HTTP 요청
HTTP 요청 JMP 14의 새로운 기능입니다. 원래 이 기술은 JMP와 JMP Public 간의 상호 작용을 처리하기 위해 만들어졌습니다. JMP Public에 데이터를 게시하는 것보다 더 많은 응용 프로그램이 있다는 것을 곧 깨달았고 이 기술은 JSL에서 다음과 같이 표면화되었습니다. HTTP 요청 .
HTTP 요청 입문서
HTTP 요청 http 및 https 프로토콜을 모두 원활하게 지원하고 cURL에서 기대하는 많은 동작을 캡슐화합니다.
“cURL은 명령줄이나 스크립트에서 데이터를 전송하는 데 사용됩니다. 또한 자동차, 텔레비전 세트, 라우터, 프린터, 오디오 장비, 휴대폰, 태블릿, 셋톱 박스, 미디어 플레이어에도 사용되며 매일 수십억 명의 사람들에게 영향을 미치는 수천 개의 소프트웨어 애플리케이션을 위한 인터넷 전송 백본입니다.”
더 중요한 것은 생각할 수 있습니다. HTTP 요청 웹 리소스를 JSL에 연결하는 접착제 역할을 합니다. 그건, HTTP 요청 웹 리소스와 통신하고 스크립트 작성자가 JSL에서 응답을 처리할 수 있도록 합니다. JSL 복잡성은 작성자가 제어합니다.
웹 리소스와 상호 작용하는 동안 사용하는 가장 일반적인 HTTP 메서드는 다음과 같습니다.
GET 작업에서 HTTP 요청 사용
ㅏ 얻다 행동은 아마도 가장 일반적인 HTTP 요청 행동. 이 작업은 데이터를 JMP로 가져올 수 있는 읽기 전용 작업입니다.
일반적인 메시지 HTTP 요청 :
- "방법"
- "URL"
- "쿼리 문자열"
- "보내다"

그림 4. “ HTTP 요청 얻다 ”
HTTP 요청 얻다 행동은 종종 "쿼리 문자열" 매개변수를 웹 리소스로 전송합니다. 그림 5는 HTTP 요청 와 함께 "쿼리 문자열" . JSL에서는 "쿼리 문자열" 이다 연관 배열 키를 문자 값 또는 목록 문자 값. 그림 5의 스크립트가 실행되면 URL이 다음으로 자동 확장됩니다.
http://quotes.rest/qod.json?category=inspire
그림 5. “ HTTP 요청 얻다 '를 사용하여 쿼리 문자열' ”
POST 작업에서 HTTP 요청 사용
HTTP 요청 우편 작업은 종종 더 복잡합니다.
일반적인 메시지 HTTP 요청 :
- "방법"
- "URL"
- "형태"
- "JSON"
- "파일"
- "얼룩"
- "보내다"
그림 6은 HTTP 요청 “ 형태" 데이터. JSL에서는 "형태" 데이터는 두 가지 속성을 가질 수 있습니다. "필드" 및/또는 "파일" . 둘 다 JSL입니다. 연관 배열 키를 문자 값 또는 목록 문자 값. 의 경우 "파일" , 문자 값 또는 목록 of 문자 값은 " 형태".

그림 6. “ HTTP 요청 우편 사용하여 형태 ”
그림 7은 HTTP 요청 “ JSON” 데이터. JSL에서는 "JSON" 다음 중 하나일 수 있습니다. 연관 배열 또는 JSON 형식의 문자 데이터. JSON Expr로 함께 사용할 잘 정의된 JSON 객체를 생성합니다. HTTP 요청 . JSON 데이터는 요청 본문으로 전송됩니다.
그림 7. “ HTTP 요청 우편 '를 사용하여 JSON' ”
그림 8은 HTTP 요청 “ 파일" 데이터. JSL에서는 "파일" 요청 본문으로 보내려는 파일 이름입니다.
그림 8. “ HTTP 요청 우편 '를 사용하여 파일' ”
마지막 조치 HTTP 요청 “ 얼룩" 데이터. JSL에서는 "얼룩" 요청 본문으로 보내려는 이진 blob 데이터입니다. 즉, 파일을 요청의 일부로 보내기 전에 파일을 디스크에 쓸 필요가 없습니다.
그만큼 얻다 action은 가장 간단한 요청입니다. 우편 가장 복잡합니다. 사이의 상호 작용 HTTP 요청 웹 리소스는 항상 서버에 의해 정의됩니다. HTTP 프로토콜은 잘 정의된 표준이지만 데이터(및 데이터 구조)는 웹 리소스별로 정의됩니다. 즉, One Drive에 대한 API는 유사한 기능을 수행하지만 Dropbox와 다릅니다.
보낸 사람에게 반환
데이터 HTTP 요청 “ 보내다" 메시지는 웹 리소스에 따라 문자 데이터, 이진 Blob 데이터 또는 비어 있을 수 있습니다. 확인 중 " 비었다" 반환된 데이터는 데이터 조사의 가장 조잡한 수준입니다(없음 제외). 그러나 세분화된 수준의 조사가 필요한 경우 " 문자열” 문자 데이터를 확인합니다.
보다 세분화된 수준의 조사를 위해 다음을 사용할 수 있습니다. "MIME 유형 가져오기" . 일반적인 MIME 유형은 다음에서 찾을 수 있습니다. 불완전한 MIME 유형 목록 논문의 참조 섹션에 있는 기사.
마지막으로 필요한 경우 다음 메시지를 사용하여 웹 리소스에서 낮은 수준의 HTTP 상태 코드를 조사할 수 있습니다.
“정보 있음”
|
100-199
|
“성공적이다”
|
200-299
|
"리디렉션 있음"
|
300-399
|
"클라이언트 오류 있음"
|
400-499
|
"서버 오류가 있습니다"
|
500-599
|
“오류 있음”
|
클라이언트 또는 서버 오류가 있습니다.
|
"상태 가져오기"
|
HTTP 상태 코드
|
HTTP 상태 코드 설명은 다음에서 찾을 수 있습니다. 상태 코드 정의 논문의 참조 섹션에 있는 기사.
사용처
하지만 HTTP 요청 모든 웹 리소스의 문자 데이터 또는 이진 BLOB 데이터를 사용할 수 있으므로 RESTful 서비스의 문자 데이터, 즉 JSON 데이터에 중점을 둘 것입니다.
이것은 달콤하다
REST를 사용하는 HTTP 프로토콜 표준을 기반으로 설립된 새로운 데이터 관리 회사 중 하나가 PubChem입니다. PubChem은 2004년 미국 국립보건원(NIH)의 공개 화학 데이터 소스로 설립되었습니다. 매달 PubChem 기록을 업데이트하기 위해 대학, 제약 회사, 정부 기관 및 화학 판매업체와 같은 기관의 수백 가지 데이터 소스가 사용됩니다. 공개적으로 사용 가능한 화학 정보 소스의 가장 큰 컬렉션입니다.
PubChem은 데이터 쿼리를 물질, 화합물 및 분석 등으로 분류합니다. 여기에서 다양한 특성, 설명, 용량 및 기타 관심 특성을 얻을 수 있습니다.
나는 그것을 M & M 성분으로 읽었습니다.
그림 9. “일반 M&M 재료”
저는 Plain M&M의 성분에 대한 JMP 데이터 테이블을 생성하여 성분을 확인하는 JSL 스크립트를 작성했습니다. 성분이 인공색소에 무거워지는 것은 놀라운 일이 아닙니다.
JMP 부분 데이터 테이블 표현은 다음과 같습니다.
그림 10. “파셜 플레인 M&M 성분 데이터 테이블”
JSL 스크립트가 실행되면 HTTP 요청 물질 또는 화합물 이미지뿐만 아니라 PubChem의 RESTful 서비스에서 제공하는 기타 속성을 검색하는 데 사용됩니다.
그림 11. "PubChem 데이터가 포함된 부분 일반 M&M 성분 데이터 테이블"
관심 있는 RESTful 서비스 URL은 다음과 같습니다.
( [이름] 그림 9 및 10에 있는 물질 또는 화합물 이름입니다.)
유당과 같은 화합물의 이미지 데이터를 검색하려면 HTTP 요청 다음과 같이 보입니다.
그림 12. “ 얻다 -PubChem의 Lactose 이미지를 가져옴”

그림 13. “
얻다 -PubChem에서 Lactose의 이미지를 생성하고 표시합니다.”
Lactose 요청은 화합물에 대한 PubChem의 끝점을 사용합니다. 여기에 사용된 두 가지 추가 개념이 있습니다. 첫 번째는 인코딩 URI . Percent Encoding이라고도 하는 URI 인코딩은 RESTful URL에 ASCII 문자만 포함되도록 합니다(다행히도 Lactose가 포함함). 두 번째 컨셉은 "MIME 유형 가져오기" . 이 PubChem 끝점의 반환은 이진 BLOB 데이터(PNG 그림)입니다. 그만큼 "MIME 유형 가져오기" 이 끝점은 PNG가 없는 경우 문자 데이터를 반환하므로 새 이미지와 함께 사용되기 전에 blob이 실제로 PNG인지 확인합니다.
JSON 데이터에서 유당의 전체 기록을 검색하려면 HTTP 요청 다음과 같이 보입니다.

그림 14. “ 얻다 -PubChem에서 Lactose의 전체 기록을 가져옴”
PubChem에서 정의한 끝점은 다음을 지정합니다. /JSON 접미사는 RESTful 서비스가 JSON 데이터를 반환해야 함을 나타내므로 다음의 MIME 유형을 확인합니다. "데이터" 필요하지 않습니다. 그러나 JSON을 처리해야 합니다. 반환된 " 데이터" . 첫 번째는 사용하는 것입니다 "JSON을 데이터 테이블로" . 이렇게 하면 JMP 데이터 테이블을 만들려고 시도합니다. "데이터" . 직사각형 또는 표 형식 데이터의 경우 이는 잘 작동하고 빠릅니다. 그러나 모든 RESTful 서비스가 테이블 형식 데이터를 반환하는 것은 아닙니다(PubChem은 그렇지 않습니다). 반환된 데이터를 처리하는 두 번째 방법은 "JSON 구문 분석" . 이렇게 하면 JSL이 생성됩니다. 연관 배열 . 즉, JSON을 구문 분석할 필요가 없습니다. 그러나 반환된 데이터가 어떻게 구성되어 있는지 알아야 합니다. 즉, 키/값 쌍인지 키/값 쌍인지 알아야 합니다. JMP 로그에서 원시 JSON을 캡처하고 JSON 편집기를 사용하여 해당 구조를 검사할 수 있기 때문에 이는 보이는 것만큼 어렵지 않습니다.
Lactose에 대한 JSON 데이터의 부분 표시는 다음과 같습니다.
그림 15. "PubChem의 부분 유당 JSON 데이터"
이 편집기는 해당 JSON 개체와 함께 원시 JSON을 나란히 표시합니다. JSON의 {..} 데이터를 검사할 때 JSL을 생각하세요. 연관 배열 . 마찬가지로 [..]를 만나면 JSL을 생각합니다. 목록 .
이 기술을 사용하여 그림 14에 표시된 전체 레코드 스크립트를 수정하고 이를 사용하여 Lactose 속성에 대한 JMP 데이터 테이블을 생성할 수 있습니다.
그림 16. “ 얻다 -PubChem에서 Lactose의 전체 기록을 가져와서 " 소품" 데이터 테이블”
이 예제는 JSON 구문 분석 원시 JSON을 PubChem에서 JSL로 변환 연관 배열 . JSON 데이터 구조를 조사한 후 우리는 Lactose JSON의 "props" 데이터에만 관심이 있다는 것을 깨달았습니다. 그런 다음 친숙한 JSL을 사용할 수 있습니다. 연관 배열 JSL 검색을 위한 탐색 목록 "PC_Compounds"에서 찾을 수 있습니다. 목록의 첫 번째 항목만 원합니다(대부분의 " 소품" 반복된다)
"소품" 데이터는 JSL입니다 연관 배열 그래서 우리는 사용할 수 있습니다 JSON Expr로 번역하다 "소품" JSON으로 돌아가서 사용 JSON을 데이터 테이블로 . 결과는 그림 17에 나와 있습니다.
그림 17. "부분 유당 속성 데이터 테이블"
기억하다, HTTP 요청 웹 리소스를 JSL에 바인딩하는 접착제일 뿐입니다. 데이터를 JSL로 가져오면 필요에 따라 간단하거나 복잡하게 사용할 수 있습니다.
놀라운 일
2014년 Marvel Comics는 사용자가 70년 간의 만화 정보에 액세스할 수 있는 RESTful 서비스를 만들었습니다. Marvel Comics API는 스크립터의 상상력에 의해서만 제한되기 때문에 당연히 무엇을 찾을 수 있는지 확인하기 위해 키를 등록하고 탭해야 했습니다. 나는 썼다 마블:API Marvel Universe를 가로지르는 다양한 열을 사용하는 JSL 기능.
저는 Deadpool 팬이기 때문에 이 데이터 테이블을 생성한 초기 쿼리를 받았습니다.
그림 18. "부분 데드풀 데이터 테이블."
이것은 Marvel Comics Universe에서 가면을 벗긴 4명의 데드풀 캐릭터입니다. 첫 캐릭터의 정체가 궁금해서 선택했는데 시리즈 내가 만든 클릭 이벤트 핸들러. 클릭의 출처를 고려할 때 마블:API 함수는 반환 값이 MCU에서 Deadpool이 교차하는 위치를 나타내는 Marvel에 대한 새 쿼리를 생성할 수 있습니다. 결과를 50행으로 제한했습니다. 그러나 몇 가지 흥미로운 결과를 발견할 수 있었습니다. "에 대한 빠른 분포 분석을 수행했습니다. 제목" 그리고 "시작년" 데드풀의 인기가 언제 오르락내리락했는지(그리고 다시 올랐는지) 확인하기 위해서입니다.

그림 19. "부분 데드풀 배포."
그림 19는 2007년 데드풀이 다음과 같은 다양한 마블 코믹 타이틀로 넘어갔음을 보여줍니다.
- 어벤져스: 더 이니셔티브(2007-2010)
- 케이블 & 데드풀
- 시빌 워: 엑스맨 유니버스.
Deadpool에 대한 관심은 2007년 이후 다시 줄어들었지만 Ryan Reynolds가 X-Men Origins: Wolverine(2009)에서 캐릭터를 처음 연기한 후 다시 증가하여(분석에서 볼 수 있음) 캐릭터에 대한 관심이 다시 높아져 2011년에 정점에 도달했습니다.
2012-2015년, Marvel Comic Universe는 Marvel 재부팅을 위해 Deadpool Kills the Marvel Universe에서 폭발합니다.
마지막으로 2016-2018년에는 놀라운 일이 아닙니다. 그 때 영화가 나왔다.
Deadpool 2의 Peter는 Marvel Comics API를 "방금 광고를 보고 재미있을 것 같다"고 요약했습니다.
사용된 규칙
RESTful 서비스라는 용어는 웹 리소스가 REST 기반일 때 사용됩니다.
웹 리소스라는 용어는 일반적인 웹 액세스를 암시할 때 사용되는 일반적인 용어입니다.
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
URL로 데이터를 전송하기 위한 CURL 명령줄 도구 및 라이브러리 에서 검색 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 펍켐 소개 에서 검색 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
Developer.marvel.com 개발자 포털 에서 검색 https://developer.marvel.com/