DEV Community

Cover image for Cara Menggunakan Skrip Pre-Request dan Post-Response di Apidog
Walse
Walse

Posted on • Originally published at apidog.com

Cara Menggunakan Skrip Pre-Request dan Post-Response di Apidog

Beberapa permintaan API memerlukan pekerjaan sebelum meninggalkan mesin Anda, sementara yang lain memerlukan validasi setelah respons diterima. Contohnya: API pembayaran membutuhkan tanda tangan HMAC dari timestamp dan secret, endpoint login mengembalikan token untuk permintaan berikutnya, dan alur checkout harus memastikan respons benar-benar mengembalikan status 200 serta ID pesanan yang sesuai. Jika semuanya dilakukan manual, prosesnya cepat membosankan dan mudah rusak saat dibagikan ke tim.

Coba Apidog sekarang

Skrip menyelesaikan masalah ini. Di Apidog, Anda dapat melampirkan JavaScript ke permintaan API agar berjalan otomatis:

  • Pre Processor: berjalan sebelum permintaan dikirim.
  • Post Processor: berjalan setelah respons diterima.

Jika Anda pernah membuat skrip Postman, sebagian besar pola tersebut dapat digunakan kembali karena Apidog kompatibel dengan API objek pm. Artikel ini menunjukkan cara:

  1. Menandatangani request dengan HMAC di Pre Processor.
  2. Mengekstrak token dan menambahkan assertion di Post Processor.
  3. Menggunakan ulang logika dengan Public Scripts.
  4. Menjalankan skenario melalui CLI untuk CI.

Dokumentasi lengkap tersedia di dokumen skrip Apidog, tetapi nama tab dan beberapa perilaku berbeda dari Postman.

Apa yang Sebenarnya Dilakukan Skrip Pra dan Pasca

Apidog menjalankan skrip dalam dua tahap.

Pre Processor

Pre Processor berjalan sebelum request dikirim ke server. Gunakan tahap ini untuk menyiapkan data yang dibutuhkan request, misalnya:

  • Membuat timestamp.
  • Menghitung tanda tangan HMAC.
  • Membuat ID pesanan acak.
  • Membaca variabel lalu membentuk header atau body.

Pada tahap ini, respons belum tersedia. Karena itu, jangan membaca pm.response di Pre Processor.

Post Processor

Post Processor berjalan setelah respons diterima. Gunakan tahap ini untuk:

  • Memastikan kode status sesuai.
  • Memvalidasi bentuk dan isi respons.
  • Mengekstrak token autentikasi.
  • Menyimpan ID resource yang baru dibuat.
  • Menyimpan cursor untuk pagination.

Aturan praktisnya:

  1. pm.response—termasuk code, status, headers, responseTime, responseSize, text(), dan json()—hanya tersedia di Post Processor.
  2. Variabel adalah cara Pre Processor, request, dan Post Processor bertukar data.

Jika Anda menggunakan Postman, perhatikan perubahan nama berikut:

Postman Apidog
Pre-request Script Pre Processor
Tests Post Processor

Perilakunya mirip, tetapi label di antarmukanya berbeda.

Pengaturan: Buka Request dan Temukan Tab Skrip

Untuk mengikuti contoh, unduh Apidog dari halaman Unduh Apidog.

Buka request API yang ingin Anda otomatisasi. Setiap endpoint memiliki tab:

  • Params
  • Headers
  • Body
  • Pre Processor
  • Post Processor

Untuk menambahkan logika:

  1. Buka tab Pre Processor atau Post Processor.
  2. Pilih tambahkan Skrip Kustom.
  3. Tulis JavaScript menggunakan objek pm.

Sebelum membuat skrip, pahami urutan prioritas variabel Apidog:

Variabel Lokal > Variabel Lingkungan > Variabel Global yang Dibagikan dalam Proyek > Variabel Global yang Dibagikan dalam Tim

Artinya, variabel lokal akan menimpa variabel lingkungan dengan nama yang sama. Jika nilai variabel tidak sesuai harapan, periksa apakah ada variabel dengan prioritas lebih tinggi yang membayangi nilainya.

Untuk konfigurasi yang stabil di seluruh proyek, gunakan parameter global di Apidog.

Contoh Pre Processor: Menandatangani Request dengan HMAC

