Belajar SOAP - Modernisasi: SOAP→REST & Migrasi Strategis
Series/Belajar SOAP/Episode 21
Episode 21 of 23

Belajar SOAP - Modernisasi: SOAP→REST & Migrasi Strategis

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.

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

Pendahuluan

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.

Mengapa Migrasi Gagal

Penyebab kegagalan migrasi SOAP→REST yang paling sering ditemui:

  1. Big-bang rewrite — menulis ulang semua service sekaligus, lalu "switch total". Satu bug dan seluruh sistem down.
  2. Mengabaikan konsumen legacy — mitra yang masih memakai SOAP diputus sebelum waktunya.
  3. REST yang buruk — memigrasikan struktur SOAP "as is" ke REST tanpa desain resource yang benar: hasilnya "SOAP dengan JSON", bukan REST.
  4. Tanpa translator — perbedaan format antara dua sistem dipaksa diselesaikan di kode konsumen.

Strangler Pattern

Pola strangler memigrasikan per operasi, bukan per sistem. Setiap operasi lama digantikan satu per satu, sementara sistem berjalan normal:

100%

Alurnya:

  1. Tahap 1: semua konsumen masih memanggil SOAP.
  2. Tahap 2: REST mulai dibangun per operasi; konsumen baru memakai REST; konsumen lama masih lewat translator ke SOAP.
  3. Tahap 3: semua konsumen di REST; translator mengarah ke REST; SOAP dipensiunkan.

Kunci keberhasilan: satu operasi di-migrasi, diuji, dan dipotong — bukan semuanya sekaligus.

Parallel Run

Sebelum memotong ke REST, jalankan keduanya berdampingan untuk operasi yang sama dan bandingkan hasilnya:

Alur parallel run
Request konsumen
  -> Dipanggilkan ke REST Service
  -> Dipanggilkan ke SOAP Service (untuk verifikasi)
  -> Hasil dibandingkan (diff)
  -> Selisih dianalisis sebelum REST dipercaya

Bekali 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.

Memetakan WSDL ke OpenAPI

Migrasi menuntut kontrak baru: dari WSDL ke OpenAPI. Pemetaan per konsep:

SOAP/WSDLREST/OpenAPI
portType + operasiPath + method (resource)
getBalance(accountNo)GET /accounts/{accountNo}/balance
transfer(from,to,amount)POST /transfers
Request/response messageRequest/response body (JSON)
Fault (faultcode + detail)HTTP status + error object
soapActionHTTP 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.

Contoh pemetaan: WSDL → OpenAPI

Operasi di WSDL
<portType name="BankPortType">
  <operation name="getBalance">
    <input message="tns:GetBalanceRequest"/>
    <output message="tns:GetBalanceResponse"/>
  </operation>
</portType>
OpenAPI
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 ditemukan

Translator Layer

Translator adalah lapisan yang menjembatani dua protokol selama masa transisi — di sinilah pola REST facade (episode 19-20) berubah menjadi alat migrasi:

ArahTerjemahan
Konsumen legacy SOAP → REST baruParse 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 Hybrid Tanpa Downtime

Roadmap lengkap yang menggabungkan semuanya:

FaseAksiStatus SOAP
0Baseline: SOAP di belakang gateway, observability penuh (episode 20)Hidup
1Tambah REST facade dengan translator untuk operasi paling sering dipakaiHidup + REST baru
2Parallel run: diff hasil REST vs SOAP per operasiHidup
3Arahkan konsumen baru ke REST; edukasi mitra legacyHidup (legacy)
4Migrasi konsumen legacy satu per satu dengan jadwal transisiHidup (menyusut)
5Retire operasi SOAP terakhir; arsip WSDL dan kontrak lamaDipensiunkan

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.

Penutup

Inti yang harus dibawa pulang:

  • Hindari big-bang rewrite; pakai strangler pattern — migrasi per operasi.
  • Parallel run dengan diff otomatis membuktikan REST siap dipotong tanpa tebakan.
  • Petakan WSDL ke OpenAPI dengan desain resource yang benar, bukan RPC "as is".
  • Translator layer menjembatani protokol selama transisi — tanpa logika bisnis di dalamnya.
  • Roadmap bertahap + jadwal transisi untuk konsumen legacy = tanpa downtime dan tanpa memutus siapa pun.

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!

Belajar SOAP - Modernisasi: SOAP→REST & Migrasi Strategis | Belajar SOAP