কিভাবে একটি জাভা কলআউট তৈরি করতে হয়

আপনি Apigee Edge ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশনে যান
তথ্য

জাভা কলআউট কি?

Apigee Edge বিভিন্ন ধরনের নীতি প্রদান করে যা সাধারণ API ব্যবস্থাপনার প্রয়োজনীয়তা যেমন নিরাপত্তা, ডেটা ট্রান্সফরমেশন, ট্রাফিক ম্যানেজমেন্ট এবং অন্যদের সমাধান করে।

যাইহোক, এমন কিছু ক্ষেত্রে রয়েছে যেখানে আপনার API-এর কাস্টম আচরণের প্রয়োজন হয় যা একটি আদর্শ নীতিতে প্রয়োগ করা হয় না। এই ক্ষেত্রে, Apigee বেশ কয়েকটি বিকল্প প্রদান করে যা আপনাকে স্ক্রিপ্ট বা কোড কাস্টমাইজড API আচরণ করতে সক্ষম করে। একটি পদ্ধতি হল জাভাতে পছন্দসই আচরণ বাস্তবায়ন করা।

জাভা সমর্থিত সংস্করণগুলির জন্য, সমর্থিত সফ্টওয়্যার এবং সমর্থিত সংস্করণগুলি দেখুন।

আমি কিভাবে একটি প্রক্সিতে জাভা কোড ব্যবহার করব?

একটি জাভা কলআউট নীতি আপনাকে একটি কার্যকরী প্রক্সি ফ্লো থেকে জাভা কোড কল করতে দেয়। আপনার জাভা কোডকে কিছু নির্দিষ্ট এজ-নির্দিষ্ট জাভা ইন্টারফেস প্রয়োগ করতে হবে যা কোডটিকে এক্সিকিউটিং প্রক্সির সাথে ইন্টারঅ্যাক্ট করতে দেয়। উদাহরণস্বরূপ, প্রক্সির বর্তমান প্রবাহ প্রসঙ্গে শিরোনাম, ক্যোয়ারী প্যারামিটার, ফ্লো ভেরিয়েবল এবং অন্যান্য সত্তা পাওয়ার এবং সেট করার জন্য জাভা পদ্ধতি বিদ্যমান।

আমি কখন একটি জাভা কলআউট ব্যবহার করব?

আসুন এমন পরিস্থিতিতে দেখি যেখানে জাভা কলআউটগুলি দরকারী, এবং এমন পরিস্থিতিতে যেখানে আপনার অন্যান্য পন্থা বিবেচনা করা উচিত।

প্রথমত, বিকল্প পদ্ধতি বিবেচনা করুন

একটি জাভা কলআউট ব্যবহার করার আগে, নোট করুন যে বিকল্প পন্থা থাকতে পারে যা আপনি পরিবর্তে ব্যবহার করতে পারেন। যেমন:

  • দূরবর্তী পরিষেবাগুলিতে HTTP API কলগুলির মতো হালকা অপারেশনগুলির জন্য, ServiceCallout নীতি ব্যবহার করার কথা বিবেচনা করুন৷ পরিষেবা কলআউট নীতি দেখুন।
  • বার্তা সামগ্রীর সাথে তুলনামূলকভাবে সহজ ইন্টারঅ্যাকশনের জন্য, যেমন HTTP শিরোনাম, প্যারামিটার বা বার্তা সামগ্রী পরিবর্তন করা বা বের করা, আপনি জাভাস্ক্রিপ্ট বা পাইথন ভাষা ব্যবহার করতে পারেন।

জাভা কোডে আপনি যা করতে পারেন

একটি জাভা কলআউট এই মৌলিক ক্রিয়াকলাপগুলিকে সমর্থন করে:

  • অনুরোধ বা প্রতিক্রিয়া বার্তা পরীক্ষা করা বা হেরফের করা
  • প্রবাহ ভেরিয়েবল পাওয়া এবং সেট করা. আপনি এজ ফ্লো ভেরিয়েবল অ্যাক্সেস করতে জাভা পদ্ধতি ব্যবহার করতে পারেন। আপনি যদি কী ভ্যালু ম্যাপ (KVM) তথ্য অ্যাক্সেস করতে চান, একটি KVM নীতি ব্যবহার করুন, KVM মানগুলি ফ্লো ভেরিয়েবলের জন্য বরাদ্দ করুন এবং তারপর আপনি জাভা কলআউটের মধ্যে থেকে ফ্লো ভেরিয়েবলগুলি অ্যাক্সেস করতে পারেন।
  • বহিরাগত পরিষেবা কলিং
  • দোষ উত্থাপন
  • ত্রুটি বার্তা এবং স্ট্যাটাস কোড ম্যানিপুলেট করা

