2011-10-12 2 views
57

저는 현재 기존의 광범위한 SOAP 관리 API를 사용할 클라이언트를 구현하려고합니다.Python SOAP 클라이언트 - SUDS 또는 다른 것을 사용합니까?

pysimplesoapSUDS과 같은 다른 SOAP 구현을 살펴 보았습니다. 처음에는 너무 많은 재귀 때문에 WSDL을 파싱하는 데 문제가 있었지만, 비눗 방울은 괜찮 았지만 (느리지 만) 모듈을 정말 좋아합니다.

그러나 높은 메모리 사용, WSDL 구문 분석 속도 및 일부 WSDL 특성 (예 : 선택 특성)에 대한 지원이 누락 된 것처럼 SUDS에는 몇 가지 문제가있는 것으로 보입니다.
버그보고 및 패치를 적극적으로 저지르는 사람들이 많이 있지만 2010-09-15에 0.4 이후 SUDS가 no release입니다. 또한, 위키와 로드맵은 무시되어 보입니다.

저에게는 SUDS가 더 이상 유지 관리되지 않는 것처럼 보입니다. 그래서 여기

내 질문 :

  1. 가 비누 클라이언트로 비눗물에 더 큰 프로젝트를 기반으로하는 의미가 있습니까?
  2. 발권 시스템에서 사용할 수있는 패치를 이미 구현 한 거품 포크가 있습니까?
  3. 어떤 대안이

    2 년 이상이 경과 한 [2013 업데이트 11월] 낮은 메모리 풋 프린트를 사용하기 쉬운 복잡한 대형 WSDL 파일

을 처리 할 수, 사용할 수 있으며, 그것은 원래의 거품 프로젝트가 실제로 죽었던 것으로 밝혀졌습니다. 이 사실로 인해 많은 사람들이 비눗물을 포크로 만들기 시작했고 데비안과 같은 배포판은 문제의 일부를 수정하기 위해 패치 된 버전의 원래 비눗물 패키지를 배포하고 있습니다.

성공적으로 사용한 Jurko의 적극적으로 유지 관리되는 포크를 권할 수 있습니다. 그것은 파이썬 3을 지원하고 많은 비눗물의 알려진 문제를 해결합니다. 릴리스 노트 및 버그 추적기는 Bitbucket에서 사용할 수 있습니다. 패키지는 PyPI에서도 사용할 수 있으므로 pip를 사용하여 설치할 수 있습니다.

+5

위키는 2010 년에 릴리스 된 0.4 버전에 대한 대부분의 부분을 변경합니다 (빌드 번호와 같은 것들). 지난 7 일 동안 한 기여자가 약 11 명이 저지른 365 일 동안 대부분이 사소한 업데이트로 업데이트되었습니다 (1-2 loc). 커밋 중 어느 것도 새로운 릴리즈가되었습니다. – circus

+1

위의 서커스 (http://stackoverflow.com/users/593507/circus)의 발언을 확인할 수 있습니다. * [original suds] (https : // pypi.python.org/pypi/suds) 2010 년 이후 *. 그러나 [niekas] (http://stackoverflow.com/users/2609806/niekas)는 비눗물 포크가 유지되고 있음을 발견했습니다. [suds-jurko] (https://bitbucket.org/jurko/suds/) ;-) – olibre

답변

44

존재하지 않는 것 같다 당신은 SOAP을 사용해야합니다, Suds가 최선의 선택입니다. Suds는 대형 WSDL에서 느려질 수 있으며, 이는 그들이 작업하고있는 것입니다.

  1. 당신의 WSDL을 다운로드 캐싱
  2. 를 사용
  3. 을 localhost로 : 한편

    당신이 당신의 WSDL이 자주 변경하는 기대하지 않는 경우, 당신은 당신에게 속도를 많이 살 수있는 두 가지 옵션이 있습니다

문제의 큰 WSDL을 일부 사용하여 WSDL

을 다운로드하는 것을 먼저해야 다우입니다 매번 WSDL을로드하면 오버 헤드가 추가 될 수 있습니다.Suds는 시작할 때 전체 WSDL을 다운로드하고 파싱하여 변경되지 않았 음을 확인합니다.

로컬 시스템으로 다운로드 한 다음 URL에 file:// 체계를 사용하여 Client 생성자로 전달할 수 있습니다. Suds는 HTTP 전송을 위해 urllib2을 사용하기 때문에 이것이 합법적입니다.

이제 WSDL URL에 호스트 이름을 제공하지 않으므로 location 인수에 SOAP 응용 프로그램의 실제 URL을 지정해야합니다.

from suds.client import Client 

# The service URL 
soap_url = 'http://myapp.example.notreal/path/to/soap' 

# The WSDL URL, we wont' use this but just illustrating for example. This 
# would be the file you download to your system and save as wsdl_file 
wsdl_url = 'http://myapp.example.notreal/path/to/soap?wsdl' 

# The full path to the downloaded WSDL file on your local system 
wsdl_file = '/path/to/myapp.wsdl' 
wsdl_url = 'file://' + wsdl_file # Override original wsdl_url 

client = Client(url=wsdl_url, location=soap_url) 

당신이 관심이 있다면

, 내 일에이 방법을 사용 open sourced the code을 가지고있다 : 여기

은 예입니다.

다른 옵션 당신의 WSDL 캐싱은 배트 'excellent caching feature을 사용하는 것입니다. 명시 적으로 캐시 객체를 생성 한 다음 cache 인수를 사용하여 생성자에 전달해야합니다. 그렇지 않은 경우 기본값은 ObjectCache이며 기간은 1 일입니다.

이러한 두 가지 방법을 모두 사용할 수도 있습니다.

+0

좋아, 나는 비눗물을 계속 사용하고 함축적 인 방법을 사용합니다. 또한 아마도 메모리 발자국을 줄이기 위해 패치 된 버전의 스터드로 끝날 것입니다. – circus

+0

공유하도록 선택하면 최종 결과가 표시되기를 기대합니다! :) – jathanism

