[Python] SOAP 서비스를 간편하게 Develop Tip

30년 전도 전에 처음 개발을 시작할 당시,
서로 다른 두 대의 시스템에서 원격호출을 할 때는 ON C RPC를 이용했었습니다.
MS의 DCE RPC 이후 COM, COM+ 등이 나왔고,
그 이후 CORBA가 나오기도 했었지요.
한참 세월이 흐르고 Web이 대세가 된 다음 SOAP 이 원격 호출로 대세를 이루었습니다.

요즘이야 JSON으로 주고 받는 RESTful API 가 대세이지만, 바로 그 이전 서비스들은
이 SOAP로 되어 있는 것들이 많습니다. 특히 JSON 대신 XML 로 자료를 주고받고,
스키마는 wsdl 로 정의되어 있지요.

몇년 전에 이 SOAP 을 파이썬에서 이용하기 위해서 약 10년도 더 된
모듈을 까다롭게 이용했던 것 같은데, 최근에 살펴보니,
zeep 이라는 아주 편하고 잘 정의된 SOAP 이용 모듈이 나왔있네요.

Client 에다 wsdl 파일 또는 link 와 설정 정보를 넣고 생성한 다음,
바로 사용하면 됩니다.

다음 소스는 wsdl에 들어있는 링크 정보와 실제 서비스 링크 url 이 달라
create_service 를 지정했습니다.

암튼 어떤 기존의 SOAP 이던지 레거시 코드인 경우,
파이썬으로 쉽게 이용해 볼 수 있겠네요.


from zeep import Client, Settings

settings = Settings(strict=False, xml_huge_tree=True)
zc = Client('https://.../services/MyService?wsdl',
            settings=settings)

# 다음의 binding Index는 zeep 코드 안에서 오류난 self.wsdl.bindings 를 실제 보면 알 수 있습니다
my_binding = '{http://...}MyServiceSoap11Binding'
zcs = zc.create_service(my_binding, 'https://manager-rpa.argos-labs.com/services/QMSService.QMSServiceHttpSoap11Endpoint')
# getServerTime() 이라는 메서드 호출
r = zcs.getServerTime()
print(r)
# 해당 결과가 datetime 형식으로 잘 왔습니다.
r = zcs.getCollectionSiteV2("1827", "BCEE7B8932BA")
print(r)


어느 분께는 도움이 되셨기를 ..


덧글

댓글 입력 영역

구글애드텍스트