Misalkan Anda memanggil endpoint pembayaran yang menggunakan HMAC-SHA256 untuk memverifikasi setiap request. Server mengharapkan:

  • Timestamp saat request dibuat.
  • Signature yang dihitung dari timestamp, body request, dan API secret.

Pola ini umum digunakan pada integrasi pembayaran dan webhook. Contoh konsepnya juga dijelaskan dalam dokumen tanda tangan Stripe.

Apidog menyediakan crypto-js sebagai pustaka bawaan. Di tab Pre Processor, pilih tambahkan Skrip Kustom, lalu tambahkan kode berikut:

// Pre Processor: menandatangani request sebelum dikirim
const CryptoJS = require('crypto-js');

// Timestamp Unix saat ini dalam detik
const timestamp = Math.floor(Date.now() / 1000).toString();

// Membaca secret dari variabel lingkungan
const secret = pm.environment.get('payments_api_secret');

// Membentuk payload: timestamp + baris baru + body mentah
const body = pm.request.body ? pm.request.body.toString() : '';
const payload = timestamp + '\n' + body;

// Menghitung signature HMAC-SHA256 dalam format hexadecimal
const signature = CryptoJS
  .HmacSHA256(payload, secret)
  .toString(CryptoJS.enc.Hex);

// Menyimpan nilai untuk digunakan oleh request
pm.environment.set('x_timestamp', timestamp);
pm.environment.set('x_signature', signature);

pm.console.log('Request ditandatangani pada ' + timestamp);
Enter fullscreen mode Exit fullscreen mode

Selanjutnya, gunakan variabel tersebut pada tab Headers:

X-Timestamp: {{x_timestamp}}
X-Signature: {{x_signature}}
Enter fullscreen mode Exit fullscreen mode

Saat request dikirim, urutannya adalah:

  1. Apidog menjalankan Pre Processor.
  2. Skrip membuat timestamp dan signature.
  3. Nilai disimpan ke variabel lingkungan.
  4. Apidog menggantikan {{x_timestamp}} dan {{x_signature}} di header.
  5. Server menerima signature yang baru dibuat.

Perhatikan cara impor pustaka berikut:

require('crypto-js');
Enter fullscreen mode Exit fullscreen mode

Gunakan modul utuh. Berikut tidak didukung:

require('crypto-js/sha256');
Enter fullscreen mode Exit fullscreen mode

Operasi variabel di skrip hanya mengubah nilai saat ini, bukan nilai awal yang mungkin terlihat di editor environment. Ini sesuai untuk signature karena nilainya harus dibuat ulang setiap request.

Untuk pola serupa dengan istilah Postman, lihat panduan skrip pra-permintaan Postman.

Contoh Post Processor: Mengekstrak Token dan Menambahkan Assertion

Sekarang, misalkan endpoint login mengembalikan respons berikut:

{
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
  "user": {
    "id": 4812,
    "email": "dana@example.com"
  },
  "expires_in": 3600
}
Enter fullscreen mode Exit fullscreen mode

Buka tab Post Processor, pilih tambahkan Skrip Kustom, lalu tambahkan kode berikut:

// Post Processor: verifikasi respons, lalu ekstrak token
pm.test('Status adalah 200', function () {
  pm.response.to.have.status(200);
});

const jsonData = pm.response.json();

pm.test('Respons mengembalikan token', function () {
  pm.expect(jsonData.token).to.be.a('string').and.not.empty;
});

pm.test('ID pengguna ada', function () {
  pm.expect(jsonData.user.id).to.be.a('number');
});

// Simpan token agar bisa digunakan request lain
pm.environment.set('auth_token', jsonData.token);

pm.console.log('Token tersimpan untuk pengguna ' + jsonData.user.email);
Enter fullscreen mode Exit fullscreen mode

Skrip ini melakukan dua pekerjaan:

  1. Menjalankan assertion dengan pm.test() dan pm.expect().
  2. Menyimpan token ke environment melalui pm.environment.set().

Request terautentikasi berikutnya dapat menggunakan token tersebut secara langsung:

Authorization: Bearer {{auth_token}}
Enter fullscreen mode Exit fullscreen mode

Dengan begitu, Anda tidak perlu lagi menyalin token login secara manual.

