Cara membuat info Java

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 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 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.

  1. Download atau clone api-platform-samples ke sistem Anda. Jika sudah memiliki api-platform-samples di sistem, lakukan pull untuk memastikan Anda memiliki versi terbaru.
  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 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;
                    }
            }
    
    }
    
  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.


Kompilasi kode Anda dengan Maven

  1. Pastikan Anda telah menginstal Maven:

    mvn -version
    
  2. 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.
  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.

Men-deploy dan memanggil proxy

Ikuti langkah-langkah berikut untuk men-deploy dan menguji proxy API:

  1. Ubah ke direktori java-hello.
  2. Zip paket proxy API:
    zip apiproxy-bundle.zip -r apiproxy -x \*.\*~
    
  3. 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.
  4. 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 dan com.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.