Apidog memungkinkan Anda menjalankan program eksternal (skrip, JAR, biner) dari lingkungan Javascript Anda. Hal ini memungkinkan Anda memanfaatkan kode yang sudah ada dalam bahasa seperti Java, Python, PHP, Go, Shell, dll.
Pemberitahuan Keamanan
Program eksternal berjalan di luar sandbox Apidog dan memiliki akses penuh ke sistem Anda. Pastikan Anda memercayai kode yang Anda jalankan.
argsstring[] Parameter. Saat memanggil metode tertentu dalam paket jar, JSON.stringify akan digunakan untuk konversi. Selain itu, tipe non-string akan dikonversi secara implisit menjadi string.
optionsObject
commandstring Perintah eksekusi program eksternal; bagian pertama dari "prefiks perintah" adalah perintah eksekusi. Opsional, nilai default disimpulkan secara otomatis (lihat tabel "prefiks perintah" di atas), dapat dikustomisasi ke program apa pun.
cwdstring Direktori kerja subproses. Opsional, default adalah "Direktori Program Eksternal".
envRecord<string, string> Variabel lingkungan subproses. Opsional, default adalah {}.
windowsEncodingstring Encoding yang digunakan pada sistem Windows. Opsional, default adalah "cp936".
classNamestring Tentukan nama kelas yang akan dipanggil dalam paket jar, misalnya "com.apidog.Utils".
methodstring Tentukan nama metode yang akan dipanggil dalam paket jar, misalnya "add".
paramTypesstring[] Tentukan tipe parameter dari metode yang akan dipanggil dalam paket jar, misalnya ["int", "int"].
Return: Promise<string>
Penggunaan parameter command
Secara default, Apidog menggunakan python untuk menjalankan file .py. Jika python3 sudah terinstal di komputer, command dapat ditentukan sebagai python3.
Disarankan untuk menggunakan pm.executeAsync sebagai gantinya.
pm.execute(filePath, args, options)
filePathstring Jalur program eksternal
argsstring[] Parameter. Saat memanggil metode tertentu dalam paket jar, JSON.stringify akan digunakan untuk konversi. Selain itu, tipe non-string akan dikonversi secara implisit menjadi string.
optionsObject
windowsEncodingstring Encoding yang digunakan pada sistem Windows. Opsional, default adalah "cp936".
classNamestring Tentukan nama kelas yang akan dipanggil dalam paket jar, misalnya "com.apidog.Utils".
methodstring Tentukan nama metode yang akan dipanggil dalam paket jar, misalnya "add".
paramTypesstring[] Tentukan tipe parameter dari metode yang akan dipanggil dalam paket jar, misalnya ["int", "int"].
Saat menjalankan program, perintah yang dieksekusi akan dicetak di konsol (hanya untuk referensi). Jika hasil tidak sesuai harapan, Anda dapat menyalin perintah tersebut dan menempelkannya di Shell/CMD untuk melakukan debug.Konsol juga akan mencetak "standard output (stdout)" dan "standard error output (stderr)" dari proses yang dijalankan. Konten stdout (tidak termasuk karakter baris baru di akhir) akan menjadi hasil akhir eksekusi.
TIP
Karena alasan historis, pm.execute memperlakukan eksekusi sebagai gagal ketika terdapat konten di stderr. Hal ini menyebabkan beberapa program gagal ketika mengeluarkan peringatan atau pesan kesalahan. pm.executeAsync berubah menggunakan exit code dari proses untuk menentukan apakah eksekusi gagal.
Karena program eksternal yang ditentukan berjalan dengan eksekusi baris perintah, program tersebut hanya dapat memperoleh parameter yang diteruskan melalui argumen baris perintah.Misalnya, dalam skrip pm.executeAsync('add.js', [2, 3]), perintah yang sebenarnya dieksekusi adalah node add.js 2 3. Untuk mendapatkan parameter dalam skrip eksternal add.js:
TIP
1.
Bahasa pemrograman yang berbeda memiliki cara yang berbeda untuk mendapatkan argumen baris perintah; silakan merujuk ke dokumentasi bahasa yang sesuai.
2.
Tipe argumen baris perintah selalu string, perlu dikonversi berdasarkan tipe aktual.
Seperti disebutkan di atas, Apidog menggunakan konten stdout sebagai hasil eksekusi program. Jadi, mencetak konten ke stdout dapat mengembalikan hasil.Misalnya, dalam skrip const result = await pm.executeAsync('add.js', [2, 3]), hasil dapat dikembalikan dengan:
1.
Bahasa pemrograman yang berbeda memiliki cara yang berbeda untuk mencetak ke stdout; rujuk ke dokumentasi bahasa yang sesuai.
2.
Tipe return adalah string, perlu dikonversi berdasarkan tipe aktual.
3.
Karakter baris baru di akhir hasil akan dipangkas.
4.
Saat memanggil metode tertentu dalam paket jar, nilai return dari metode yang dipanggil akan digunakan sebagai nilai return akhir.
Melempar kesalahan dapat membuat tugas saat ini gagal dan menghentikan eksekusi. Misalnya:
1.
Bahasa pemrograman yang berbeda memiliki cara yang berbeda untuk melempar kesalahan; rujuk ke dokumentasi yang sesuai.
2.
Dalam JavaScript, console.error('Error') hanya mencetak ke stderr alih-alih melempar kesalahan. Pertimbangkan hal ini juga saat menggunakan bahasa lain.
Karena pm.executeAsync menggunakan exit code alih-alih stderr untuk menentukan keberhasilan, stderr dapat digunakan untuk mencetak informasi debug tanpa memengaruhi eksekusi.Misalnya:
TIP
1.
Hanya pm.executeAsync yang mendukung cara mencetak info debug ini.
2.
Bahasa pemrograman yang berbeda memiliki cara yang berbeda untuk mencetak ke stderr; rujuk ke dokumentasi yang sesuai.
Karena nilai return dari pm.executeAsync adalah tipe Promise, execute tidak dapat langsung diubah menjadi executeAsync. Namun, Anda dapat menggunakan async/await untuk bermigrasi dengan perubahan minimal.
TIP
Apidog versi 2.3.24 atau lebih baru (CLI versi 1.2.38 atau lebih baru) mendukung top-level await.
Fitur ini memerlukan Apidog versi 2.1.39 atau lebih baru. Fitur ini hanya mendukung pemanggilan jar dengan reflection, bukan jar seperti Spring Boot yang menggunakan reflection runtime internal.
Secara default, memanggil jar akan menjalankan metode main dalam kelas Main. Jika options.className ditentukan, nilai tersebut akan menggantikan perilaku default dan sebagai gantinya memanggil metode yang ditentukan dalam jar.Memanggil metode tertentu dalam jar berbeda dari program eksternal lainnya. Apidog akan menggunakan executor bawaan untuk menemukan metode dalam jar melalui reflection dan memanggilnya. Jika metode yang dipanggil memiliki nilai return, nilai tersebut akan digunakan sebagai nilai return akhir setelah dikonversi menjadi string. Jika tidak, cara kerjanya sama seperti pemanggilan lainnya, yaitu menggunakan konten stdout sebagai nilai return.Misalnya:
Perintah yang sebenarnya dieksekusi adalah:
Di mana <app-dist>/assets/JarExecuter-1.1.0-jar-with-dependencies.jar adalah executor bawaan, yang bertanggung jawab untuk menemukan metode com.apidog.Test.combine(String,String) dalam program pengguna ./scripts/jar-1.0-SNAPSHOT.jar melalui reflection, dan memanggilnya dengan parameter (string JSON) "hello" dan "world".
TIP
paramTypes bersifat opsional. Jika tidak ditentukan, tipe akan disimpulkan secara otomatis berdasarkan parameter. Integer disimpulkan sebagai "int", float sebagai "double", boolean sebagai "boolean", string sebagai "String", array disimpulkan berdasarkan elemen pertama, misalnya [3] disimpulkan sebagai "int[]", [3.14] sebagai "double[]", dll. Jika tipe yang disimpulkan tidak cocok dengan tipe parameter aktual dari metode yang dipanggil, paramTypes perlu ditentukan secara manual. Nilai yang didukung dalam array paramTypes: "Number"、"int"、"Integer"、"long"、"Long"、"short"、"Short"、"float"、"Float"