Java कॉलआउट एक्सटेंशन बनाने का तरीका

आपको Apigee Edge दस्तावेज़ दिख रहा है.
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है इस पेज पर जाएं Apigee X दस्तावेज़.
जानकारी

Java कॉलआउट क्या है?

Apigee Edge में ऐसी कई नीतियां मौजूद हैं जो एपीआई को मैनेज करने से जुड़ी सामान्य ज़रूरी शर्तों को पूरा करती हैं जैसे, सुरक्षा, डेटा ट्रांसफ़ॉर्मेशन, ट्रैफ़िक मैनेजमेंट वगैरह.

हालांकि, कुछ मामलों में आपके एपीआई को कस्टम व्यवहार की ज़रूरत होती है, जिसे लागू नहीं किया गया है एक मानक नीति के तहत आता है. इन मामलों में, Apigee के पास कई विकल्प होते हैं, जिनकी मदद से स्क्रिप्ट तैयार की जा सकती है या कोड कस्टमाइज़्ड एपीआई व्यवहार. एक तरीका है Java में मनचाहे व्यवहार को लागू करना.

Java के साथ काम करने वाले वर्शन के लिए, 'यह काम करता है' के तौर पर काम करने वाला सॉफ़्टवेयर और सॉफ़्टवेयर के साथ काम करने वाले वर्शन.

मैं प्रॉक्सी में Java कोड कैसे इस्तेमाल करूं?

Java की कॉलआउट नीति की मदद से, लागू किए जा रहे प्रॉक्सी फ़्लो में जाकर, Java कोड को कॉल किया जा सकता है. आपका Java कोड को एज के हिसाब से बने खास Java इंटरफ़ेस की ज़रूरत होती है जो कोड को लागू की जा रही प्रॉक्सी के साथ. उदाहरण के लिए, हेडर और क्वेरी पाने और सेट करने के लिए Java के तरीके मौजूद हैं पैरामीटर, फ़्लो वैरिएबल, और प्रॉक्सी के मौजूदा फ़्लो में मौजूद अन्य इकाइयां.

मुझे Java कॉलआउट का इस्तेमाल कब करना चाहिए?

आइए, उन स्थितियों पर नज़र डालते हैं जहां Java कॉलआउट आपके काम के हैं. साथ ही, यह भी देखते हैं कि आपको किन स्थितियों में दूसरे तरीकों पर विचार करें.

सबसे पहले, इन बातों का ध्यान रखें वैकल्पिक तरीके

Java कॉलआउट का इस्तेमाल करने से पहले, ध्यान दें कि इस्तेमाल करने के दूसरे तरीके भी हो सकते हैं आज़माएं. उदाहरण के लिए:

  • रिमोट सेवाओं को एचटीटीपी एपीआई कॉल करने जैसे आसान ऑपरेशन के लिए, सेवाकॉलआउट नीति. सेवा कॉलआउट की नीति देखें.
  • मैसेज के कॉन्टेंट के साथ आसान इंटरैक्शन के लिए. जैसे, बदलाव करना या एक्सट्रैक्ट करना एचटीटीपी हेडर, पैरामीटर या मैसेज कॉन्टेंट के लिए, JavaScript या Python भाषाओं का इस्तेमाल किया जा सकता है.

Java कोड में क्या-क्या किया जा सकता है

Java कॉलआउट, इन बेसिक कार्रवाइयों के साथ काम करता है:

  • अनुरोध या जवाब वाले मैसेज की जांच करना या उनमें बदलाव करना
  • फ़्लो वैरिएबल पाना और सेट करना. Edge फ़्लो वैरिएबल को ऐक्सेस करने के लिए, Java के तरीकों का इस्तेमाल किया जा सकता है. की वैल्यू मैप (केवीएम) की जानकारी ऐक्सेस करने के लिए, केवीएम नीति का इस्तेमाल करें, फ़्लो वैरिएबल के लिए केवीएम वैल्यू असाइन करें. इसके बाद, फ़्लो वैरिएबल को यहां से ऐक्सेस किया जा सकता है लागू करें.
  • बाहरी सेवाओं को कॉल करना
  • गड़बड़ियों को ठीक करना
  • गड़बड़ी के मैसेज और स्टेटस कोड में हेर-फेर करना

