Kodeloka
  1. Kodeloka
  2. Kelas Kong API Gateway
  3. Materi

3 · Plugin · Modul 7 dari 12

Transformasi Request & Response

Mengubah header, query, dan isi permintaan tanpa menyentuh kode layanan — beserta batasannya yang perlu disadari.

💻 request-transformer

plugins:
  - name: request-transformer
    route: rute-pesanan
    config:
      add:
        headers:
          - "X-Sumber:gateway"
          - "X-Diteruskan-Oleh:kong"
        querystring:
          - "versi:v2"
      remove:
        headers:
          - "X-Header-Internal"
          - "Authorization"        # jangan teruskan token mentah ke upstream
      rename:
        headers:
          - "X-Lama:X-Baru"
      replace:
        headers:
          - "Host:layanan-internal"

💻 response-transformer

plugins:
  - name: response-transformer
    service: layanan-pesanan
    config:
      remove:
        headers:
          - "Server"               # sembunyikan detail teknologi
          - "X-Powered-By"
        json:
          - "debug_info"           # buang field internal
          - "internal_id"
      add:
        headers:
          - "X-Waktu-Respons:$(date)"
        json:
          - "api_version:v2"
📌 Menghapus header Server itu praktik yang baik

Header seperti Server dan X-Powered-By memberi tahu penyerang persis teknologi dan versi yang Anda pakai, sehingga mereka bisa langsung mencari eksploit yang cocok. Menghapusnya di gateway berlaku untuk semua layanan sekaligus, tanpa perlu mengubah satu pun aplikasi.

🔀 Kegunaan Nyata: Menjaga Kompatibilitas

Masalah: layanan mengganti nama field "nama" menjadi "nama_lengkap",
         tetapi ada klien mobile lama yang belum bisa diperbarui.

Solusi sementara di gateway:
plugins:
  - name: response-transformer
    route: rute-v1-pengguna
    config:
      add:
        json:
          - "nama:$(headers.x-nama-lengkap)"
⚠️ Ini utang teknis, perlakukan sebagai utang

Transformasi kompatibilitas di gateway memang menyelamatkan Anda saat mendesak. Tetapi ia menciptakan perilaku yang tidak terlihat di kode layanan mana pun. Pengembang baru yang membaca kode akan bingung kenapa responsnya berbeda dari yang tertulis.

Tetapkan tanggal kedaluwarsa saat memasangnya, catat di dokumentasi, dan hapus begitu klien lama sudah bermigrasi.

🚫 Batas yang Wajar

🚫 Gateway bukan tempat logika bisnis

Godaan yang sering muncul: karena transformasi begitu mudah, orang mulai memindahkan makin banyak logika ke gateway — menggabungkan beberapa respons, menghitung nilai, menerapkan aturan bisnis lewat pre-function Lua. Akhirnya gateway menjadi aplikasi tersembunyi yang tidak punya uji, tidak punya kontrol versi yang layak, dan hanya dipahami satu-dua orang.

Batas yang sehat: gateway boleh mengurus hal yang seragam untuk semua layanan — autentikasi, kuota, log, header keamanan, penyembunyian detail teknologi. Apa pun yang khas untuk satu layanan sebaiknya berada di dalam kode layanan itu, tempat ia bisa diuji.

🧪 Menguji Transformasi

# Lihat persis apa yang diterima upstream dengan layanan echo
services:
  - name: echo
    url: http://httpbin.org/anything
    routes:
      - name: rute-echo
        paths: ["/echo"]

# lalu:
curl -s http://localhost:8000/echo | jq '.headers, .args'
# Keluarannya memperlihatkan header dan query setelah transformasi.