Untuk pola assertion yang lebih lengkap, lihat panduan penegasan API di Apidog. Jika Anda membutuhkan data dummy realistis, Faker.js di Apidog dapat digunakan bersama variabel yang sama.

Beberapa perilaku penting di Post Processor:

  • pm.iterationData bersifat hanya-baca. Anda dapat membaca data uji, tetapi tidak dapat menulis kembali ke sana.
  • pm.cookies berisi cookie dari respons server, bukan cookie yang dikirim bersama request.

Menggunakan Kembali Logika dengan Public Scripts

Jangan salin-tempel blok HMAC ke banyak endpoint. Jika algoritma berubah, Anda harus memperbaiki semua salinan skrip tersebut.

Gunakan Skrip Publik untuk menyimpan logika yang dapat digunakan ulang.

  1. Buka Settings > Public Scripts.
  2. Buat skrip bersama, misalnya untuk signing HMAC.
  3. Tambahkan skrip tersebut ke tab Pre Processor atau Post Processor pada request yang membutuhkan.

Urutan eksekusi penting:

  • Public Script dijalankan sebelum Custom Script dalam daftar yang sama.
  • Jika ada beberapa Public Script, skrip dijalankan dari atas ke bawah.

Jika Custom Script perlu memanggil fungsi dari Public Script, deklarasikan fungsi tersebut sebagai global.

Public Script:

// Jangan gunakan var, let, atau const agar fungsi bersifat global
sign = function (payload, secret) {
  const CryptoJS = require('crypto-js');

  return CryptoJS
    .HmacSHA256(payload, secret)
    .toString(CryptoJS.enc.Hex);
};
Enter fullscreen mode Exit fullscreen mode

Custom Script yang diletakkan di bawahnya:

const timestamp = Math.floor(Date.now() / 1000).toString();
const secret = pm.environment.get('payments_api_secret');

pm.environment.set('x_timestamp', timestamp);
pm.environment.set('x_signature', sign(timestamp, secret));
Enter fullscreen mode Exit fullscreen mode

Pastikan Public Script berada sebelum Custom Script. Jika urutannya terbalik, atau fungsi dideklarasikan dengan const, Anda akan mendapatkan error bahwa fungsi tidak terdefinisi.

Pustaka, Paket Eksternal, dan Debugging

Apidog menyediakan beberapa pustaka bawaan yang dapat dipanggil dengan require():

  • crypto-js (v3.1.9-1) untuk hashing dan HMAC.
  • jsrsasign (v10.3.0) untuk JWT dan RSA; membutuhkan Apidog 1.4.5 atau lebih baru.
  • chai (v4.2.0) untuk assertion.
  • lodash, moment, uuid, xml2js, cheerio, postman-collection, atob, btoa, csv-parse/lib/sync, tv4, dan ajv.
  • Modul Node bawaan seperti path, assert, buffer, util, url, querystring, stream, dan events.

Jika paket yang dibutuhkan tidak tersedia, gunakan $$.liveRequire():

$$.liveRequire('nanoid', (nanoid) => {
  const id = nanoid.nanoid();

  pm.environment.set('request_id', id);
});
Enter fullscreen mode Exit fullscreen mode

$$.liveRequire() membutuhkan koneksi internet karena Apidog mengunduh paket saat runtime. Pustaka bawaan tidak membutuhkan koneksi tambahan.

Untuk debugging, gunakan salah satu dari berikut:

pm.console.log('Nilai signature:', signature);
Enter fullscreen mode Exit fullscreen mode
console.log('Token:', jsonData.token);
Enter fullscreen mode Exit fullscreen mode

Keduanya mencetak output ke konsol Apidog. Gunakan log untuk memeriksa payload, signature, token, atau nilai variabel sebelum mempercayainya dalam skenario otomatisasi.

Perhatikan juga dua batasan berikut:

  • pm.sendRequest() menggunakan callback, bukan Promise. Jangan gunakan await.
  • pm.nextRequest() dari Postman tidak didukung.

Jika Anda membutuhkan percabangan, kondisi, atau urutan request yang lebih kompleks, gunakan Skenario Uji. Di sana Anda dapat menyusun request secara visual dengan langkah Kondisi dan If-Else.

Otomatiskan Alur Kerja dengan Apidog CLI