6

흥미로운 최신 게시물이 여기에서 찾을 수 있습니다 : What SOAP client libraries exist for Python, and where is the documentation for them? 불행하게도, 당신이 찾고있는 완벽한 SOAP 라이브러리는 경우, 공인 된 표준이 아니지만 (아직)

+0

I 이 스레드에 대해 알고,이게 내가 처음에 비눗물을 발견 한 방법입니다. 어쨌든 고마워. – circus

+0

또한 완벽한 라이브러리를 찾고 있지 않습니다. 다음 해반기에 비눗물을 다루는 더 큰 프로젝트를 결정해야합니다. 라이브러리를 작동 시켜야만 패치를 적용해야합니다. – circus

5

2013 년입니다. 파이썬 및 SOAP과 관련된 문제가 발생한 사용자를위한 업데이트입니다.

저는 SOAP을 Python에서 사용하려고했습니다.

RuntimeError: maximum recursion depth exceeded while calling a Python object 

문제 비눗물로 밝혀 순환 참조가 있습니다 : 나는 비눗물을 시도했지만 아쉽게도 도서관 내 코드의 첫 번째 테스트 실행에서 2010 년 이후 업데이트되지 않은,이 오류가 발생 HTTPS 연결. See drfence's answer. 그 문제를 극복하기 위해 수동으로 비눗물을 패치해야했습니다.

대신 php로 전환했습니다. 파이썬만큼 간단하지는 않지만 작동시킬 수있었습니다.

+13

[suds-jurko] (https://bitbucket.org/jurko/suds/)는 SUDS 포크로 유지됩니다. – niekas

+0

@niekas 감사합니다. 나는 그것을 조사 할 것이다. – RobotNerd

+0

NetSuite WSDL을 재귀 깊이로로드하는 것과 동일한 문제가있었습니다. 최신 JURKO SUDS 개발자 빌드가 필요하며 문제를 해결해야합니다. (bitbucket URL 앞에 https를 추가하십시오 - 주석에서 주석을 쓰지 마십시오) sudo pip install bitbucket.org/jurko/suds/get/tip.tar.gz#egg=suds –

6

zeep이라고하는 새롭게 유지 관리되는 SOAP 클라이언트가 있습니다. Python 2와 3을 모두 지원하며 잘 알려진 lxml 및 요청 라이브러리를 기반으로합니다.

+0

나는' 제프 '는 첫 페이지에 그들의 예가 잘못되어 있기 때문에; 첫인상. 특히 다른 예제에서 반복되는 빠른 예제에서 가져온 것은'from zeep import Client'입니다. 그런 다음 2 번 줄 ('client = zeep.Client (')는'NameError : name 'Zeep'not defined'을줍니다.) – VertigoRay

+3

오픈 소스이므로 ... https://github.com/mvantellingen/python-zeep/pull/23 – VertigoRay

+2

하하 나는 그 변화로 홍보를 보내려했다. – chhantyal

관련 문제