서론
공공데이터 포털등 다양한 사이트에서 open API로 정보를 활용할 수 있도록 해놓았다. 다양한 데이터를 만져볼 수 있다는 점에서도 그렇고, 요새는 open api활용 경험이 프로그래머들에겐 기초교양같은 느낌이라, 다들 한번쯤은 접하는것 같다. 그러나 활용방법에, 간략한 설명을 써놓았지만 처음 접하는 사람은 알아보기 힘들다.(바로 나)
내가 활용하면서 얻은 지식을 정리해보았다.
본론
우선, Open API는 다양한 방식으로 활용권한을 부여하지만 가장 기본적이고 대중적으로 허가받은 유저에게 service키를 발급한다. 따라서 open api를 활용하기 위해선 보통 신청을 하고(간략하게 활용목적도 적는다.) 키(key)를 발급받는다.
그럼 그 키를 어떻게 써먹는가? 이는 API의 유형이 따라 다르다. 대부분 SOAP혹은 REST 유형을 가지고 있다. SOAP가 REST에 대한 요약된 설명1, 설명2. 간단하게 설명하면 다음과 같다.
SOAP 과 REST 비교
SOAP란
SOAP는 HTTP, HTTPS, SMTP 등을 통해 XML 기반의 메시지를 컴퓨터 네트워크 상에서 교환하는 프로토콜이다. XML로 만들어진 웹서비스의 데이터를, WSDL라는 이름의 웹표준형태로 정의하여 UDDI라는 일종의 전역적 저장소에 등록하여 이용가능도록 만든 것이다. (사용의 목적에 초점을 두었기에, 전문적 용어는 간단히 접하고 넘어가도 무방하다.) SOAP를 통해 교환데는 XML데이터는 SOAP Envelope, SOAP Header, SOAP Body로 구성된다.
장점 : 분산 컴퓨팅환경을 다루기 위해 설계되어 있고, 다양한 표준규약에 익숙한 경우 많은 확장을 할 수 있다는 장점이 있다.
단점 : 복잡한 구조를 가지고 있어서 HTTP상에서 바로 전달되기 무겁고, 인코딩/디코딩 과정등 처리(혹은 개발)하는데에 난이도가 높다. 또한, 사용을 위해 별도의 개발환경(Tool)이 필요하다.
REST란
REST는 HTTP 프로토콜로 데이터를 전달하는 프레임워크이다. 단순한 HTTP 요청과 그 결과를 단순한 XML등의 포맷으로 돌려주는 구조이다. UDDI를 통해 등록하고, 탐색하는 등의 과정을 거치는 SOAP기반 서비스와 다르게, REST는 중간 매개체 없이 리소스제공자가 직접 리소스 요청자에게 제공을 할 수 있어, 간단하다. REST원리를 따르는 시스템을 종종 RESTful이라는 용어로 지칭(거의 같은의미로 봐도 된다.)
장점 : SOAP보다 처리(및 개발)가 쉽다. (RESTful웹서비스는 인터넷 서비스업체들이 응용개발자들에게 손쉬운 데이터제공을 목적으로 시작되었다.)
단점 : SOAP와 반대로 표준규격이 부족하여 함축적이지 않고 안정성이 덜하다.
API를 처음 접하는 사람입장에서, SOAP는 다루기 어려운것이라고 이해하면 된다. 그렇기 때문에 요새는 거의 REST가 장악했다고 보면 된다. (흔히 SOAP vs REST를 표준vs간결함 으로 표현한다. 파이썬이 뜨고 있듯, 웹상에서도 간결함이 특징인 REST가 뜨고 있다.) 따라서 API의 사용법 역시 REST에 기반한 API제공에 초점을 둔다. (대부분의 API가 REST형태일 것이다.)
본격적인 API활용법
api를 신청하던 그 페이지에 들어가 보면, 보통 참고문서, 혹은 활용매뉴얼 등의 이름으로 각 api마다 문서가 있다. 뭐라뭐라 길게 씌여 있는데, 이 중 우리에게 필요한것은 url end-point와 그에 덧붙여질 요청파라미터들이다. 문서를 보면 이렇게 씌여 있을 것이다.
내용 | 행사정보를 날짜로 조회하는 기능입니다 |
---|---|
형식(혹은 URL end-point) | http://api.visitkorea.or.kr/openapi/service/rest/KorService/searchFestival |
여기서 형식의 url을 활용하는 것인데, 저것은 앞문장만 완성시켜 놓은것이다. 따라서 우리가 필요한 인자정보들을 적어서 최종적인 url을 만들면 된다. 인자정보들은 말그대로 구체적인 요청을 내리기 위한 parameter들인데, 자신의 키값(필수)과 요청할 항목들(request parameter)을 명시해주는 것이다. 즉, 해당 예시에선 다음과 같이 url을 만들면 된다.
http://api.visitkorea.or.kr/openapi/service/rest/KorService/searchFestival?ServiceKey=자신의키값&Request_Parameter_항목명1=값1&Request_Parameter_항목명2=값2
공공데이터 포털의 Url도 상세기능 뒤에는 ?을 사용하여 기본인자 정보들을 적고, 기본인자사이에는 &을 붙여 구분지어준다. 그러나 제공하는 api마다 상세한 방식은 다를 수 있으니, doc을 꼭 읽어봐야 한다. (그냥 ‘/a/b/c’ 이렇게 붙이는 경우도 있다.) (상세기능은 Festival등등 카테고리라고 보면 되고, 인자는 dateTerm, serviceKey등등)
문서를 조금더 내려보면, url end-point를 설명한 후 추가로 적을 인자정보들을 소개하고 잇을 것이다. api마다의 요청 파라미터값은 api doc에 자세히 나와있으니 자신이 필요한 요청값을 서비스키값 뒤로 적절히 붙여 요청하면 된다. (사실 순서는 중요하지 않다. 항목명1값뒤에 키값이 와도 된다.)
또한, Request Parameter 중 필수 항목은 꼭 들어가야하는 파라미터항목으로 없으면 에러가 난다. (‘필수’라고 적힌 부분이 있는지 api doc을 확인해보자.)
기본적으로 REST방법은 이렇게 만들어진 최종 url을 입력하면, 즉 request를 보내면 respond를 준다. 이 respond는 xml형식일수도, json형식일수도 있다. (doc에서 명시해줄것이다.)
이렇게 가장 간단하게는, 해당 url을 브라우저에 입력하여 respond를 받는것이다. (그냥 구글크롬에다 해당 url치면 respond된 값이 크롬창에 뜨게 된다. 그러나 대부분의 경우 단일 정보를 보는것이 아니라 다양한 정보들을 수집하고 싶을 것이다. 이 경우 url을 지정하면 해당 request를 보내고 respond를 받고, 그 반환된 데이터(xml이던 json이던 형태에 맞춰서)를 정리 및 저장하는 다양한 패키지들이 있다. (R에서는 RCurl, Python에서는 BeutifulSoup등이 있다.) 해당 패키지들을 이용하여 반환받은 데이터를 구조를 파악하고, 그중 원하는 데이터만을 정리 및 저장해주는 코드를 짜주면 open API활용 완성!
R에서 정리 및 저장하는 코드는 링크로 달아놓았다.
파이썬으로 정리 및 저장하는 코드는 다음에 해보겠다.
R에서 코드짜는것 예시 : https://magician-of-c.tistory.com/36?category=250800
완전 자세한 사진설명 + java 코드 : https://jeong-pro.tistory.com/143
또다른 자세한 사진설명 + java 코드 : https://shlee0882.tistory.com/2
SOAP과 REST에 대한 차이점 요약한 사이트 : http://blog.naver.com/PostView.nhn?blogId=islove8587&logNo=220431962636
Comments