Halaman ini berlaku untuk Apigee dan Apigee Hybrid.
Baca dokumentasi Apigee Edge.
Apa yang dimaksud dengan info Java?
Apigee menyediakan beragam kebijakan yang memenuhi persyaratan pengelolaan API umum seperti keamanan, transformasi data, pengelolaan traffic, dan lain-lain.
Namun, ada beberapa kasus di mana API Anda memerlukan perilaku kustom yang tidak diterapkan dalam kebijakan standar. Dalam kasus ini, Apigee menyediakan beberapa opsi yang memungkinkan Anda membuat skrip atau membuat kode perilaku API yang disesuaikan. Salah satu pendekatannya adalah mengimplementasikan perilaku yang diinginkan di Java.
Versi Java yang didukung meliputi: Oracle JDK 11 dan OpenJDK 11.
Bagaimana cara menggunakan kode Java dalam proxy?
Kebijakan info Java memungkinkan Anda memanggil kode Java dari dalam alur proxy yang dieksekusi. Kode Java Anda harus mengimplementasikan antarmuka Java khusus Apigee tertentu yang memungkinkan kode berinteraksi dengan proxy yang mengeksekusi. Misalnya, ada metode Java untuk mendapatkan dan menyetel header, parameter kueri, variabel alur, dan entity lainnya dalam konteks alur proxy saat ini.
Kapan saya harus menggunakan info Java?
Mari kita lihat situasi saat info Java berguna, dan situasi saat Anda harus mempertimbangkan pendekatan lain.
Pertama, pertimbangkan pendekatan alternatif
Sebelum menggunakan info Java, perhatikan bahwa mungkin ada pendekatan alternatif yang dapat Anda gunakan sebagai gantinya. Contoh:
- Untuk operasi ringan, seperti panggilan API HTTP ke layanan jarak jauh, pertimbangkan untuk menggunakan kebijakan ServiceCallout. Lihat kebijakan Panggilan Layanan.
- Untuk interaksi yang relatif sederhana dengan konten pesan, seperti memodifikasi atau mengekstrak header HTTP, parameter, atau konten pesan, Anda dapat menggunakan kebijakan JavaScript atau PythonScript.
Yang dapat Anda lakukan dalam kode Java
Info Java mendukung operasi dasar ini:
- Memeriksa atau memanipulasi pesan permintaan atau respons
- Mendapatkan dan mengatur variabel alur. Anda dapat menggunakan metode Java untuk mengakses variabel alur Apigee. Jika ingin mengakses informasi Key Value Map (KVM), gunakan kebijakan KVM, tetapkan nilai KVM ke variabel alur, lalu Anda dapat mengakses variabel alur dari dalam pemanggilan Java.
- Memanggil layanan eksternal
- Menaikkan kesalahan
- Memanipulasi pesan error dan kode status
Yang tidak dapat Anda lakukan dalam kode Java
Sebagian besar panggilan sistem tidak diizinkan. Anda tidak dapat:
- Membuat sistem file internal membaca atau menulis. Ini berarti Anda tidak dapat menggunakan salah satu paket Java untuk membaca/menulis ke dalam sistem file internal; namun, Anda dapat melakukan panggilan jarak jauh eksternal.
- Mendapatkan informasi tentang proses saat ini, daftar proses, atau pemakaian CPU/memori pada mesin.
- Akses kode sumber di
expressions-1.0.0.jar
danmessage-flow-1.0.0.jar
.
Meskipun beberapa panggilan semacam ini mungkin berfungsi, panggilan tersebut tidak didukung dan dapat dinonaktifkan secara aktif kapan saja. Hindari melakukan panggilan seperti itu dalam kode Anda.
Jangan gunakan 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 hingga rilis. Jika Anda menggunakan library seperti itu, gunakan library tersebut hanya dalam demonstrasi non-produksi.
Info Java Hello
Mari kita lihat contoh pemanggilan Java halo dunia dasar. Dalam contoh ini, kami membuat proxy sederhana dengan info Java 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 menyiapkan project dasar untuk Anda di GitHub di repositori api-platform-samples Apigee.
- Download atau clone api-platform-samples ke sistem Anda. Jika sudah
memiliki
api-platform-samples
di sistem, lakukanpull
untuk memastikan Anda memiliki versi terbaru. - Di terminal atau editor kode pilihan Anda, buka
project
api-platform-samples/doc-samples/java-hello
.
Menulis 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 implementasikan. Paket yang diimpor diperlukan untuk kode Info Java Apigee. Class ini menyediakan metode yang memungkinkan Anda mengakses konteks eksekusi proxy. Kami akan segera memandu langkah-langkah mengompilasi dan men-deploy kode ini.
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 dikomentari
// 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 repo Maven lokal 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
- {i>cd<i} ke direktori
java-hello/callout
. - Jalankan Maven:
mvn clean package
- Jika mau, pastikan 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 menerapkan proxy adalah dengan memaketkannya dalam file zip dan mengupload paket proxy ke lingkungan di organisasi Apigee Anda. Lihat Membuat proxy API. Pastikan Anda menggunakan opsi Upload Proxy Bundle. Lihat juga Tips dan trik untuk mengupload proxy API dalam paket proxy di komunitas Apigee.
- Ketika proxy di-deploy, coba panggil proxy:
curl https://$HOSTNAME/java-hello -H "username:Will"
Yang akan menampilkan "Hello, Will!
Tentang proxy
Mari kita periksa dengan cepat kebijakan yang digunakan dalam {i>proxy<i} ini. Perhatikan posisi kebijakan dalam alur proxy dan alasannya.
Kebijakan Tetapkan pesan
Kebijakan Tetapkan pesan dilampirkan pada alur permintaan ProxyEndpoint. Tindakan ini akan menyalin header nama pengguna dari permintaan dan menetapkannya ke respons. Operasi ini memungkinkan kebijakan Pemanggilan Java, 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 info Java
Kebijakan pemanggilan Java dilampirkan ke alur respons. Hal ini karena kode Java kustom membuat perubahan pada header respons dan pesan. 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 info Java
Hal-hal yang perlu diperhatikan saat menerapkan info Java 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 menyertakannya dalam direktori/resources/java
di proxy API yang Anda kembangkan secara lokal. - Mengimplementasikan antarmuka Execution. Setiap kode Java yang dijalankan dalam proxy API harus mengimplementasikan Eksekusi.
- Kebijakan Panggilan Java tidak berisi kode sebenarnya. Sebagai gantinya, kebijakan pemanggilan Java mereferensikan 'resource' Java, yang harus Anda kemas dalam JAR.
- Nama paket yang harus dihindari: Jangan gunakan io.apigee atau com.apigee sebagai nama paket di Java Callouts. API ini dicadangkan dan digunakan oleh modul Apigee lainnya.
- Jika Java Callout mengandalkan library pihak ketiga tambahan yang dikemas sebagai file
JAR independen, tempatkan juga file JAR tersebut dalam direktori
/resources/java
untuk memastikan file dimuat dengan benar saat runtime. - Jika ada beberapa JAR, cukup tambahkan JAR tersebut sebagai resource tambahan. Anda tidak perlu
mengubah konfigurasi kebijakan untuk merujuk ke file JAR tambahan. Memasukkannya ke dalam
/resources/java
sudah cukup. - Untuk informasi tambahan tentang cara mengupload JAR Java, lihat File resource.