Menguasai SOAP di tiga bahasa selain Java: SoapClient dan SoapServer bawaan PHP beserta wrapper framework, WCF dan dotnet-svcutil di .NET, serta library zeep di Python untuk membangun client dan service dengan cepat dan konsisten lintas stack.

Setelah di episode 4 kita membangun service SOAP di Java, sekarang kita perluas jangkauan: SOAP di PHP, .NET, dan Python. Di dunia nyata, service SOAP jarang hanya dipanggil dari satu bahasa — integrasi B2B berarti client bisa datang dari sistem ERP berbasis Java, portal PHP, aplikasi .NET, atau script Python.
Mengapa episode ini penting? Karena interoperabilitas lintas stack adalah alasan utama SOAP ada. Memahami cara tiap bahasa memakai WSDL akan membuat kalian nyaman masuk ke codebase apa pun — dan menyadari bahwa konsep dari episode 3-4 persis sama, hanya beda sintaks.
PHP menyediakan ekstensi soap bawaan — tanpa library tambahan. SoapClient menerima URL WSDL dan langsung menyediakan method operasi:
<?php
$client = new SoapClient('http://localhost:8080/bank?wsdl');
try {
$result = $client->getBalance(['accountNo' => 'ACC-001']);
echo 'Saldo: ' . $result->return . PHP_EOL;
} catch (SoapFault $e) {
error_log($e->getMessage());
echo 'Gagal: ' . $e->getMessage() . PHP_EOL;
}$client->getBalance(...) otomatis ada karena operasi getBalance dideklarasikan di WSDL. Nama parameter mengikuti elemen yang didefinisikan di WSDL — kalau nama elemennya accountNo, ya accountNo.
PHP juga bisa menjadi server SOAP. Kombinasikan SoapServer dengan WSDL:
<?php
class BankService {
public function getBalance($accountNo) {
if ($accountNo === 'ACC-001') {
return ['return' => 2750000.00];
}
throw new SoapFault('Client', 'Akun tidak ditemukan: ' . $accountNo);
}
}
$server = new SoapServer('bank.wsdl');
$server->setClass(BankService::class);
$server->handle();Jika WSDL belum tersedia, SoapServer bisa dibuat tanpa WSDL dengan mode non-WSDL — tetapi untuk integrasi nyata selalu sediakan WSDL agar client bisa di-generate.
Note
Di framework modern seperti Laravel, PHP SOAP tetap memakai SoapClient di bawahnya — biasanya dibungkus sebagai service class. Ekstensi soap wajib diaktifkan di php.ini (extension=soap) dan tersedia di sebagian besar distro.
Di .NET, warisan SOAP terkuat ada di WCF (Windows Communication Foundation). Di .NET Core dan .NET 5+, client SOAP dibangkitkan dengan dotnet-svcutil — tool resmi dari Microsoft:
dotnet tool install --global dotnet-svcutil
dotnet-svcutil http://localhost:8080/bank?wsdl --output-dir ClientHasil generate-nya berupa class client yang memakai System.ServiceModel:
using BankClient;
var client = new BankServiceClient();
var balance = await client.GetBalanceAsync("ACC-001");
Console.WriteLine($"Saldo: {balance}");Jika kalian memelihara service WCF, kontrak didefinisikan dengan atribut [ServiceContract] dan [OperationContract] — analog dengan @WebService dan @WebMethod di Java:
[ServiceContract(Namespace = "urn:example:bank")]
public interface IBankService
{
[OperationContract]
decimal GetBalance(string accountNo);
}Python tidak punya SOAP bawaan, tetapi zeep adalah library de facto untuk SOAP — ia membaca WSDL, men-generate tipe Python, dan menangani XML serialization:
pip install zeepfrom zeep import Client
client = Client("http://localhost:8080/bank?wsdl")
result = client.service.getBalance(accountNo="ACC-001")
print("Saldo:", result)zeep membaca WSDL dan mengekspos client.service.<operasi> dengan parameter keyword. Jika ingin melihat raw request XML untuk debugging:
import logging
logging.basicConfig(level=logging.DEBUG)
logging.getLogger("zeep").setLevel(logging.DEBUG)| Bahasa | Library/Tool | Server? | Generate dari WSDL | Notes |
|---|---|---|---|---|
| Java | JAX-WS / CXF | Ya | wsimport / wsdl2java | Standar industri, fitur terlengkap |
| PHP | SoapClient/SoapServer | Ya | Manual (opsional) | Bawaan ekstensi, tanpa dependency |
| .NET | WCF + dotnet-svcutil | Ya | dotnet-svcutil | Integrasi rapat dengan Visual Studio |
| Python | zeep | Client (3rd-party) | Otomatis saat Client() | Tercepat untuk scripting |
Tip
Aturan praktis saat integrasi lintas bahasa: jalankan satu service di satu stack, lalu generate client di semua stack lain dari WSDL yang sama. Jika client di semua bahasa bisa memanggil operasi yang sama dengan benar, interoperabilitas kalian terbukti — ini tema yang kita dalami di episode 18 (WS-I Basic Profile).
return wrapper — SoapServer membungkus hasil di elemen return; client di bahasa lain harus menyesuaikan atau memakai WSDL document-literal yang rapi.xsd:decimal (Java BigDecimal, .NET decimal, Python Decimal); memakai float menghasilkan pembulatan yang salah untuk transaksi keuangan.xsd:dateTime butuh format ISO-8601 (mis. 2026-08-16T09:30:00Z); library yang tidak mematuhi ini menghasilkan parsing error (detail di episode 7).Content-Type: text/xml (SOAP 1.1), sedangkan SOAP 1.2 butuh application/soap+xml. Pastikan konsisten dengan WSDL.Inti yang harus dibawa pulang:
SoapClient/SoapServer bawaan; cocok untuk integrasi cepat tanpa dependency.dotnet-svcutil untuk generate client dari WSDL.zeep, yang membaca WSDL dan men-generate client otomatis.Di episode 6 selanjutnya kita akan masuk ke testing dengan SoapUI dan Postman — mengimpor WSDL, menyusun request, assertions, MockService untuk pengembangan paralel, sampai debugging envelope dan validasi terhadap XSD. Sampai jumpa di episode 6!