Halaman ini berlaku untuk Apigee dan Apigee Hybrid.
Lihat dokumentasi
Apigee Edge.
Apa yang dimaksud dengan Panggilan Java?
Apigee menyediakan berbagai kebijakan yang memenuhi persyaratan pengelolaan API umum seperti keamanan, transformasi data, pengelolaan traffic, dan lainnya.
Namun, ada beberapa kasus ketika API Anda memerlukan perilaku kustom yang tidak diterapkan dalam kebijakan standar. Dalam kasus ini, Apigee menyediakan beberapa opsi yang memungkinkan Anda membuat skrip atau mengodekan perilaku API yang disesuaikan. Salah satu pendekatannya adalah menerapkan perilaku yang diinginkan di Java.
Versi Java yang didukung mencakup: Oracle JDK 11 dan OpenJDK 11.
Bagaimana cara menggunakan kode Java di proxy?
Kebijakan JavaCallout memungkinkan Anda memanggil kode Java dari dalam alur proxy yang sedang dieksekusi. Kode Java Anda harus mengimplementasikan antarmuka Java khusus Apigee tertentu yang memungkinkan kode berinteraksi dengan proxy yang sedang dieksekusi. Misalnya, ada metode Java untuk mendapatkan dan menetapkan header, parameter kueri, variabel alur, dan entity lain dalam konteks alur proxy saat ini.
Kapan saya harus menggunakan kebijakan JavaCallout?
Mari kita lihat situasi saat kebijakan JavaCallout berguna, dan situasi saat Anda harus mempertimbangkan pendekatan lain.
Pertama, pertimbangkan pendekatan alternatif
Sebelum menggunakan kebijakan JavaCallout, perhatikan bahwa ada pendekatan alternatif yang dapat Anda gunakan sebagai gantinya. Contoh:
- Untuk operasi ringan, seperti panggilan HTTP API ke layanan jarak jauh, pertimbangkan untuk menggunakan kebijakan ServiceCallout. Lihat Kebijakan info Layanan.
- Untuk interaksi yang relatif sederhana dengan konten pesan, seperti mengubah atau mengekstrak header HTTP, parameter, atau konten pesan, Anda dapat menggunakan kebijakan JavaScript atau PythonScript.
Yang dapat Anda lakukan dalam kode Java
Kebijakan JavaCallout mendukung operasi dasar berikut:
- Memeriksa atau memanipulasi pesan permintaan atau respons
- Mendapatkan dan menyetel variabel alur. Anda dapat menggunakan metode Java untuk mengakses variabel alur Apigee. Jika Anda ingin mengakses informasi Key Value Map (KVM), gunakan kebijakan KVM, tetapkan nilai KVM ke variabel alur, lalu Anda dapat mengakses variabel alur dari dalam kebijakan JavaCallout.
- Memanggil layanan eksternal
- Mengajukan kesalahan
- Memanipulasi pesan error dan kode status
Hal yang tidak dapat Anda lakukan dalam kode Java
Sebagian besar panggilan sistem tidak diizinkan. Anda tidak dapat:
- Melakukan operasi baca atau tulis sistem file internal. Artinya, Anda tidak dapat menggunakan paket Java apa pun untuk membaca/menulis ke sistem file internal; namun, Anda dapat melakukan panggilan jarak jauh eksternal.
- Mendapatkan informasi tentang proses saat ini, daftar proses, atau pemakaian CPU/memori di mesin.
- Akses kode sumber di
expressions-1.0.0.jar
danmessage-flow-1.0.0.jar
.
Meskipun beberapa panggilan tersebut mungkin berfungsi, panggilan tersebut tidak didukung dan dapat dinonaktifkan secara aktif kapan saja. Hindari melakukan panggilan tersebut dalam kode Anda.
Jangan menggunakan atau mengandalkan library Java yang disertakan dengan Apigee. Library tersebut hanya untuk fungsi produk Apigee, dan tidak ada jaminan bahwa library akan tersedia dari rilis ke rilis. Jika Anda menggunakan library tersebut, gunakan hanya dalam demonstrasi non-produksi.
Hello JavaCallout
Mari kita bahas contoh kebijakan JavaCallout hello world dasar. Dalam contoh ini, kita membuat proxy sederhana dengan JavaCallout yang menampilkan respons "hello world". Proxy dapat menampilkan salah satu dari dua kemungkinan respons:
- Jika Anda meneruskan header "username" dengan nilai "name", proxy akan menampilkan:
Hello, <name>!
- Jika Anda menghilangkan header, proxy hanya akan menampilkan:
"Hello, Guest!"
Mendownload project awal
Untuk mempermudah, kami telah menyiapkan project dasar untuk Anda di GitHub dalam repositori Apigee api-platform-samples.
- Download atau clone api-platform-samples ke sistem Anda. Jika Anda sudah memiliki
api-platform-samples
di sistem Anda, lakukanpull
untuk memastikan Anda memiliki versi terbaru. - Di terminal atau editor kode pilihan Anda, buka project
api-platform-samples/doc-samples/java-hello
.
Tulis kode Java
- Buka file sumber Java:
java-hello/callout/src/main/java/HelloJava.java
. File ini adalah versi kerangka dari class Java utama yang akan kita terapkan. Paket yang diimpor diperlukan untuk kode JavaCallout Apigee. Class ini menyediakan metode yang memungkinkan Anda mengakses konteks eksekusi proxy. Kami akan membahas langkah-langkah untuk mengompilasi dan men-deploy kode ini dalam waktu singkat.
package com.apigeesample; import com.apigee.flow.execution.ExecutionContext; import com.apigee.flow.execution.ExecutionResult; import com.apigee.flow.execution.spi.Execution; import com.apigee.flow.message.MessageContext; public class HelloJava implements Execution { public ExecutionResult execute(MessageContext messageContext, ExecutionContext executionContext) { try { // Your code here. return ExecutionResult.SUCCESS; } catch (Exception e) { return ExecutionResult.ABORT; } } }
- Ganti baris yang diberi komentar
// Your code here
dengan kode berikut:
String name = messageContext.getMessage().getHeader("username"); if (name != null && name.length()>0) { messageContext.getMessage().setContent("Hello, " + name + "!"); messageContext.getMessage().removeHeader("username"); } else { messageContext.getMessage().setContent("Hello, Guest!"); }
- Simpan file.
Kompilasi kode Anda dengan Maven
- Pastikan Anda telah menginstal Maven:
mvn -version
- Instal dependensi JAR yang diperlukan di repositori Maven lokal Anda menggunakan salah satu metode berikut:
- Tambahkan cuplikan berikut ke file
pom.xml
untuk mendownload dependensi JAR yang diperlukan dari Artifact Registry:<repositories> <repository> <id>artifact-registry</id> <url>https://us-maven.pkg.dev/apigee-release/apigee-java-callout-dependencies</url> </repository> </repositories> <dependencies> <dependency> <groupId>com.apigee.gateway.libraries</groupId> <artifactId>message-flow</artifactId> <version>1.0.0</version> <scope>compile</scope> <type>jar</type> </dependency> <dependency> <groupId>com.apigee.infra.libraries</groupId> <artifactId>expressions</artifactId> <version>1.0.0</version> <scope>compile</scope> <type>jar</type> </dependency> </dependencies>
- Gunakan panggilan
curl
berikut untuk mendownload dependensi JAR yang diperlukan dari Artifact Registry:curl "https://us-maven.pkg.dev/apigee-release/apigee-java-callout-dependencies/com/apigee/gateway/libraries/message-flow/1.0.0/message-flow-1.0.0.jar" -v -L -o message-flow-1.0-0.jar
curl "https://us-maven.pkg.dev/apigee-release/apigee-java-callout-dependencies/com/apigee/infra/libraries/expressions/1.0.0/expressions-1.0.0.jar" -v -L -o expressions-1.0.0.jar
- Jalankan skrip
java-hello/buildsetup.sh
. Skrip ini mendownload dependensi JAR yang diperlukan dari repositori GitHub Apigee.
- Tambahkan cuplikan berikut ke file
- cd ke direktori
java-hello/callout
. - Jalankan Maven:
mvn clean package
- Jika Anda ingin, verifikasi bahwa file JAR
edge-custom-policy-java-hello.jar
telah disalin kejava-hello/apiproxy/resources/java
. Ini adalah lokasi yang diperlukan untuk file JAR yang ingin Anda deploy dengan proxy.
Men-deploy dan memanggil proxy
Ikuti langkah-langkah berikut untuk men-deploy dan menguji proxy API:
- Ubah ke direktori
java-hello
. - Zip paket proxy API:
zip apiproxy-bundle.zip -r apiproxy -x \*.\*~
- Cara paling sederhana untuk men-deploy proxy adalah dengan mengemasnya dalam file zip dan mengupload paket proxy ke lingkungan di organisasi Apigee Anda. Lihat Membuat proxy API. Pastikan untuk menggunakan opsi Upload Proxy Bundle. Lihat juga Tips dan trik untuk mengupload proxy API dalam paket proxy di komunitas Apigee.
- Setelah proxy di-deploy, coba panggil:
curl https://$HOSTNAME/java-hello -H "username:Will"
Yang akan menampilkan "Hello, Will!
Tentang proxy
Mari kita periksa secara singkat kebijakan yang digunakan dalam proxy ini. Perhatikan di mana kebijakan diposisikan dalam alur proxy dan alasannya.
Kebijakan Tetapkan pesan
Kebijakan pesan Assign dilampirkan ke alur permintaan ProxyEndpoint. Fungsi ini menyalin header nama pengguna dari permintaan dan menetapkannya ke respons. Operasi ini memungkinkan kebijakan JavaCallout, yang dilampirkan ke alur respons, untuk mengakses header nama pengguna dan membuat isi respons kustom menggunakan nilai header tersebut.
<AssignMessage async="false" continueOnError="false" enabled="true" name="CopyHeader"> <DisplayName>CopyHeader</DisplayName> <Copy source="request"> <Headers> <Header name="username"/> </Headers> </Copy> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="response"/> </AssignMessage>
Kebijakan JavaCallout
Kebijakan JavaCallout dilampirkan ke response flow. Hal ini karena
kode Java kustom membuat perubahan pada header dan pesan respons. Elemen ClassName
kebijakan menentukan class utama yang dijalankan oleh kebijakan. Elemen ResourceURL adalah
nama file JAR yang Anda buat dan tambahkan ke direktori resources/java
proxy.
<JavaCallout name="hello-java"> <ClassName>com.apigeesample.HelloJava</ClassName> <ResourceURL>java://edge-custom-policy-java-hello.jar</ResourceURL> </JavaCallout>
Yang perlu Anda ketahui tentang kebijakan JavaCallout
Hal-hal penting yang perlu diperhatikan saat menerapkan kebijakan JavaCallout adalah:
- Mengimpor class dari paket
com.apigee.flow.execution
dancom.apigee.flow.message
. Paket ini harus disertakan dalam file JAR yang dikemas dan di-deploy. Anda dapat mengupload JAR Java melalui editor proxy UI Pengelolaan, atau Anda dapat menyertakannya di direktori/resources/java
dalam proxy API yang Anda kembangkan secara lokal. - Mengimplementasikan antarmuka Execution. Setiap kode Java yang dieksekusi dalam proxy API harus menerapkan Execution.
- Kebijakan JavaCallout tidak berisi kode sebenarnya. Sebagai gantinya, kebijakan mereferensikan 'resource' Java, yang harus Anda paketkan dalam JAR.
- Nama paket yang harus dihindari: Jangan gunakan io.apigee atau com.apigee sebagai nama paket dalam kebijakan JavaCallout. Direktori tersebut dicadangkan dan digunakan oleh modul Apigee lainnya.
- Jika kebijakan JavaCallout Anda mengandalkan library pihak ketiga tambahan yang dikemas sebagai file JAR independen, tempatkan file JAR tersebut di direktori
/resources/java
juga untuk memastikan file tersebut dimuat dengan benar saat runtime. - Jika ada beberapa JAR, cukup tambahkan sebagai resource tambahan. Anda tidak perlu
mengubah konfigurasi kebijakan untuk merujuk ke file JAR tambahan. Menempatkannya di
/resources/java
sudah cukup. - Untuk informasi tambahan tentang cara mengupload JAR Java, lihat File resource.