1
resposta

Django com SOAP API

Boa Noite,

Criei um CRM para minha empresa e agora eles querem colocar a API deles dentro do CRM como uma feature, mas eu ainda estou apredendo sobre Django e quando fala sobre arquitetura SOAP é pior ainda... Eu consegui gerar um código aqui usando zeep, mas não sei se está correto (ou se vai funcionar), já postei essa pergunta no StackOverflow e em fóruns especializados, mas até agora não tive resposta... Se alguém puder me ajudar e, se possível, me dar umas dicas de como funcionaria, eu agradeço.

Obs: Tive que censurar os nomes

from zeep import Client

client = Client('httsp://company.com/?wsdl')
element1 = client.get_element('ns0:E1')
element2 = client.get_element('ns1:E2')
element3 = client.get_element('ns2:E3')
element4 = client.get_element('ns3:E4')
element5 = client.get_element('ns4:E5')
element6 = client.get_element('ns5:E6')
element7 = client.get_element('ns6:E7')
element8 = client.get_element('ns7:E8')
element9 = client.get_element('ns8:E9')
obj1 = element1(E1 = 'A')
obj2 = element2(E2 = 'B')
...
obj9 = element9(E9 = 'I')
header = xsd.Element(
    '{X/?wsdl}auth',
    xsd.ComplexType([
        xsd.Element(
            '{X/?wsdl}username',
            xsd.String(),
            '{X/?wsdl}password'),
    ])
)
header_value = header(username='user', password='pass')
client.service.Companymethod(_soapheader={heaeder_value, obj1, obj2, ... obj9})

XML

<definitions targetNamespace="http://X/soap/X">
<types>
<xsd:schema targetNamespace="http://X/soap/X">
<xsd:import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
<xsd:import namespace="http://schemas.xmlsoap.org/wsdl/"/>
<xsd:complexType name="Companymethod">
<xsd:all>
<xsd:element name="YRequest" type="tns:YRequest" minOccurs="1"/>
</xsd:all>
</xsd:complexType>
<xsd:complexType name="YRequest">
<xsd:all>
<xsd:element name="E1" type="xsd:string" minOccurs="1" maxOccurs="1"/>
<xsd:element name="E2" type="xsd:nonNegativeInteger" minOccurs="1" maxOccurs="1"/>
<xsd:element name="E3" type="xsd:string" minOccurs="1" maxOccurs="1"/>
<xsd:element name="E4" type="xsd:string" minOccurs="1" maxOccurs="1"/>
<xsd:element name="E5" type="xsd:nonNegativeInteger" minOccurs="1" maxOccurs="1"/>
<xsd:element name="E6" type="xsd:boolean" minOccurs="0" maxOccurs="1"/>
<xsd:element name="E7" type="xsd:nonNegativeInteger" minOccurs="0" maxOccurs="1"/>
<xsd:element name="E8" type="xsd:nonNegativeInteger" minOccurs="0" maxOccurs="1"/>
<xsd:element name="E9" type="xsd:nonNegativeInteger" minOccurs="0" maxOccurs="1"/>
</xsd:all>
</xsd:complexType>
1 resposta

Olá Marcus, como você está?

Peço desculpas pela demora em obter um retorno.

A API SOAP (Simple Object Access Protocol) é um protocolo antigo para comunicação entre sistemas e usa XML como formato de mensagem. É comumente usado em integrações de sistemas legados que ainda utilizam essa arquitetura. Atualmente na Alura não temos cursos que cobrem este nicho.

Entretanto, pelo código postado, a parte principal que faz a chamada para o serviço da empresa externa parece estar correta. Você criou um objeto client com o endereço do WSDL da empresa e criou os elementos necessários para compor a mensagem SOAP, passando-os como argumentos para o método Companymethod do objeto client.

No entanto, para garantir que tudo está correto, é importante entender a estrutura da API SOAP da empresa externa e seguir as especificações contidas na documentação. Você deve ter em mente que a API SOAP é baseada em um contrato, que define as operações disponíveis e os formatos esperados de entrada e saída.

Recomendo que você revise a documentação da API SOAP fornecida pela empresa e verifique se o código que você escreveu segue corretamente essas especificações. Além disso, é possível testar a chamada da API SOAP com a ajuda de ferramentas como o Postman ou o SoapUI. Essas ferramentas permitem testar as chamadas a uma API SOAP com diferentes parâmetros, facilitando a verificação da comunicação e das respostas da API.

Espero ter ajudado. Não hesite em voltar ao fórum para continuar aprendendo e interagindo com a comunidade.

Abraços e bons estudos!