आप Java में क्या नहीं कर सकते हैं कोड

ज़्यादातर सिस्टम कॉल की अनुमति नहीं है. ये काम नहीं किए जा सकते:

  • अंदरूनी फ़ाइल सिस्टम को पढ़ने या लिखने के लिए. इसका मतलब है कि आप इनमें से किसी भी तरीके का इस्तेमाल नहीं कर सकते इंटरनल फ़ाइल सिस्टम में पढ़ने/लिखने के लिए Java पैकेज; हालांकि, आपके पास रिपोर्ट के बाहर रिमोट कॉल.
  • यहां पर मौजूदा प्रोसेस, प्रोसेस की सूची या सीपीयू/मेमोरी के इस्तेमाल के बारे में जानकारी पाएं मशीन.
  • `expressions-1.0.0.jar` और `message-flow-1.0.0.jar` में सोर्स कोड को ऐक्सेस करें.

हालांकि ऐसे कुछ कॉल काम कर सकते हैं, लेकिन वे असमर्थित हैं और यहां सक्रिय रूप से अक्षम किए जा सकते हैं किसी भी समय. अपने कोड में ऐसे कॉल करने से बचें.

Apigee Edge के साथ शामिल की गई Java लाइब्रेरी का इस्तेमाल न करें और न ही उन पर भरोसा करें. ये लाइब्रेरी यह सुविधा सिर्फ़ Edge प्रॉडक्ट के फ़ंक्शन के लिए है. साथ ही, इस बात की कोई गारंटी नहीं है कि लाइब्रेरी उपलब्ध होगी शुरुआत से लेकर रिलीज़ तक. अगर ऐसी लाइब्रेरी का इस्तेमाल किया जा रहा है, तो उन्हें प्रोडक्शन के अलावा किसी दूसरे तरीके से दिखाने के लिए इस्तेमाल करें सिर्फ़.

नमस्ते Java कॉलआउट

आइए, हैलो वर्ल्ड के Java कॉलआउट का बुनियादी उदाहरण देखें. इस उदाहरण में, हमने एक Java कॉलआउट के साथ एक सामान्य प्रॉक्सी, जो "हैलो वर्ल्ड" दिखाता है जवाब. प्रॉक्सी सर्वर रिटर्न कर सकता है दो संभावित जवाबों में से:

  • अगर आपने "उपयोगकर्ता नाम" "नाम" के साथ हेडर मान, प्रॉक्सी दिखाता है:

    अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
    Hello, <name>!
    
  • अगर इस हेडर को छोड़ दिया जाता है, तो प्रॉक्सी सिर्फ़ यह जवाब देता है:

    अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
    "Hello, Guest!"
    

स्टार्टर प्रोजेक्ट डाउनलोड करना

चीज़ों को आसान बनाने के लिए, हमने Apigee में GitHub पर आपके लिए एक बेसिक प्रोजेक्ट तैयार किया है api-platform-samples रिपॉज़िटरी.

  1. अपने सिस्टम में api-platform-samples डाउनलोड करें या उन्हें क्लोन करें.
  2. अपनी पसंद के टर्मिनल या कोड एडिटर में, api-platform-samples/doc-samples/java-hello प्रोजेक्ट.

Java कोड लिखना

  1. Java सोर्स फ़ाइल खोलें: java-hello/callout/src/main/java/HelloJava.java. यह फ़ाइल उस मुख्य Java क्लास का स्केलेटन वर्शन है जिसे हम लागू करेंगे. इंपोर्ट किए गए Edge Java कॉलआउट कोड के लिए, पैकेज ज़रूरी हैं. ये क्लास ऐसे तरीके उपलब्ध कराती हैं जिनसे आपको का इस्तेमाल करें. हम कंपाइल और डिप्लॉय करने के चरणों के बारे में बताएंगे इस कोड को जल्दी ही स्वीकार किया जा सकता है.
    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. टिप्पणी की गई पंक्ति // Your code here को इस कोड से बदलें:

    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. फ़ाइल सेव करें.


अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है Maven की मदद से अपना कोड कंपाइल करना

