Java çağrısı oluşturma

Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin.
bilgi

Java çağrısı nedir?

Apigee Edge, güvenlik, veri dönüşümü ve trafik yönetimi gibi yaygın API yönetimi gereksinimlerini karşılayan çeşitli politikalar sunar.

Ancak bazı durumlarda API'niz, standart bir politikada uygulanmayan özel davranışlar gerektirebilir. Bu gibi durumlarda Apigee, özelleştirilmiş API davranışını komut dosyası veya kod olarak yazmanıza olanak tanıyan çeşitli seçenekler sunar. Bir yaklaşım, istenen davranışı Java'da uygulamaktır.

Desteklenen Java sürümleri için Desteklenen yazılımlar ve desteklenen sürümler başlıklı makaleyi inceleyin.

Bir proxy'de Java kodunu nasıl kullanırım?

Java çağrısı politikası, yürütülen bir proxy akışı içinden Java kodu çağırmanıza olanak tanır. Java kodunuzun, kodun yürütülen proxy ile etkileşime girmesine olanak tanıyan belirli Edge'e özgü Java arayüzlerini uygulaması gerekir. Örneğin, proxy'nin mevcut akış bağlamındaki başlıkları, sorgu parametrelerini, akış değişkenlerini ve diğer varlıkları alma ve ayarlama için Java yöntemleri vardır.

Java çağrısını ne zaman kullanmalıyım?

Java çağrılarının yararlı olduğu ve diğer yaklaşımları göz önünde bulundurmanız gereken durumları inceleyelim.

Öncelikle alternatif yaklaşımları değerlendirin.

Java açıklama metni kullanmadan önce, bunun yerine kullanabileceğiniz alternatif yaklaşımlar olabileceğini unutmayın. Örneğin:

  • Uzak hizmetlere yapılan HTTP API çağrıları gibi basit işlemler için ServiceCallout politikasını kullanabilirsiniz. Hizmet açıklama metni politikasına bakın.
  • HTTP üstbilgilerini, parametrelerini veya mesaj içeriğini değiştirme ya da çıkarma gibi mesaj içeriğiyle ilgili nispeten basit etkileşimler için JavaScript veya Python dillerini kullanabilirsiniz.

Java kodunda yapabilecekleriniz

Java çağrısı şu temel işlemleri destekler:

  • İstek veya yanıt mesajlarını inceleme ya da değiştirme
  • Akış değişkenlerini alma ve ayarlama Edge akış değişkenlerine erişmek için Java yöntemlerini kullanabilirsiniz. Anahtar/değer haritası (KVM) bilgilerine erişmek istiyorsanız KVM politikası kullanın, KVM değerlerini akış değişkenlerine atayın. Ardından, Java çağrısı içinden akış değişkenlerine erişebilirsiniz.
  • Harici hizmetleri arama
  • Hata bildirme
  • Hata mesajlarını ve durum kodlarını değiştirme

Java kodunda yapamayacağınız işlemler

Çoğu sistem çağrısına izin verilmez. Şunları yapamazsınız:

  • Dahili dosya sistemi okuma veya yazma işlemleri yapma Bu nedenle, dahili dosya sistemlerine okuma/yazma işlemleri yapmak için Java paketlerini kullanamazsınız ancak harici uzaktan çağrılar yapabilirsiniz.
  • Mevcut işlem, işlem listesi veya makinedeki CPU/bellek kullanımı hakkında bilgi edinin.
  • `expressions-1.0.0.jar` ve `message-flow-1.0.0.jar` dosyalarındaki kaynak koduna erişin.

Bu tür aramaların bazıları çalışsa da desteklenmez ve herhangi bir zamanda etkin olarak devre dışı bırakılabilir. Kodunuzda bu tür aramalar yapmaktan kaçının.

Apigee Edge ile birlikte gelen Java kitaplıklarını kullanmayın veya bunlara güvenmeyin. Bu kitaplıklar yalnızca Edge ürün işlevselliği için kullanılır ve bir kitaplığın sürümden sürüme kullanılabileceği garanti edilmez. Bu tür kitaplıkları kullanıyorsanız yalnızca üretim dışı gösterimlerde kullanın.

