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ü, trafik yönetimi gibi yaygın API yönetimi gereksinimlerini karşılayan çeşitli politikalar sunar.

Bununla birlikte, API'nizin standart bir politikada uygulanmamış özel davranış gerektirdiği bazı durumlar vardır. Bu tür durumlarda Apigee, özelleştirilmiş API davranışını kodlamanızı veya kodlamanızı sağlayan çeşitli seçenekler sunar. Yaklaşımlardan biri, istenen davranışı Java'da uygulamaktır.

Desteklenen Java sürümleri için Desteklenen yazılımlar ve desteklenen sürümler konusuna bakın.

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

Java çağrı politikası, yürütülen bir proxy akışı içinden Java kodunu çağırmanıza olanak tanır. Java kodunuzun, kodun yürütme proxy'siyle etkileşim kurmasına olanak tanıyan Edge'e özel belirli Java arayüzlerini uygulaması gerekir. Örneğin, başlıkları, sorgu parametrelerini, akış değişkenlerini ve diğer varlıkları proxy'nin mevcut akış bağlamında almak ve ayarlamak için Java yöntemleri mevcuttur.

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

Java çağrılarının faydalı olduğu ve diğer yaklaşımları dikkate almanız gereken durumlara göz atalım.

İlk olarak, alternatif yaklaşımları değerlendirin

Java çağrısı 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 ServiceCaption politikasını kullanabilirsiniz. Hizmet açıklama metni politikasını inceleyin.
  • HTTP üstbilgilerini, parametreleri veya mesaj içeriğini değiştirme ya da ayıklama gibi mesaj içeriğiyle nispeten basit etkileşimler için JavaScript veya Python dillerini kullanabilirsiniz.

Java kodunda neler yapabilirsiniz?

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 Eşleme (KVM) bilgilerine erişmek isterseniz bir KVM politikası kullanın, akış değişkenlerine KVM değerleri atayın ve ardından Java çağrısı içinden akış değişkenlerine erişebilirsiniz.
  • Harici hizmetler aranıyor
  • Hataları yükseltme
  • 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. Aşağıdakileri yapamazsınız:

  • Dahili dosya sisteminde okuma veya yazma işlemleri yapma. Bu, dahili dosya sistemlerinde okuma/yazma yapmak için Java paketlerinin hiçbirini kullanamayacağınız anlamına gelir. Ancak harici uzaktan çağrılar yapabilirsiniz.
  • Makinedeki mevcut işlem, işlem listesi veya CPU/bellek kullanımı hakkında bilgi edinin.
  • "expressions-1.0.0.jar" ve "message-flow-1.0.0.jar" ifadelerindeki kaynak koduna erişin.

Bu tür çağrılar işe yarasa da bunlar desteklenmez ve her an etkin olarak devre dışı bırakılabilir. Kodunuzda bu tür çağrılar yapmaktan kaçının.

Apigee Edge'e dahil olan Java kitaplıklarını kullanmayın veya bunlara güvenmeyin. Bu kitaplıklar yalnızca Edge ürün işlevselliğine yöneliktir ve bir kitaplığın sürümden kullanıma sunulacağına dair bir garanti yoktur. Bu tür kitaplıklar kullanıyorsanız bunları yalnızca üretim dışı tanıtımlarda kullanın.

Merhaba Java açıklama metni

Basit bir hello world Java çağrısı örneğine göz atalım. Bu örnekte, "merhaba dünya" yanıtı döndüren bir Java çağrısıyla basit bir proxy oluşturduk. Proxy, iki olası yanıttan birini döndürebilir:

  • "Name" (ad) değeriyle bir "username" (kullanıcı adı) üstbilgisi iletirseniz proxy şunu döndürür:

    Hello, <name>!
    
  • Üstbilgiyi çıkarırsanız proxy yalnızca şu değeri döndürür:

    "Hello, Guest!"
    

Başlangıç projesini indirin

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

  1. api-platform-samples API'sini sisteminize indirin veya klonlayın.
  2. Seçtiğiniz bir terminal 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. İçe aktarılan paketler, Edge Java Açıklama kodu için gereklidir. Bu sınıflar, proxy yürütme bağlamına erişmenize olanak tanıyan yöntemler sunar. Kısa süre içinde bu kodu derleyip dağıtmayla ilgili adımları göstereceğ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. Yorumlanan satırı // Your code here ile aşağıdaki kodla değiştirin:

    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 derleyin