प्रोजेक्ट को सेट अप किया गया है, ताकि उसे Maven के साथ कंपाइल किया जा सके. अगर आपको डिजिटल विज्ञापन दिखाने javac, Maven के उदाहरण के बाद, हम एक उदाहरण शामिल करेंगे.

  1. पक्का करें कि आपने Maven इंस्टॉल किया हो:

    अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
    mvn -version
    
  2. java-hello/buildsetup.sh स्क्रिप्ट चलाएं. यह स्क्रिप्ट आवश्यक इंस्टॉल करती है आपके लोकल Maven रिपो में JAR डिपेंडेंसी.
  3. cd को java-hello/callout डायरेक्ट्री में जोड़ें.
  4. Maven लागू करें:

    अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
    mvn clean package
    
  5. अगर आप चाहें, तो पुष्टि करें कि JAR फ़ाइल edge-custom-policy-java-hello.jar java-hello/apiproxy/resources/java में कॉपी किया गया. इसके लिए यह ज़रूरी जगह है JAR फ़ाइलें, जिन्हें आपको प्रॉक्सी के साथ डिप्लॉय करना है.

javac के साथ कंपाइल करें (वैकल्पिक)

पिछले सेक्शन में, ज़रूरी Java JAR फ़ाइल जनरेट करने के लिए, Maven निर्देश. इसके अलावा, अगर आपको कोड को कंपाइल करने के लिए javac का इस्तेमाल करना है, तो निम्न जैसा कुछ (java-hello डायरेक्ट्री से). ज़रूरी है JAR फ़ाइलें, java-hello/lib डायरेक्ट्री में आपके लिए उपलब्ध कराई जाती हैं.

  1. cd से api-platform-samples/doc-samples/java-hello करने के लिए.
  2. पक्का करें कि आपके पाथ में javac हो.

    javac -version
    
  3. यह javac निर्देश चलाएं:

    अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
    javac -d . -classpath ./lib/expressions-1.0.0.jar:./lib/message-flow-1.0.0.jar:. callout/src/main/java/HelloJava.java
    
    इससे com/apigeesample/HelloJava.class बन जाएगा.
  4. एक ऐसी JAR फ़ाइल बनाएं जिसमें कंपाइल की गई क्लास हो apiproxy/resources/java डायरेक्ट्री. JAR के लिए यह ज़रूरी जगह है जिन फ़ाइलों को प्रॉक्सी के साथ डिप्लॉय करना है. ऐसा करने के लिए, यह तरीका अपनाएं: कमांड को java-hello डायरेक्ट्री में डालें (अंत में दी गई अवधि को न भूलें).

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

प्रॉक्सी को डिप्लॉय करें और उसे कॉल करें

./java-hello डायरेक्ट्री में डिप्लॉय स्क्रिप्ट दी गई है. हालाँकि, इसे इस्तेमाल करने से पहले, आपको एक क्विक सेट अप करना होगा.

  1. cd से api-platform-samples/doc-samples/java-hello
  2. अगर आपने पहले से ऐसा नहीं किया है, तो ../../setup/setenv.sh फ़ाइल खोलें और बदलाव करें जैसा कि आपके Apigee खाते की जानकारी में बताया गया है: आपका उपयोगकर्ता नाम (ईमेल पता आपके खाते से जुड़ा हो सकता है), आपके संगठन का नाम, और वह डोमेन जिसका इस्तेमाल एपीआई बनाने के लिए किया जाता है कॉल को मैनेज करने के लिए किया जा सकता है. उदाहरण के लिए, Edge क्लाउड के लिए, डोमेन https://api.enterprise.apigee.com; हालाँकि, डोमेन अलग हो सकता है अगर आप Edge Private Cloud का इस्तेमाल करें.
  3. setenv.sh फ़ाइल सेव करें.
  4. डिप्लॉय स्क्रिप्ट चलाएं:

    अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
    ./deploy.sh
    
  5. डिप्लॉयमेंट पूरा होने पर, शुरू करने वाली स्क्रिप्ट लागू करें:

    अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
    ./invoke.sh
    

    शुरू करने वाली स्क्रिप्ट एक cURL निर्देश को कॉल करती है, जो ऐसा दिखता है:

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

    जो "हैलो, विल!

    नाम बदलने के लिए या invoke.sh स्क्रिप्ट में बदलाव करके, cURL से हेडर हटाने के लिए कॉल करें, फिर आदेश "नमस्ते, Guest!" दिखाता है

प्रॉक्सी के बारे में जानकारी