Hello Java açıklaması

Temel bir "Merhaba Dünya" Java açıklama metni örneğini inceleyelim. Bu örnekte, "hello world" yanıtı döndüren bir Java çağrısı içeren basit bir proxy oluşturuyoruz. Proxy, iki olası yanıttan birini döndürebilir:

  • "name" değeriyle bir "username" üstbilgisi iletirseniz proxy şu yanıtı döndürür:

    Hello, <name>!
  • Üstbilgiyi atlarsanız proxy yalnızca şunu döndürür:

    "Hello, Guest!"

Başlangıç projesini indirin

İşleri kolaylaştırmak için GitHub'da Apigee api-platform-samples deposunda sizin için temel bir proje hazırladık.

  1. api-platform-samples'ı sisteminize indirin veya klonlayın.
  2. Seçtiğiniz bir terminalde veya kod düzenleyicide api-platform-samples/doc-samples/java-hello projesine gidin.

Java kodunu yazma

  1. Java kaynak dosyasını açın: java-hello/callout/src/main/java/HelloJava.java. Bu dosya, uygulayacağımız ana Java sınıfının iskelet sürümüdür. Edge Java Callout kodu için içe aktarılan paketler gereklidir. Bu sınıflar, proxy yürütme bağlamına erişmenizi sağlayan yöntemler sunar. Bu kodu derleme ve dağıtma adımlarını kısa süre içinde inceleyeceğiz.
    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. Yorum satırı // Your code here yerine aşağıdaki kodu ekleyin:

    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. Dosyayı kaydedin.


Kodunuzu Maven ile derleme

Proje, Maven ile derleme yapabileceğiniz şekilde ayarlanır. javac kullanmak istiyorsanız Maven örneğini takip eden bir örnek ekleyeceğiz.

  1. Maven'in yüklü olduğundan emin olun:

    mvn -version
  2. Komut dosyasını çalıştırın java-hello/buildsetup.sh. Bu komut dosyası, gerekli JAR bağımlılıklarını yerel Maven deponuza yükler.
  3. java-hello/callout dizinine gidin.
  4. Maven'i yürütün:

    mvn clean package
  5. İsterseniz edge-custom-policy-java-hello.jar JAR dosyasının java-hello/apiproxy/resources/java konumuna kopyalandığını doğrulayın. Bu, bir proxy ile dağıtmak istediğiniz JAR dosyaları için gerekli konumdur.

javac ile derleme (isteğe bağlı)

Önceki bölümde, gerekli Java JAR dosyasını bir Maven komutuyla otomatik olarak oluşturursunuz. Alternatif olarak, kodu derlemek için javac kullanmak istiyorsanız aşağıdakine benzer bir işlem yapabilirsiniz (java-hello dizininden). Gerekli JAR dosyaları, java-hello/lib dizininde sizin için sağlanır.

  1. cd api-platform-samples/doc-samples/java-hello
  2. Yolunuzda javac olduğundan emin olun.

    javac -version
  3. Aşağıdaki javac komutunu çalıştırın:

    javac -d . -classpath ./lib/expressions-1.0.0.jar:./lib/message-flow-1.0.0.jar:. callout/src/main/java/HelloJava.java
    Bu işlem com/apigeesample/HelloJava.class oluşturur.
  4. apiproxy/resources/java dizininde derlenmiş sınıfı içeren bir JAR dosyası oluşturun. Bu, bir proxy ile dağıtmak istediğiniz JAR dosyaları için gerekli konumdur. Bu işlemi java-hello dizininde aşağıdaki komutu çalıştırarak gerçekleştirebilirsiniz (sonundaki noktayı unutmayın).

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

Proxy'yi dağıtma ve çağırma