আপনি জাভা কোডে যা করতে পারবেন না

বেশিরভাগ সিস্টেম কল অননুমোদিত। আপনি পারবেন না :

  • অভ্যন্তরীণ ফাইল সিস্টেম রিড বা রাইট করুন। এর মানে হল যে আপনি কোনো জাভা প্যাকেজ ব্যবহার করতে পারবেন না অভ্যন্তরীণ ফাইল সিস্টেমে পড়তে/লিখতে; তবে, আপনি বহিরাগত দূরবর্তী কল করতে পারেন।
  • বর্তমান প্রক্রিয়া, প্রক্রিয়া তালিকা, বা মেশিনে CPU/মেমরি ব্যবহার সম্পর্কে তথ্য পান।
  • `expressions-1.0.0.jar` এবং `message-flow-1.0.0.jar`-এ সোর্স কোড অ্যাক্সেস করুন।

যদিও এই ধরনের কিছু কল কাজ করতে পারে, তবে সেগুলি অসমর্থিত এবং যেকোন সময় সক্রিয়ভাবে অক্ষম করার জন্য দায়ী৷ আপনার কোডে এই ধরনের কল করা এড়িয়ে চলুন।

Apigee Edge এর সাথে অন্তর্ভুক্ত জাভা লাইব্রেরি ব্যবহার বা নির্ভর করবেন না। এই লাইব্রেরিগুলি শুধুমাত্র এজ পণ্য কার্যকারিতার জন্য, এবং কোনও গ্যারান্টি নেই যে একটি লাইব্রেরি রিলিজ থেকে রিলিজ পর্যন্ত উপলব্ধ থাকবে৷ আপনি যদি এই ধরনের লাইব্রেরি ব্যবহার করেন, তবে সেগুলি শুধুমাত্র অ-উৎপাদন প্রদর্শনে ব্যবহার করুন।

হ্যালো জাভা কলআউট

আসুন একটি বেসিক হ্যালো ওয়ার্ল্ড জাভা কলআউট উদাহরণের মাধ্যমে হেঁটে যাই। এই উদাহরণে, আমরা একটি জাভা কলআউট সহ একটি সাধারণ প্রক্সি তৈরি করি যা একটি "হ্যালো ওয়ার্ল্ড" প্রতিক্রিয়া প্রদান করে। প্রক্সি দুটি সম্ভাব্য প্রতিক্রিয়ার একটি ফিরিয়ে দিতে পারে:

  • আপনি যদি "নাম" মান সহ একটি "ব্যবহারকারীর নাম" শিরোনামে পাস করেন, তাহলে প্রক্সি ফিরে আসবে:

    Hello, <name>!
    
  • আপনি যদি শিরোনামটি বাদ দেন, প্রক্সিটি কেবল ফিরে আসে:

    "Hello, Guest!"
    

স্টার্টার প্রকল্প ডাউনলোড করুন

জিনিসগুলিকে সহজ করার জন্য, আমাদের কাছে Apigee api-প্ল্যাটফর্ম-নমুনা সংগ্রহস্থলে GitHub-এ আপনার জন্য একটি মৌলিক প্রকল্প প্রস্তুত রয়েছে।

  1. আপনার সিস্টেমে এপিআই-প্ল্যাটফর্ম-নমুনাগুলি ডাউনলোড বা ক্লোন করুন।
  2. আপনার পছন্দের একটি টার্মিনাল বা কোড এডিটরে, api-platform-samples/doc-samples/java-hello প্রকল্পে যান।

জাভা কোড লিখুন

  1. জাভা সোর্স ফাইলটি খুলুন: java-hello/callout/src/main/java/HelloJava.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 স্ক্রিপ্টটি চালান। এই স্ক্রিপ্টটি আপনার স্থানীয় মাভেন রেপোতে প্রয়োজনীয় JAR নির্ভরতা ইনস্টল করে।
  3. java-hello/callout ডিরেক্টরিতে cd.
  4. মাভেন চালান:

    mvn clean package
    
  5. আপনি যদি চান, JAR ফাইলটি edge-custom-policy-java-hello.jar java-hello/apiproxy/resources/java এ কপি করা হয়েছে তা যাচাই করুন। এটি JAR ফাইলগুলির জন্য প্রয়োজনীয় অবস্থান যা আপনি একটি প্রক্সি দিয়ে স্থাপন করতে চান৷