आइए, इस प्रॉक्सी में इस्तेमाल की गई नीतियों के बारे में जल्दी से जान लें. ध्यान दें कि नीतियां कहां-कहां मौजूद हैं को प्रॉक्सी फ़्लो में रखा जा सकता है और क्यों.

'मैसेज असाइन करें' से जुड़ी नीति

'मैसेज असाइन करें' नीति, ProxyEndpoint के अनुरोध के फ़्लो में अटैच की जाती है. यह अनुरोध से उपयोगकर्ता नाम के हेडर को कॉपी करके, उसे रिस्पॉन्स को असाइन कर देता है. इस कार्रवाई की अनुमति है Java कॉलआउट नीति, जो उपयोगकर्ता नाम के हेडर को ऐक्सेस करने के लिए रिस्पॉन्स फ़्लो से जुड़ी होती है हेडर की वैल्यू का इस्तेमाल करके, कस्टम रिस्पॉन्स बॉडी बनाएं.

<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 कॉलआउट नीति

Java कॉलआउट नीति, रिस्पॉन्स फ़्लो से जुड़ी होती है. ऐसा इसलिए होता है, क्योंकि कस्टम Java कोड, रिस्पॉन्स हेडर और मैसेज में बदलाव करता है. नीति का ClassName एलिमेंट, नीति के ज़रिए एक्ज़ीक्यूट की जाने वाली मुख्य क्लास के बारे में बताता है. ResourceURL एलिमेंट वह है उस JAR फ़ाइल का नाम जिसे आपने बनाया है औरresources/java प्रॉक्सी.

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

Java के कॉलआउट के बारे में आपको क्या जानकारी होनी चाहिए

Java कॉलआउट लागू करने के बारे में ध्यान रखने वाली ज़रूरी बातें ये हैं:

  • com.apigee.flow.execution और से क्लास इंपोर्ट करता है com.apigee.flow.message पैकेज. ये पैकेज JAR फ़ाइल में शामिल होने चाहिए जिसे पैकेज करके डिप्लॉय किया जाता है. मैनेजमेंट यूज़र इंटरफ़ेस (यूआई) प्रॉक्सी के ज़रिए अपना Java JAR अपलोड किया जा सकता है एडिटर का इस्तेमाल कर सकते हैं या आप इसे एपीआई प्रॉक्सी में /resources/java डायरेक्ट्री में शामिल कर सकते हैं, जो जिन्हें स्थानीय तौर पर डेवलप किया जाता है.
  • एक्ज़ीक्यूशन इंटरफ़ेस लागू करता है. एपीआई प्रॉक्सी के अंदर एक्ज़ीक्यूट होने वाले किसी भी Java कोड को एक्ज़ीक्यूशन लागू करें.
  • Java कॉलआउट नीति में कोई असल कोड नहीं है. इसके बजाय, Java कॉलआउट नीति Java 'संसाधन', जिसे आपको JAR में पैकेज करना होगा.
  • ऐसे पैकेज के नाम जिनसे बचें: io.apigee का इस्तेमाल न करें या com.apigee का इस्तेमाल, Java कॉलआउट में पैकेज नाम के तौर पर किया जा सकता है. उन्हें रिज़र्व किया गया है और इनका इस्तेमाल किया जाता है अन्य Apigee मॉड्यूल.
  • अगर आपका Java कॉलआउट, स्वतंत्र JAR के तौर पर पैकेज की गई तीसरे पक्ष की दूसरी लाइब्रेरी पर निर्भर है फ़ाइलें शामिल कर सकता है, फिर उन JAR फ़ाइलों को /resources/java डायरेक्ट्री में भी रख सकता है पक्का करें कि रनटाइम के दौरान, ये सही से लोड हों.
  • अगर एक से ज़्यादा JAR हैं, तो बस उन्हें अतिरिक्त संसाधनों के तौर पर जोड़ें. आपको ये काम करने की ज़रूरत नहीं है अन्य JAR फ़ाइलों का रेफ़रंस देने के लिए, नीति के कॉन्फ़िगरेशन में बदलाव करें. उन्हें डाला जा रहा है /resources/java काफ़ी है.
  • Java JAR अपलोड करने के बारे में ज़्यादा जानकारी के लिए, संसाधन फ़ाइलें देखें.