./java-hello dizininde bir dağıtım komut dosyası sağlanır. Ancak çalıştırmadan önce hızlı bir kurulum yapmanız gerekir.

  1. api-platform-samples/doc-samples/java-hello dizinine gidin.
  2. Henüz yapmadıysanız ../../setup/setenv.sh dosyasını açın ve Apigee hesap bilgilerinizle (kullanıcı adınız, kuruluş adınız ve API yönetimi çağrıları yapmak için kullandığınız alan) belirtildiği şekilde düzenleyin. Örneğin, Edge Cloud için alan https://api.enterprise.apigee.com şeklindedir. Ancak Edge Private Cloud kullanıyorsanız alanınız farklı olabilir.
  3. setenv.sh dosyasını kaydedin.
  4. Dağıtım komut dosyasını çalıştırın:

    ./deploy.sh
  5. Dağıtım başarılı olursa çağırma komut dosyasını çalıştırın:

    ./invoke.sh

    Invoke komut dosyası, aşağıdaki gibi bir cURL komutu çağırır:

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

    Bu işlev "Hello, Will!" sonucunu döndürür.

    Adı değiştirmek için invoke.sh komut dosyasını düzenleyebilirsiniz. cURL çağrısını başlığı kaldıracak şekilde değiştirirseniz komut "Hello, Guest!" (Merhaba, Misafir!) değerini döndürür.

Proxy hakkında

Bu proxy'de kullanılan politikaları hızlıca inceleyelim. Politikaların proxy akışında nerede ve neden konumlandırıldığına dikkat edin.

İletiyi atama politikası

ProxyEndpoint istek akışına bir AssignMessage politikası eklenir. İstekten kullanıcı adı başlığını kopyalar ve yanıta atar. Bu işlem, yanıt akışına eklenen Java Callout politikasının kullanıcı adı üstbilgisine erişmesine ve bu üstbilginin değerini kullanarak özel bir yanıt gövdesi oluşturmasına olanak tanır.

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

Java çağrısı politikası

Java çağrı politikası, yanıt akışına eklenir. Bunun nedeni, özel Java kodunun yanıt başlıklarında ve mesajda değişiklik yapmasıdır. Politikanın ClassName öğesi, politika tarafından yürütülen ana sınıfı belirtir. ResourceURL öğesi, oluşturduğunuz ve proxy'nin resources/java dizinine eklediğiniz JAR dosyasının adıdır.

<JavaCallout name="hello-java">         
    <ClassName>com.apigeesample.HelloJava</ClassName>         
    <ResourceURL>java://edge-custom-policy-java-hello.jar</ResourceURL> 
</JavaCallout>

Java çağrısı hakkında bilmeniz gerekenler

Java çağrısı uygulama hakkında dikkat edilmesi gereken önemli noktalar:

  • com.apigee.flow.execution ve com.apigee.flow.message paketlerindeki sınıfları içe aktarır. Bu paketler, paketlenip dağıtılan JAR dosyasına dahil edilmelidir. Java JAR'ınızı Yönetim kullanıcı arayüzü proxy'si düzenleyicisi aracılığıyla yükleyebilir veya yerel olarak geliştirdiğiniz API proxy'lerinde /resources/java dizinine ekleyebilirsiniz.
  • Execution arayüzünü uygular. Bir API proxy'sinde yürütülen tüm Java kodları, Execution'ı uygulamalıdır.
  • Java Callout politikası gerçek kod içermez. Bunun yerine, Java Callout politikası, JAR'da paketlemeniz gereken bir Java "kaynağına" referans verir.
  • Kaçınılması gereken paket adları: Java Callout'larda paket adı olarak io.apigee veya com.apigee kullanmayın. Bunlar diğer Apigee modülleri tarafından ayrılır ve kullanılır.
  • Java Callout'unuz bağımsız JAR dosyaları olarak paketlenmiş ek üçüncü taraf kitaplıklarına bağlıysa bu JAR dosyalarını /resources/java dizinine de yerleştirerek çalışma zamanında doğru şekilde yüklendiklerinden emin olun.
  • Birden fazla JAR varsa bunları ek kaynak olarak eklemeniz yeterlidir. Ek JAR dosyalarına başvurmak için politika yapılandırmasını değiştirmeniz gerekmez. Bunları /resources/java içine yerleştirmeniz yeterlidir.
  • Java JAR'larını yükleme hakkında daha fazla bilgi için Kaynak dosyaları başlıklı makaleyi inceleyin.