Cara membuat info Java

Anda sedang melihat dokumentasi Apigee Edge.
Buka dokumentasi Apigee X.
info

Apa yang dimaksud dengan info Java?

Apigee Edge menyediakan berbagai kebijakan yang menangani persyaratan pengelolaan API umum, seperti keamanan, transformasi data, pengelolaan traffic, dan banyak lagi.

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 membuat kode perilaku API yang disesuaikan. Salah satu pendekatannya adalah mengimplementasikan perilaku yang diinginkan di Java.

Untuk versi Java yang didukung, lihat Software yang didukung dan versi yang didukung.

Bagaimana cara menggunakan kode Java di proxy?

Kebijakan info Java memungkinkan Anda memanggil kode Java dari dalam alur proxy yang mengeksekusi. Kode Java Anda harus menerapkan antarmuka Java khusus Edge tertentu yang memungkinkan kode untuk berinteraksi dengan proxy yang mengeksekusinya. Misalnya, ada metode Java untuk mendapatkan dan menyetel header, parameter kueri, variabel alur, dan entitas lainnya dalam konteks alur proxy saat ini.

Kapan saya harus menggunakan info Java?

Mari kita lihat situasi di mana pemanggilan Java berguna, dan situasi yang mengharuskan Anda mempertimbangkan pendekatan lain.

Pertama, pertimbangkan pendekatan alternatif

Sebelum menggunakan info Java, perhatikan bahwa mungkin ada pendekatan alternatif yang dapat Anda gunakan. Contoh:

  • Untuk operasi ringan, seperti panggilan API HTTP ke layanan jarak jauh, sebaiknya gunakan kebijakan ServiceCallout. Lihat kebijakan Panggilan Layanan.
  • Untuk interaksi yang relatif sederhana dengan konten pesan, seperti memodifikasi atau mengekstrak header, parameter, atau konten pesan HTTP, Anda dapat menggunakan bahasa JavaScript atau Python.

Apa yang dapat Anda lakukan dalam kode Java

