인터넷 우체국 사업자 포털 오픈API
인터넷에서 우편번호 검색하는 서비스가 있나 하고 검색을 하던 중 반가운 페이지에 도착했다.
이름하여, “오픈API“!!!
아… 이제 우리나라도 이런거 되는구나! 역시!!!
기쁨은 아주 잠시 뿐, 실망스러운 부분이 너무도 많다.
References
다음 링크들을 참고하였다.
- 우체국 Open API 인코딩 문제
- 우체국 오픈 api 사용하기
- Classic ASP에서 우체국 우편번호 검색 API 사용하기
- Classic ASP에서 우체국 우편번호 API 사용하기 2
HTTP
- GET POST 둘 다 된다. (이건 좋은 건가?)
query
request parameter는 인코딩을 아예 안하거나(@@?)euc-kr
로 하면 된다.Accept-Language: ko
를 꼭 써줘야 한다.
XML
- 오랜만에 보는
encoding="euc-kr"
이다. - 아주 멋찐
<![CDATA[]]>
!!! - 역시나 XML Namespace를 기대하기는 어렵다.
- 특정 element localname(
{}postcd
)이 예시문서({}zipcode
)와 다르다. 서울 광진구 구의1동 248~252
이 따위로 주면 번지 구간을 어떻게 자르라는 건가?
How should be
EJB, JAX-RS
여기에 Stateless Session Bean과 JAX-RS Resource들을 구현해 놓았다. 참고하시길.
단 PostalCodesBean을 쓰려면 다음과 같이 ejb-jar.xml에 regkey값을 설정해줘야 한다.
<?xml version="1.0" encoding="UTF-8"?> <ejb-jar xmlns = "http://java.sun.com/xml/ns/javaee" version = "3.1" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd"> <enterprise-beans> <session> <ejb-name>PostalCodesBean</ejb-name> <env-entry> <env-entry-name>com.googlecode.jinahya.epost.openapi.PostalCodesBean/regkey</env-entry-name> <!--env-entry-type>java.lang.String</env-entry-type--> <env-entry-value>{your_regkey}</env-entry-value> </env-entry> </session> </enterprise-beans> </ejb-jar>
XML Schema
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" version="1.0" targetNamespace="http://jinahya.googlecode.com/epost/openapi" xmlns="http://jinahya.googlecode.com/epost/openapi" xmlns:tns="http://jinahya.googlecode.com/epost/openapi" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <xs:element name="postalCodes" type="postalCodes"/> <xs:complexType name="postalCode"> <xs:sequence> <xs:element name="address" type="xs:string"/> <xs:element name="code" type="xs:string"/> </xs:sequence> </xs:complexType> <xs:complexType name="postalCodes"> <xs:sequence> <xs:element name="postalCode" type="postalCode" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> </xs:schema>
XML
<?xml version="1.0" encoding="utf-8"?> <postalCodes xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://jinahya.googlecode.com/epost/openapi" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <postalCode> <address>서울 광진구 구의1동 632~640</address> <code>143835</code> </postalCode> <postalCode> <address>서울 광진구 구의1동 257</address> <code>143828</code> </postalCode> <postalCode> <address>서울 광진구 구의1동 253~254</address> <code>143827</code> </postalCode> <postalCode> <address>서울 광진구 구의1동 248~252</address> <code>143826</code> </postalCode> <postalCode> <address>서울 광진구 구의1동 232~241</address> <code>143824</code> </postalCode> <postalCode> <address>서울 광진구 구의1동 221~222</address> <code>143823</code> </postalCode> <postalCode> <address>서울 광진구 구의1동 서울광진경찰서</address> <code>143703</code> </postalCode> <postalCode> <address>서울 광진구 구의1동</address> <code>143201</code> </postalCode> <postalCode> <address>서울 광진구 구의1동 새한아파트</address> <code>143722</code> </postalCode> <postalCode> <address>서울 광진구 구의1동 242~243</address> <code>143825</code> </postalCode> <postalCode> <address>서울 광진구 구의1동 246</address> <code>143825</code> </postalCode> <postalCode> <address>서울 광진구 구의1동 641~655</address> <code>143836</code> </postalCode> <postalCode> <address>서울 광진구 구의1동 크레신타워3차</address> <code>143716</code> </postalCode> <postalCode> <address>서울 광진구 구의1동 225~226</address> <code>143960</code> </postalCode> <postalCode> <address>서울 광진구 구의1동 229~231</address> <code>143962</code> </postalCode> </postalCodes>
Comments
<bluff>지금 내가 가는 길을 누군가 먼저 걷지 않았다면 내 발은 온통 자갈에 채여 멍이 들고 가시에 찔려 피를 흘리고 있을 것이다.</bluff>
— 나 —
아래는 그 ‘누군가’에 해당하는 분들의 말씀들이다.
어지간히 단가가 쌌던 모양이다.
— Dopany Soft —
여담이지만 우리나라 API제공은 전혀 친철하지 않다..
그냥 알아서 쓸려면 쓰고 말라면 말라는 식이다.우체국 API페이지도 들어가보면 참 부실하기 짝이 없는 도움말들..
뭐 이유야 훤히 보이는 거지만..
외부에 맞겨서 API개발하고 소스는 돌아가지만
그 시스템을 아는 사람은 우체국 쪽에 별로 없다..
그래서 도움말도 외부업체에서 받은 기술서가 전부고 그마저도 대충 보여주고 마는 거겠지…— 수유산장 —