Proje, Maven ile derleyebileceğiniz şekilde ayarlanmıştır. javac öğesini kullanmak istiyorsanız Maven örneğinden sonra bir örnek ekleyeceğiz.

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

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

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

Javac ile derleyin (isteğe bağlı)

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

  1. cd'den api-platform-samples/doc-samples/java-hello öğesine dokunun.
  2. Yolunuzda javac uzantısı bulunduğ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 derlenen sınıfı içeren bir JAR dosyası oluşturun. Bu, proxy ile dağıtmak istediğiniz JAR dosyaları için gerekli konumdur. Bu işlemi, aşağıdaki komutu java-hello dizininde çalıştırarak yapabilirsiniz (sondaki 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 gerekiyor.

  1. cd'den api-platform-samples/doc-samples/java-hello konumuna
  2. Henüz yapmadıysanız ../../setup/setenv.sh dosyasını açın ve Apigee hesap bilgilerinizle (kullanıcı adınız (hesabınızla ilişkili e-posta adresi), kuruluş adınız ve API yönetimi çağrıları yapmak için kullandığınız alan) belirtilen şekilde düzenleyin. Örneğin, Edge bulutu için alan https://api.enterprise.apigee.com'dir. 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ı yürütün:

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

    ./invoke.sh
    

    Çağrı komut dosyası, aşağıdakine benzer bir cURL komutu çağırır:

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

    Bu da "Hello, Will!

    Adı değiştirmek için invoke.sh komut dosyasını düzenleyebilirsiniz veya başlığı kaldırmak için cURL çağrısını değiştirirseniz komut "Merhaba, Konuk!" mesajını döndürür.

Proxy hakkında

Şimdi, bu proxy'de kullanılan politikaları hızlıca inceleyelim. Politikaların proxy akışında nereye yerleştirildiğine ve bunun nedenine dikkat edin.

Mesaj atama politikası

ProxyEndpoint istek akışına Mesaj ata politikası eklenir. İstekteki kullanıcı adı başlığını kopyalar ve yanıta atar. Bu işlem, yanıt akışına eklenmiş olan Java Ek Bilgi Politikası'nın kullanıcı adı başlığına erişmesine ve bu başlığın 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çıklama metni politikası

Java açıklama metni 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ını uygulama konusunda dikkat edilmesi gereken önemli noktalar şunlardır:

  • 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 eklenmelidir. Java JAR'nizi Yönetim Kullanıcı Arayüzü proxy düzenleyicisi aracılığıyla yükleyebilir veya yerel olarak geliştirdiğiniz API proxy'lerindeki /resources/java dizinine ekleyebilirsiniz.
  • Yürütme arayüzünü uygular. API proxy'si içinde yürütülen tüm Java kodları, Yürütme'yi uygulamalıdır.
  • Java Çağrı politikası gerçek kod içermez. Bunun yerine, bir Java Çağrı politikası, JAR'de paketlemeniz gereken bir Java "kaynağına" referans verir.
  • Kaçınılması gereken paket adları: Java Açıklama metinlerinde paket adları olarak io.apigee veya io.apigee etiketini kullanmayın. Bu modüller, diğer Apigee modülleri tarafından ayırtılır ve kullanılır.
  • Java Numaranız, bağımsız JAR dosyaları olarak paketlenmiş ek üçüncü taraf kitaplıklara dayanıyorsa bu JAR dosyalarını, çalışma zamanında doğru şekilde yüklendiklerinden emin olmak için /resources/java dizinine yerleştirin.
  • Birden fazla JAR varsa bunları ek kaynak olarak ekleyin. Ek JAR dosyalarına başvurmak için politika yapılandırmasını değiştirmeniz gerekmez. Bunların /resources/java içine eklenmesi yeterlidir.
  • Java JAR'leri yükleme hakkında daha fazla bilgi için Kaynak dosyaları başlıklı makaleye bakın.