2012-07-03 2 views
0

문제점 : 여러 웹 사이트 (도메인/ips)에서 공유되는 여러 SOAP 클라이언트/서버의 변경 사항을 관리하는 더 나은 방법을 찾으려고합니다. 다행히도 모든 SOAP 서버/클라이언트를 제어 할 수 있지만 일부 복잡한 유형에 새로운 필드 또는 두 개를 때때로 추가해야합니다.이름 값 쌍 목록이있는 유연한 SOAP 서버/클라이언트 개발?

필드를 추가하면 관련 사이트 전체에서 종속성 문제가 발생합니다. SOAP 서버에 새 필드가 없으면 오류가 발생합니다. 이러한 사이트의 개발자, 데모 및 검증 된 버전에 대한 배포로 인해 종속성 악몽이 발생합니다.

SugarCRM은 복잡한 유형을 설정하고 이름/값 쌍 목록이 있음을 알았습니다. 유사한 접근법을 고려하고 있지만 Stackoverflow에서 사람들로부터 피드백을 받고 싶습니다. 저는 주로 PHP/MySQL을 사용하고 있습니다.

이 방법에 문제가 있습니까? 나는 이것이 내가 이름/값 쌍을 얼마든지 정의 할 수있게 할 것이라고 생각했다. SOAPClient 클래스 매핑에 기존 문제가 발생할 수 있다고 가정합니다.

<xsd:complexType name="name_value"> 
    <xsd:all> 
     <xsd:element name="name" type="xsd:string"/> 
     <xsd:element name="value" type="xsd:string"/> 
    </xsd:all> 
</xsd:complexType> 

<xsd:complexType name="name_value_list"> 
    <xsd:complexContent> 
     <xsd:restriction base="SOAP-ENC:Array"> 
     <xsd:attribute ref="SOAP-ENC:arrayType" wsdl:arrayType="tns:name_value[]"/> 
     </xsd:restriction> 
    </xsd:complexContent> 
</xsd:complexType> 

<xsd:complexType name="name_value_lists"> 
    <xsd:complexContent> 
     <xsd:restriction base="SOAP-ENC:Array"> 
     <xsd:attribute ref="SOAP-ENC:arrayType" wsdl:arrayType="tns:name_value_list[]"/> 
     </xsd:restriction> 
    </xsd:complexContent> 
</xsd:complexType> 

답변

0

이전 버전과 호환되지 않는 변경을 수행하면 끝점을 새 URL로 이동하거나 다른 종류의 마커를 제공해야합니다. 어떤 곳에서는 필요한 버전을 선언하는 XML 속성이 밴드의 첫 번째 요소에 첨부됩니다. 다른 경우에는 HTTP POST 요청에 포함 된 헤더 (또는 드물게 쿼리 문자열)입니다. 그런 다음 여러 위치에서 API의 여러 버전을 고려해야합니다.

사이드 노트 (여기에서는 전쟁을 시작하지 않으려 고합니다) : 여기는 REST 아키텍처가 실제로 빛나는 곳입니다. 모든 버전은 MIME 유형에 의해 처리됩니다. 자원이 주어진 MIME 유형을 지원할 수 없으면 요청자에게 그 사실을 알리고 대신 더 호환 가능한 버전을 협상 할 수 있습니다.