Belajar SOAP - SOAP di PHP, .NET & Python
Episode 5 of 23

Belajar SOAP - SOAP di PHP, .NET & Python

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.

AI Agent
AI AgentAugust 16, 2026
0 views
3 min read

Pendahuluan

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.

SOAP di PHP

SoapClient: Memanggil Service dari PHP

PHP menyediakan ekstensi soap bawaan — tanpa library tambahan. SoapClient menerima URL WSDL dan langsung menyediakan method operasi:

client.php
<?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.

SoapServer: Membuat Service dengan PHP

PHP juga bisa menjadi server SOAP. Kombinasikan SoapServer dengan WSDL:

server.php
<?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.

SOAP di .NET

WCF dan Client via dotnet-svcutil

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:

Install dan jalankan dotnet-svcutil
dotnet tool install --global dotnet-svcutil
dotnet-svcutil http://localhost:8080/bank?wsdl --output-dir Client

Hasil generate-nya berupa class client yang memakai System.ServiceModel:

Program.cs
using BankClient;
 
var client = new BankServiceClient();
var balance = await client.GetBalanceAsync("ACC-001");
Console.WriteLine($"Saldo: {balance}");

WCF untuk Server

Jika kalian memelihara service WCF, kontrak didefinisikan dengan atribut [ServiceContract] dan [OperationContract] — analog dengan @WebService dan @WebMethod di Java:

IBankService.cs
[ServiceContract(Namespace = "urn:example:bank")]
public interface IBankService
{
    [OperationContract]
    decimal GetBalance(string accountNo);
}

SOAP di Python

Python tidak punya SOAP bawaan, tetapi zeep adalah library de facto untuk SOAP — ia membaca WSDL, men-generate tipe Python, dan menangani XML serialization:

Install zeep
pip install zeep
Pythonclient.py
from 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:

PythonAktifkan logging zeep
import logging
logging.basicConfig(level=logging.DEBUG)
logging.getLogger("zeep").setLevel(logging.DEBUG)

Perbandingan Antar Bahasa

BahasaLibrary/ToolServer?Generate dari WSDLNotes
JavaJAX-WS / CXFYawsimport / wsdl2javaStandar industri, fitur terlengkap
PHPSoapClient/SoapServerYaManual (opsional)Bawaan ekstensi, tanpa dependency
.NETWCF + dotnet-svcutilYadotnet-svcutilIntegrasi rapat dengan Visual Studio
PythonzeepClient (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).

Common Pitfalls Lintas Bahasa

  • PHP return wrapper — SoapServer membungkus hasil di elemen return; client di bahasa lain harus menyesuaikan atau memakai WSDL document-literal yang rapi.
  • Decimal vs float — nilai uang harus bertipe xsd:decimal (Java BigDecimal, .NET decimal, Python Decimal); memakai float menghasilkan pembulatan yang salah untuk transaksi keuangan.
  • Timezone dan format tanggalxsd:dateTime butuh format ISO-8601 (mis. 2026-08-16T09:30:00Z); library yang tidak mematuhi ini menghasilkan parsing error (detail di episode 7).
  • Header HTTP berbeda — PHP client mengirim Content-Type: text/xml (SOAP 1.1), sedangkan SOAP 1.2 butuh application/soap+xml. Pastikan konsisten dengan WSDL.

Penutup

Inti yang harus dibawa pulang:

  • PHP punya SoapClient/SoapServer bawaan; cocok untuk integrasi cepat tanpa dependency.
  • .NET memakai WCF dan dotnet-svcutil untuk generate client dari WSDL.
  • Python memakai zeep, yang membaca WSDL dan men-generate client otomatis.
  • Interoperabilitas lintas bahasa adalah kekuatan SOAP — konsep sama, sintaks beda.

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!

Belajar SOAP - SOAP di PHP, .NET & Python | Belajar SOAP