Info Java mendukung operasi dasar ini:

  • Memeriksa atau memanipulasi pesan permintaan atau respons
  • Mendapatkan dan menetapkan variabel alur. Anda dapat menggunakan metode Java untuk mengakses variabel alur Edge. 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 pemanggilan Java.
  • Menelepon layanan eksternal
  • Meningkatkan 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 melakukan pembacaan atau penulisan. 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.
  • Dapatkan informasi tentang proses saat ini, daftar proses, atau pemakaian CPU/memori di mesin.
  • Akses kode sumber di `expressions-1.0.0.jar` dan `message-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 menggunakan atau mengandalkan library Java yang disertakan dengan Apigee Edge. Library tersebut hanya untuk fungsi produk Edge, dan tidak ada jaminan bahwa library akan tersedia dari rilis ke rilis. Jika Anda menggunakan library tersebut, gunakan library tersebut hanya dalam demonstrasi non-produksi.

Info Hello Java

Mari kita lihat contoh info dasar Java halo dunia. Dalam contoh ini, kita 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 telah menyiapkan project dasar untuk Anda di GitHub di repositori api-platform-samples Apigee.

  1. Download atau clone api-platform-samples ke sistem Anda.
  2. Di terminal atau editor kode pilihan Anda, buka project api-platform-samples/doc-samples/java-hello.

Menulis kode Java

  1. 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 Edge Java Callout. Class tersebut 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;
                    }
            }
    
    }
    
  2. 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!");
    }
    
  3. Simpan file.


Mengompilasi kode dengan Maven

Project sudah disiapkan agar Anda dapat mengompilasi dengan Maven. Jika Anda ingin menggunakan javac, kami akan menyertakan contoh dengan mengikuti contoh Maven.

  1. Pastikan Anda telah menginstal Maven:

    mvn -version
    
  2. Jalankan skrip java-hello/buildsetup.sh. Skrip ini akan menginstal dependensi JAR yang diperlukan dalam repo Maven lokal Anda.
  3. {i>cd<i} ke direktori java-hello/callout.
  4. Jalankan Maven:

    mvn clean package
    
  5. Jika mau, pastikan bahwa file JAR edge-custom-policy-java-hello.jar telah disalin ke java-hello/apiproxy/resources/java. Ini adalah lokasi yang diperlukan untuk file JAR yang ingin Anda deploy dengan proxy.

Mengompilasi dengan javac (opsional)

Di bagian sebelumnya, Anda akan otomatis membuat file JAR Java yang diperlukan dengan perintah Maven. Atau, jika ingin menggunakan javac untuk mengompilasi kode, Anda dapat melakukan sesuatu yang mirip dengan berikut ini (dari direktori java-hello). File JAR yang diperlukan disediakan untuk Anda di direktori java-hello/lib.

  1. {i>cd<i} ke api-platform-samples/doc-samples/java-hello.
  2. Pastikan Anda memiliki javac di jalur Anda.

    javac -version
    
  3. Jalankan perintah javac berikut:

    javac -d . -classpath ./lib/expressions-1.0.0.jar:./lib/message-flow-1.0.0.jar:. callout/src/main/java/HelloJava.java
    
    Tindakan ini akan membuat com/apigeesample/HelloJava.class.
  4. Buat file JAR yang berisi class yang dikompilasi dalam direktori apiproxy/resources/java. Ini adalah lokasi yang diperlukan untuk file JAR yang ingin Anda deploy dengan proxy. Anda dapat melakukannya dengan menjalankan perintah berikut di direktori java-hello (jangan lupakan titik di bagian akhir).

    jar cvf apiproxy/resources/java/edge-custom-policy-java-hello.jar -C com .
    

Men-deploy dan memanggil proxy

Skrip deployment disediakan di direktori ./java-hello. Namun, sebelum menjalankannya, Anda perlu melakukan penyiapan cepat.

  1. cd ke api-platform-samples/doc-samples/java-hello
  2. Jika Anda belum melakukannya, buka file ../../setup/setenv.sh dan edit file tersebut seperti yang ditunjukkan dengan informasi akun Apigee Anda: nama pengguna (alamat email yang terkait dengan akun Anda), nama organisasi, dan domain yang Anda gunakan untuk melakukan panggilan pengelolaan API. Misalnya, untuk Edge cloud, domainnya adalah https://api.enterprise.apigee.com; namun, domain Anda mungkin berbeda jika Anda menggunakan Edge Private Cloud.
  3. Simpan file setenv.sh.
  4. Jalankan skrip deployment:

    ./deploy.sh
    
  5. Jika deployment berhasil, jalankan skrip pemanggilan:

    ./invoke.sh
    

    Skrip pemanggilan memanggil perintah cURL yang terlihat seperti ini:

    curl  http://$org-$env.$api_domain/java-hello -H "username:Will"
    

    Yang menghasilkan pesan "Hello, Will!

    Anda dapat mengedit skrip invoke.sh untuk mengubah nama, atau jika Anda mengubah panggilan cURL untuk menghapus header, perintah akan menampilkan "Halo, Tamu!"

Tentang proxy

Mari kita periksa dengan cepat kebijakan yang digunakan di {i>proxy<i} ini. Perhatikan posisi kebijakan dalam alur proxy dan alasannya.

Kebijakan Tetapkan pesan

Kebijakan Tetapkan pesan dilampirkan pada alur permintaan ProxyEndpoint. Metode ini menyalin header nama pengguna dari permintaan dan menetapkannya ke respons. Operasi ini memungkinkan kebijakan Pemanggilan Java, yang dilampirkan ke alur respons, 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 info Java dilampirkan ke alur respons. 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 info Java

Hal-hal yang perlu diperhatikan tentang penerapan info Java adalah:

  • Mengimpor class dari paket com.apigee.flow.execution dan com.apigee.flow.message. Paket-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 dalam proxy API yang Anda kembangkan secara lokal.
  • Mengimplementasikan antarmuka Execution. Setiap kode Java yang dijalankan dalam proxy API harus mengimplementasikan Eksekusi.
  • Kebijakan Info Java tidak berisi kode aktual. 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 Info Java. Modul ini dicadangkan dan digunakan oleh modul Apigee lainnya.
  • Jika Java Callout Anda mengandalkan library pihak ketiga tambahan yang dikemas sebagai file JAR independen, tempatkan juga file JAR tersebut di direktori /resources/java untuk memastikan file tersebut dimuat dengan benar pada runtime.
  • Jika ada beberapa JAR, cukup tambahkan sebagai resource tambahan. Anda tidak perlu mengubah konfigurasi kebijakan untuk merujuk ke file JAR tambahan. Memasukkannya ke dalam /resources/java sudah cukup.
  • Untuk mengetahui informasi tambahan tentang cara mengupload JAR Java, lihat File resource.