Menyusun strategi migrasi dari SOAP ke REST yang aman: pola strangler dan parallel run, pemetaan WSDL ke OpenAPI, translator layer, serta roadmap hybrid tanpa downtime yang menjaga backward compatibility bagi konsumen legacy.

Setelah di episode 20 kita mengintegrasikan SOAP dengan gateway dan ESB, sekarang kita bahas tujuan akhir perjalanan banyak organisasi: migrasi dari SOAP ke REST — tetapi dengan cara yang aman dan bertahap.
Mengapa penting? Migrasi protokol itu seperti mengganti fondasi rumah yang masih dihuni. Mematikan SOAP langsung dan membangun REST baru adalah big-bang rewrite — kegagalan yang paling mahal dan paling umum dalam modernisasi. Episode ini mengajarkan pola industri yang terbukti: strangler pattern dan parallel run, yang memigrasikan sistem tanpa downtime dan tanpa memutus konsumen legacy.
Penyebab kegagalan migrasi SOAP→REST yang paling sering ditemui:
Pola strangler memigrasikan per operasi, bukan per sistem. Setiap operasi lama digantikan satu per satu, sementara sistem berjalan normal:
Alurnya:
Kunci keberhasilan: satu operasi di-migrasi, diuji, dan dipotong — bukan semuanya sekaligus.
Sebelum memotong ke REST, jalankan keduanya berdampingan untuk operasi yang sama dan bandingkan hasilnya:
Request konsumen
-> Dipanggilkan ke REST Service
-> Dipanggilkan ke SOAP Service (untuk verifikasi)
-> Hasil dibandingkan (diff)
-> Selisih dianalisis sebelum REST dipercayaBekali sistem dengan comparison harness: kunci hasil SOAP dan REST pada request yang sama, lalu diff responsenya. Selama selisih masih muncul, jangan potong SOAP. Saat selisih nol dalam periode tertentu, potong.
Warning
Parallel run hanya bernilai jika kedua sisi mendapat input yang identik dan diff dilakukan secara otomatis, bukan sampel manual. Jika selisih terdeteksi, REST belum siap dipotong — kembali ke meja gambar, bukan paksa lanjut.
Migrasi menuntut kontrak baru: dari WSDL ke OpenAPI. Pemetaan per konsep:
| SOAP/WSDL | REST/OpenAPI |
|---|---|
portType + operasi | Path + method (resource) |
getBalance(accountNo) | GET /accounts/{accountNo}/balance |
transfer(from,to,amount) | POST /transfers |
| Request/response message | Request/response body (JSON) |
Fault (faultcode + detail) | HTTP status + error object |
soapAction | HTTP method + path |
Aturan desain yang sering dilanggar saat migrasi — jangan memindahkan operasi RPC "as is" menjadi URL unik per operasi (POST /getBalance, POST /transfer). Desainlah resource yang benar: akun, transfer, klaim. REST dihargai karena resource model-nya, bukan karena JSON-nya.
<portType name="BankPortType">
<operation name="getBalance">
<input message="tns:GetBalanceRequest"/>
<output message="tns:GetBalanceResponse"/>
</operation>
</portType>openapi: 3.0.0
paths:
/accounts/{accountNo}/balance:
get:
operationId: getBalance
parameters:
- name: accountNo
in: path
required: true
schema:
type: string
responses:
"200":
description: Saldo akun
content:
application/json:
schema:
type: object
properties:
balance:
type: string
format: decimal
"404":
description: Akun tidak ditemukanTranslator adalah lapisan yang menjembatani dua protokol selama masa transisi — di sinilah pola REST facade (episode 19-20) berubah menjadi alat migrasi:
| Arah | Terjemahan |
|---|---|
| Konsumen legacy SOAP → REST baru | Parse SOAP, panggil REST, konversi response ke envelope SOAP |
| Konsumen baru REST → SOAP lama (awal migrasi) | Terima JSON, panggil SOAP, kembalikan JSON |
Translator bisa berupa service mandiri, fungsi di gateway, atau filter di broker (Camel/WSO2). Yang penting: logika bisnis tidak boleh hidup di translator — ia hanya memetakan protokol, bukan memutuskan aturan bisnis.
Roadmap lengkap yang menggabungkan semuanya:
| Fase | Aksi | Status SOAP |
|---|---|---|
| 0 | Baseline: SOAP di belakang gateway, observability penuh (episode 20) | Hidup |
| 1 | Tambah REST facade dengan translator untuk operasi paling sering dipakai | Hidup + REST baru |
| 2 | Parallel run: diff hasil REST vs SOAP per operasi | Hidup |
| 3 | Arahkan konsumen baru ke REST; edukasi mitra legacy | Hidup (legacy) |
| 4 | Migrasi konsumen legacy satu per satu dengan jadwal transisi | Hidup (menyusut) |
| 5 | Retire operasi SOAP terakhir; arsip WSDL dan kontrak lama | Dipensiunkan |
Tip
Backward compatibility adalah kewajiban, bukan bonus: mitra legacy harus mendapat jadwal transisi yang diumumkan jauh hari (episode 10) dan jalur migrasi yang terdokumentasi. Organisasi yang memaksa mitra "langsung ikut" ke REST biasanya kehilangan mitra — atau diadukan.
Inti yang harus dibawa pulang:
Di episode 22, episode penutup series, kita akan membahas ekosistem tooling modern & refleksi akhir — Apache CXF 4.2.x dan WSS4J 4.0.1, Axis2, SoapUI, zeep, rekap Episode 0-21, checklist produksi, dan sumber resmi untuk terus belajar. Sampai jumpa di episode 22!