javac দিয়ে কম্পাইল করুন (ঐচ্ছিক)

পূর্ববর্তী বিভাগে, আপনি একটি Maven কমান্ডের মাধ্যমে স্বয়ংক্রিয়ভাবে প্রয়োজনীয় Java JAR ফাইল তৈরি করেন। বিকল্পভাবে, আপনি কোড কম্পাইল করার জন্য javac ব্যবহার করতে চাইলে, আপনি নিম্নলিখিত ( java-hello ডিরেক্টরি থেকে) অনুরূপ কিছু করতে পারেন। java-hello/lib ডিরেক্টরিতে আপনার জন্য প্রয়োজনীয় JAR ফাইলগুলি সরবরাহ করা হয়েছে।

  1. cd to api-platform-samples/doc-samples/java-hello
  2. আপনার পথে জাভাক আছে তা নিশ্চিত করুন।

    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. apiproxy/resources/java ডিরেক্টরিতে কম্পাইল করা ক্লাস ধারণকারী একটি JAR ফাইল তৈরি করুন। এটি JAR ফাইলগুলির জন্য প্রয়োজনীয় অবস্থান যা আপনি একটি প্রক্সি দিয়ে স্থাপন করতে চান৷ আপনি java-hello ডিরেক্টরিতে নিম্নলিখিত কমান্ডটি চালিয়ে এটি করতে পারেন (শেষে পিরিয়ডটি ভুলবেন না)।

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

প্রক্সি স্থাপন করুন এবং কল করুন

./java-hello ডিরেক্টরিতে একটি ডিপ্লোয় স্ক্রিপ্ট দেওয়া আছে। কিন্তু আপনি এটি চালানোর আগে, আপনাকে একটি দ্রুত সেটআপ করতে হবে।

  1. cd to api-platform-samples/doc-samples/java-hello
  2. যদি আপনি ইতিমধ্যে এটি না করে থাকেন, ../../setup/setenv.sh ফাইলটি খুলুন এবং আপনার Apigee অ্যাকাউন্টের তথ্যের সাথে নির্দেশিত হিসাবে এটি সম্পাদনা করুন: আপনার ব্যবহারকারীর নাম (আপনার অ্যাকাউন্টের সাথে যুক্ত ইমেল ঠিকানা), আপনার প্রতিষ্ঠানের নাম, এবং আপনি API ব্যবস্থাপনা কল করতে যে ডোমেন ব্যবহার করেন। উদাহরণস্বরূপ, এজ ক্লাউডের জন্য, ডোমেনটি হল https://api.enterprise.apigee.com ; যাইহোক, আপনি যদি এজ প্রাইভেট ক্লাউড ব্যবহার করেন তবে আপনার ডোমেন ভিন্ন হতে পারে।
  3. setenv.sh ফাইলটি সংরক্ষণ করুন।
  4. ডিপ্লোয় স্ক্রিপ্ট চালান:

    ./deploy.sh
    
  5. মোতায়েন সফল হলে, ইনভোক স্ক্রিপ্টটি চালান:

    ./invoke.sh
    

    ইনভোক স্ক্রিপ্ট একটি সিআরএল কমান্ডকে কল করে যা এইরকম দেখায়:

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

    যা ফিরে আসে "হ্যালো, উইল!

    আপনি নাম পরিবর্তন করতে invoke.sh স্ক্রিপ্ট সম্পাদনা করতে পারেন, অথবা যদি আপনি শিরোনামটি সরাতে cURL কল পরিবর্তন করেন, তাহলে কমান্ডটি "হ্যালো, অতিথি!"

প্রক্সি সম্পর্কে

আসুন দ্রুত এই প্রক্সিতে ব্যবহৃত নীতিগুলি পরীক্ষা করি৷ প্রক্সি ফ্লোতে নীতিগুলি কোথায় অবস্থান করছে এবং কেন সেদিকে মনোযোগ দিন৷

বার্তা বরাদ্দ নীতি

