Integrazioni enterprise · SOAP · MTOM/XOP

Integrazioni SOAP-MTOM
per allegati di grandi dimensioni

Web service SOAP-MTOM in PHP. Con allegati binari da centinaia di megabyte, codice nativo, no dipendenze.

🏦
Sistema del committente
WSDL imposto, tracciati rigidi
<soap:Envelope>
perizia.pdf · 148 MB
foto.zip · 62 MB
multipart/related · MTOM
⚙️
Il tuo servizio
Streaming su disco, RAM costante
Ti riconosci?

I problemi tipici
delle integrazioni SOAP

SOAP non è più di moda, ma banche, assicurazioni e pubblica amministrazione lo usano ancora ovunque. E quando qualcosa si rompe, pochi sanno dove mettere le mani.

📎

Allegati che fanno crollare il server

File grandi in base64 dentro l'XML saturano la memoria, superano i limiti del parser e mandano in timeout le chiamate.

🧩

MTOM non supportato

Il committente invia messaggi multipart MTOM/XOP, ma il SoapServer nativo di PHP non li sa leggere.

📐

Tracciati rigidi

Campi a lunghezza fissa, codifiche obbligate, validazioni imposte dall'altra parte: un errore e il messaggio viene rifiutato.

🕳️

Integrazioni che nessuno conosce più

Il servizio funziona da anni, chi l'ha scritto non c'è più e ora va modificato o ha smesso di rispondere.

Cosa faccio

Dal WSDL al servizio in produzione

01

Server e client SOAP in PHP

Implemento il servizio che il committente si aspetta, partendo dal suo WSDL e dai messaggi di esempio, oppure il client che chiama il suo.

02

Allegati MTOM/XOP in streaming

Ricezione di allegati binari pesanti senza caricarli in memoria: il messaggio viene letto a blocchi e ogni file finisce direttamente su disco.

03

Mappatura dei tracciati

Conversione tra i tracciati del committente e il tuo database, con validazione e cast dei campi prima che i dati entrino nel sistema.

04

Diagnosi e manutenzione

Analisi di integrazioni esistenti che danno errori, rallentano o vanno estese: capisco cosa fanno e le rimetto in carreggiata.

Caso reale

Perizie immobiliari
scambiate con le banche

Ho progettato e scritto una piattaforma di gestione delle perizie immobiliari, in uso presso società di valutazione che lavorano per conto degli istituti di credito.

  • Server SOAP che riceve gli incarichi dai sistemi bancari e restituisce le perizie nei tracciati richiesti.
  • Decoder MTOM scritto da zero, perché quello di PHP non esiste: legge il messaggio a blocchi da 1 MB e tiene in memoria solo l'envelope.
  • Allegati oltre i 150 MB per singolo messaggio, senza alzare memory_limit e senza incappare nei limiti del parser XML.
  • Motore dati che valida e converte ogni campo secondo le specifiche del committente, lunghezze fisse comprese.
mtom-stream.php · schema semplificato
// Il SoapServer di PHP non gestisce multipart/related (MTOM):
// il body si legge a blocchi e in RAM resta solo l'envelope XML.
$in = fopen('php://input', 'rb');
while (!feof($in)) {
    $chunk = fread($in, 1024 * 1024);      // 1 MB alla volta
    // riconosce i boundary MIME:
    //  - la parte XML (envelope) resta in memoria
    //  - ogni parte binaria va dritta su un file temporaneo
}
// Ogni <xop:Include href="cid:..."/> diventa un riferimento al file:
// il servizio riceve un percorso, non 150 MB di base64 in un nodo XML.
150 MB+
Allegati gestiti in un singolo messaggio SOAP
1 MB
Memoria per blocco letto, qualunque sia la dimensione del file
PHP
Codice nativo, senza dipendenze da servizi esterni
Come lavoro

Quattro passaggi, nessuna sorpresa

1

Mi mandi il materiale

WSDL, documentazione del committente e, se li hai, messaggi di esempio o log degli errori.

2

Analisi e preventivo

Ti dico cosa serve, quanto tempo richiede e quanto costa, prima di iniziare.

3

Sviluppo e test

Il servizio viene provato con messaggi reali, allegati pesanti compresi, prima di andare in produzione.

4

Consegna

Codice tuo, documentato, con le istruzioni per gestirlo. Se serve, resto disponibile per la manutenzione.

Domande frequenti

Prima di scrivermi

Dall'altra parte c'è Java o .NET: è un problema?

No. SOAP nasce proprio per far parlare sistemi diversi. Io lavoro sul lato PHP; il committente può usare qualunque tecnologia, purché rispetti il contratto definito dal WSDL.

Abbiamo già un'integrazione che dà errori: puoi solo sistemarla?

Sì. Spesso basta capire cosa non torna tra il messaggio inviato e quello atteso. Si parte dai log e da un paio di messaggi reali.

Gli allegati sono molto grandi. Fin dove si arriva?

Con la lettura in streaming la memoria usata non dipende dalla dimensione del file: il limite diventa lo spazio su disco e la durata massima della richiesta impostata sul server.

Lavori anche su REST?

Sì, ma questa pagina parla di SOAP perché è lì che di solito le aziende restano senza qualcuno che sappia mettere le mani sul codice.

Raccontami la tua integrazione.

Con chi devi parlare, cosa si scambia e dove si blocca. Ti rispondo con una prima valutazione.