우체국 OpenAPI는 그 형태가 XML입니다.
전달하는 데이터의 길이나 javascript에서의 활용성 등을 고려하면 json으로 제공해주면 더 좋았을 텐데요...
이런 건, 아쉬운 사람이 해결해야 하는 법이죠.
XML을 json으로 변환해서 사용해 봅시다.
XML Parser
저는 xml2js라는 녀석을 사용했습니다. (0.4.19 version이 최신이네요)
https://www.npmjs.com/package/xml2js
https://github.com/Leonidas-from-XIV/node-xml2js
사이트에 예제가 잘 정리되어 있으므로, 간단하게 적용이 가능합니다.
Angular에서 사용하기 위해서는 당연히 module 추가부터 해야 겠죠?
> npm install xml2js --save
저는 우편번호 검색 기능을 별도의 service로 만들었습니다.
service에서 참조하기 위해서는.
그리고 실제 사용 예제는 아래와 같습니다.
첫번째 인자인 res.text() 가 실제 우체국에서 받아온 response (XML) 입니다.
두번째 인자는 변환 option 설정입니다.
세번째 인자는 callBack 입니다.
매우 직관적이고 간단하죠??
explicitArray
(default:true
): Always put child nodes in an array if true; otherwise an array is created only if there is more than one.
여기서 explicitArray를 false로 처리한 부분이 양날의 검이었습니다...
왜 그런지 우체국의 OpenAPI의 응답값을 살펴보죠.
'청와대'로 검색해 보았습니다.
pageinfo element를 통해서 검색 결과에 대한 summary를 제공합니다.
itemlist element에서는 실제 검색된 주소 목록을 제공합니다.
이 schema를 그대로 유지한 채로 json으로 변환하면 아래와 같은 모습이 됩니다.
(변환은 http://www.utilities-online.info/xmltojson/#.We0-CGh-pPY 을 이용했습니다.)
그런데 탐색할 데이터 구조에서는 item이라는 node는 굳이 필요하지 않아 보입니다.
아래와 같이 말이죠.
json에서는 array의 각 item의 type이 명시되지 않아도 되는데, XML은 그렇지 않으니까요...
이런식으로 XML을 json으로 변환할 때 적용할 rule을 xml2js의 option을 통해서 할 수 있습니다.
다음 글에서는 개발간 우체국 주소 OpenAPI를 연동할 수 있는 방법을 소개하겠습니다.
'Programming > OpenAPI' 카테고리의 다른 글
우편번호 오픈API 연동 #1 (0) | 2017.09.18 |
---|