একটি বরাদ্দ বার্তা নীতি প্রক্সিএন্ডপয়েন্ট অনুরোধ প্রবাহের সাথে সংযুক্ত রয়েছে৷ এটি অনুরোধ থেকে ব্যবহারকারীর নাম শিরোনাম অনুলিপি করে এবং প্রতিক্রিয়াতে এটি বরাদ্দ করে। এই ক্রিয়াকলাপটি জাভা কলআউট নীতিকে অনুমতি দেয়, যা প্রতিক্রিয়া প্রবাহের সাথে সংযুক্ত, ব্যবহারকারীর নাম শিরোলেখ অ্যাক্সেস করতে এবং সেই শিরোনামের মান ব্যবহার করে একটি কাস্টম প্রতিক্রিয়া বডি তৈরি করতে দেয়৷

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

জাভা কলআউট নীতি

জাভা কলআউট নীতি প্রতিক্রিয়া প্রবাহের সাথে সংযুক্ত। কারণ কাস্টম জাভা কোড প্রতিক্রিয়া শিরোনাম এবং বার্তা পরিবর্তন করে। নীতির ClassName উপাদানটি নীতি দ্বারা কার্যকর করা প্রধান শ্রেণী নির্দিষ্ট করে৷ ResourceURL এলিমেন্ট হল JAR ফাইলের নাম যা আপনি তৈরি করেছেন এবং প্রক্সির resources/java ডিরেক্টরিতে যোগ করেছেন।

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

জাভা কলআউট সম্পর্কে আপনার যা জানা দরকার

একটি জাভা কলআউট বাস্তবায়ন সম্পর্কে নোট করার জন্য গুরুত্বপূর্ণ বিষয়গুলি হল:

  • com.apigee.flow.execution এবং com.apigee.flow.message প্যাকেজ থেকে ক্লাস আমদানি করে। এই প্যাকেজগুলি অবশ্যই প্যাকেজ করা এবং স্থাপন করা JAR ফাইলে অন্তর্ভুক্ত করা উচিত। আপনি ম্যানেজমেন্ট UI প্রক্সি সম্পাদকের মাধ্যমে আপনার Java JAR আপলোড করতে পারেন, অথবা আপনি স্থানীয়ভাবে বিকাশ করা API প্রক্সিগুলিতে /resources/java ডিরেক্টরিতে এটি অন্তর্ভুক্ত করতে পারেন।
  • এক্সিকিউশন ইন্টারফেস বাস্তবায়ন করে। যে কোনো জাভা কোড যা একটি API প্রক্সির মধ্যে নির্বাহ করা হয় তাকে অবশ্যই এক্সিকিউশন বাস্তবায়ন করতে হবে।
  • একটি জাভা কলআউট নীতিতে কোন প্রকৃত কোড নেই। পরিবর্তে, একটি জাভা কলআউট নীতি একটি জাভা 'রিসোর্স' উল্লেখ করে, যা আপনাকে অবশ্যই একটি JAR-এ প্যাকেজ করতে হবে।
  • প্যাকেজের নামগুলি এড়াতে হবে: জাভা কলআউটে প্যাকেজ নাম হিসাবে io.apigee বা com.apigee ব্যবহার করবেন না। সেগুলি সংরক্ষিত এবং অন্যান্য Apigee মডিউল দ্বারা ব্যবহৃত হয়।
  • যদি আপনার জাভা কলআউট স্বাধীন JAR ফাইল হিসাবে প্যাকেজ করা অতিরিক্ত তৃতীয় পক্ষের লাইব্রেরির উপর নির্ভর করে, তাহলে সেই JAR ফাইলগুলিকে /resources/java ডিরেক্টরিতে রাখুন যাতে রানটাইমে সঠিকভাবে লোড হয় কিনা তা নিশ্চিত করতে।
  • যদি একাধিক JAR থাকে তবে সেগুলিকে অতিরিক্ত সংস্থান হিসাবে যোগ করুন। অতিরিক্ত JAR ফাইলগুলি উল্লেখ করার জন্য আপনাকে নীতি কনফিগারেশন পরিবর্তন করতে হবে না। সেগুলিকে /resources/java এ রাখাই যথেষ্ট।
  • Java JAR আপলোড করার অতিরিক্ত তথ্যের জন্য, রিসোর্স ফাইলগুলি দেখুন।