Pre Processor dan Post Processor tidak hanya berjalan saat Anda menekan tombol Send. Ketika request dan assertion dikemas ke dalam Skenario Uji, Anda dapat menjalankannya secara headless melalui Apidog CLI, termasuk semua skrip pra dan pasca request.

Instal CLI, autentikasi, lalu jalankan skenario:

npm install -g apidog-cli
apidog login --with-token <TOKEN_AKSES_ANDA>
apidog run --access-token $APIDOG_ACCESS_TOKEN -t <ID_SKENARIO> -e <ID_LINGKUNGAN> -r cli
Enter fullscreen mode Exit fullscreen mode

Arti flag yang digunakan:

Flag Fungsi
-t ID skenario uji
-e ID environment
-r Reporter: cli, html, atau junit

Anda dapat menggunakan beberapa reporter dengan pemisah koma.

Buat access token dari pengaturan akun Apidog, simpan sebagai APIDOG_ACCESS_TOKEN, lalu jalankan skenario yang sama di CI.

Hindari skrip yang bergantung pada file lokal atau paket yang hanya tersedia di komputer Anda. Skrip semacam itu dapat berjalan di aplikasi desktop tetapi gagal di CLI. Gunakan pustaka bawaan atau $$.liveRequire() agar perilakunya konsisten.

FAQ

Apakah skrip Apidog kompatibel dengan skrip Postman saya?

Sebagian besar kompatibel. Apidog menggunakan API objek pm yang sama, sehingga pola berikut tetap dapat digunakan:

pm.environment.set();
pm.response.json();
pm.test();
pm.expect();
Enter fullscreen mode Exit fullscreen mode

Perbedaan utama adalah nama tab—Pre Processor dan Post Processor—serta beberapa panggilan seperti pm.nextRequest() yang tidak didukung.

Mengapa pm.response mengembalikan undefined di skrip pra-permintaan?

Karena respons belum ada. Pre Processor berjalan sebelum request dikirim.

Pindahkan kode yang membaca status, header, atau body respons ke Post Processor. Jika Anda membutuhkan data saat tahap pra-request, gunakan pm.request, variabel, atau pustaka. Anda juga dapat mengambil parameter request di skrip pre/post.

Bagaimana cara membagikan satu skrip ke banyak request?

Gunakan Settings > Public Scripts. Buat logika sekali, lalu tambahkan ke Pre Processor atau Post Processor pada setiap request yang relevan.

Public Script berjalan sebelum Custom Script dalam daftar yang sama. Jika Custom Script perlu memanggil fungsi dari Public Script, deklarasikan fungsi secara global tanpa var, let, atau const.

Bisakah saya mengimpor paket npm yang tidak dibundel Apidog?

Bisa, gunakan pola berikut:

$$.liveRequire('nama-paket', (pkg) => {
  // Gunakan pkg di sini
});
Enter fullscreen mode Exit fullscreen mode

Metode ini membutuhkan koneksi internet. Untuk pustaka bawaan seperti crypto-js, moment, atau uuid, gunakan require() biasa.

Gunakan nama modul lengkap, bukan jalur submodul.

Di mana saya melihat output dari skrip?

Gunakan:

pm.console.log();
Enter fullscreen mode Exit fullscreen mode

atau:

console.log();
Enter fullscreen mode Exit fullscreen mode

Kemudian buka konsol Apidog setelah request dikirim. Ini adalah cara cepat untuk memastikan signature sudah dihitung atau token sudah diekstrak dengan benar.

Kesimpulan

Pre Processor dan Post Processor mengubah request statis menjadi request yang dapat menyiapkan dan memvalidasi dirinya sendiri.

Gunakan pola berikut:

  1. Buat timestamp, signature, atau nilai dinamis di Pre Processor.
  2. Validasi respons dan ekstrak data di Post Processor.
  3. Simpan logika berulang sebagai Public Scripts.
  4. Jalankan skenario melalui CLI untuk otomatisasi CI.

API pm dan pustaka bawaan membuat sebagian besar pengetahuan Postman dapat langsung digunakan di Apidog. Buka Apidog, pilih request, lalu tambahkan Custom Script pertama Anda untuk menjalankan kedua tahap dalam satu pengiriman.

Top comments (0)