বার্তা টেমপ্লেট

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

এই বিষয়টি আলোচনা করে কিভাবে API প্রক্সিতে বার্তা টেমপ্লেট ব্যবহার করতে হয় এবং একটি ফাংশন রেফারেন্স প্রদান করে।

একটি বার্তা টেমপ্লেট কি?

একটি বার্তা টেমপ্লেট আপনাকে নির্দিষ্ট নীতি এবং TargetEndpoint উপাদানগুলিতে পরিবর্তনশীল স্ট্রিং প্রতিস্থাপন করার অনুমতি দেয়। এই বৈশিষ্ট্যটি, যেখানে সমর্থিত, আপনাকে প্রক্সি চালানোর সময় গতিশীলভাবে স্ট্রিংগুলিকে পপুলেট করতে দেয়।

আপনি একটি বার্তা টেমপ্লেটে ফ্লো ভেরিয়েবল রেফারেন্স এবং আক্ষরিক পাঠ্যের যেকোনো সমন্বয় অন্তর্ভুক্ত করতে পারেন। ফ্লো ভেরিয়েবলের নামগুলি অবশ্যই কোঁকড়া ধনুর্বন্ধনীতে আবদ্ধ থাকতে হবে, যখন কোঁকড়া বন্ধনীতে নয় এমন যেকোন পাঠ্য আক্ষরিক পাঠ্য হিসাবে আউটপুট হবে।

এছাড়াও দেখুন আপনি কোথায় বার্তা টেমপ্লেট ব্যবহার করতে পারেন?

উদাহরণ

উদাহরণস্বরূপ, বার্তা বরাদ্দ নীতি আপনাকে <Payload> উপাদানের মধ্যে একটি বার্তা টেমপ্লেট ব্যবহার করতে দেয়:

<AssignMessage name="set-dynamic-content">
  <AssignTo createNew="false" type="response"></AssignTo>
  <Set>
    <Payload contentType="application/json">
      {"name":"Alert", "message":"You entered an invalid username: {user.name}"}
    </Payload>
  </Set>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
</AssignMessage>

উপরের উদাহরণে, ফ্লো ভেরিয়েবল user.name এর মান (কোঁকড়া ধনুর্বন্ধনীতে) মূল্যায়ন করা হবে এবং রানটাইমে পেলোড স্ট্রিংয়ে প্রতিস্থাপিত হবে। সুতরাং, উদাহরণস্বরূপ, যদি user.name=jdoe , তাহলে পেলোডের ফলে বার্তা আউটপুট হবে: You entered an invalid username: jdoe । যদি ভেরিয়েবলটি সমাধান করা না যায়, তাহলে একটি খালি স্ট্রিং হল আউটপুট।

উদাহরণ

যখন একটি কোটা অতিক্রম করা হয়, এটি কলকারীকে একটি অর্থপূর্ণ বার্তা ফেরত দেওয়া একটি ভাল অভ্যাস। কোটা লঙ্ঘন সম্পর্কে কলকারীকে তথ্য দেওয়ার জন্য আউটপুট প্রদান করতে এই প্যাটার্নটি সাধারণত একটি "ফল্ট রুল" এর সাথে ব্যবহার করা হয়। নিম্নলিখিত অ্যাসাইন মেসেজ নীতিতে, বার্তা টেমপ্লেটগুলি বিভিন্ন XML উপাদানে গতিশীলভাবে কোটা তথ্য পূরণ করতে ব্যবহৃত হয়:

<AssignMessage name='AM-QuotaViolationMessage'>
  <Description>message for quota exceeded</Description>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <Set>
    <Headers>
      <Header name='X-Quota-Reset'>{ratelimit.Quota-1.expiry.time}</Header>
      <Header name='X-Quota-Allowed'>{ratelimit.Quota-1.allowed.count}</Header>
      <Header name='X-Quota-Available'>{ratelimit.Quota-1.available.count}</Header>
    </Headers>
    <Payload contentType='application/json'>{
  "error" : {
    "message" : "you have exceeded your quota",
    "clientId" : "{request.queryparam.apikey}"
  }
}
    </Payload>
    <StatusCode>429</StatusCode>
    <ReasonPhrase>Quota Exceeded</ReasonPhrase>
  </Set>
</AssignMessage>

AssignMessage নীতিতে, <Set> উপাদান সমর্থন বার্তা টেমপ্লেটিং-এ নিম্নলিখিত উপাদানগুলি রয়েছে:

  • হেডার
  • QueryParam
  • ফর্মপরম
  • পেলোড
  • সংস্করণ
  • ক্রিয়া
  • পথ
  • স্ট্যাটাসকোড
  • যুক্তিবাক্য

আবার, নোট করুন যে একটি বার্তা টেমপ্লেটে ফ্লো ভেরিয়েবল অবশ্যই কোঁকড়া বন্ধনীতে আবদ্ধ থাকতে হবে

যখন এই নীতি কার্যকর হয়:

  • হেডার উপাদানগুলি নির্দিষ্ট প্রবাহ ভেরিয়েবলের মানগুলি গ্রহণ করে।
  • পেলোডে আক্ষরিক পাঠ্য এবং ভেরিয়েবলের মিশ্রণ রয়েছে ( client_id গতিশীলভাবে জনবহুল)।
  • StatusCode এবং ReasonPhrase শুধুমাত্র আক্ষরিক পাঠ অন্তর্ভুক্ত করে; যাইহোক, যদি আপনি এটি ব্যবহার করতে চান তবে এই উপাদানগুলি বার্তা টেমপ্লেটিং সমর্থন করে।

উদাহরণ

একটি প্রক্সি TargetEndpoint সংজ্ঞায়, <SSLInfo> সমর্থন বার্তা টেমপ্লেটিং-এর চাইল্ড-এলিমেন্ট। নীতিগুলিতে ব্যবহৃত একই প্যাটার্ন অনুসরণ করে, প্রক্সি কার্যকর করার সময় কোঁকড়া বন্ধনীতে ফ্লো ভেরিয়েবলগুলি প্রতিস্থাপিত হয়।

<TargetEndpoint name="default">
  
  <HTTPTargetConnection>
    <SSLInfo>
        <Enabled>{myvars.ssl.enabled}</Enabled>
        <ClientAuthEnabled>{myvars.ssl.client.auth.enabled}</ClientAuthEnabled>
        <KeyStore>{myvars.ssl.keystore}</KeyStore>
        <KeyAlias>{myvars.ssl.keyAlias}</KeyAlias>
        <TrustStore>{myvars.ssl.trustStore}</TrustStore>
    </SSLInfo>

  </HTTPTargetConnection>
  
</TargetEndpoint>

আপনি কোথায় বার্তা টেমপ্লেট ব্যবহার করতে পারেন?

বার্তা টেমপ্লেটগুলি বিভিন্ন নীতির পাশাপাশি TargetEndpoint কনফিগারেশনে ব্যবহৃত কিছু উপাদান সমর্থিত।

নীতি যা বার্তা টেমপ্লেট গ্রহণ করে

নীতি উপাদান এবং শিশু-উপাদান যা বার্তা টেমপ্লেট সমর্থন করে
অ্যাক্সেস কন্ট্রোল নীতি <SourceAddress> , mask অ্যাট্রিবিউট এবং IP ঠিকানার জন্য।
অ্যাসাইন মেসেজ নীতি <Set> চাইল্ড এলিমেন্ট: পেলোড, কনটেন্ট টাইপ, ক্রিয়া, ভার্সন, পাথ, স্ট্যাটাসকোড, রিজনফ্রেজ, হেডার, কোয়েরিপ্যারাম, ফর্মপ্যারাম

<Add> এলিমেন্টস: হেডার, কোয়েরিপ্যারাম, ফর্মপ্যারাম

<AssignVariable> চাইল্ড এলিমেন্ট: <Template>

এক্সটেনশন কলআউট নীতি <Input>
ExtractVariables নীতি <JsonPath>
জেডাব্লুএস নীতি তৈরি করুন
JWS নীতি যাচাই করুন
<Payload> ( শুধুমাত্র জেডাব্লুএস নীতি তৈরি করুন )

<AdditionalHeaders><Claim>

* এই উপাদানগুলি শুধুমাত্র তখনই বার্তা টেমপ্লেট সমর্থন করে যখন type=map

জেডাব্লুটি নীতি তৈরি করুন
JWT নীতি যাচাই করুন
<AdditionalClaims><Claim>

<AdditionalHeaders><Claim>

* এই উপাদানগুলি শুধুমাত্র তখনই বার্তা টেমপ্লেট সমর্থন করে যখন type=map

LDAP নীতি <SearchQuery>
মেসেজলগিং নীতি <Syslog><Message>

<File><Message>

OAS যাচাইকরণ নীতি <OASResource> উপাদান
রেইসফল্ট নীতি <Set> উপাদান: পেলোড, বিষয়বস্তু প্রকার, ক্রিয়া, সংস্করণ, পথ, স্ট্যাটাসকোড, যুক্তিবাক্য, শিরোনাম, ক্যোয়ারীপ্যারাম, ফর্মপ্যারাম

<Add> উপাদান: শিরোনাম, ক্যোয়ারীপ্যারাম, ফর্মপ্যারাম

SAMLA প্রত্যয়ন নীতি <Template>

* শুধুমাত্র যখন পলিসি স্বাক্ষর <GenerateSAMLAssertion> হয়

সার্ভিস কলআউট নীতি <Set> উপাদান: পেলোড, বিষয়বস্তু প্রকার, ক্রিয়া, সংস্করণ, পথ, স্ট্যাটাসকোড, যুক্তিবাক্য, /হেডার, ক্যোয়ারীপ্যারাম, ফর্মপ্যারাম

<Add> উপাদান: শিরোনাম, ক্যোয়ারীপ্যারাম, ফর্মপ্যারাম

<HTTPTargetConnection>/<URL> : মনে রাখবেন যে স্ট্রিংয়ের প্রথম অংশটি অবশ্যই http বা https হতে হবে।

TargetEndpoint উপাদান যা বার্তা টেমপ্লেট গ্রহণ করে

HTTPTargetConnection উপাদান শিশু-উপাদান যা বার্তা টেমপ্লেট সমর্থন করে
এসএসএলইনফো সক্ষম, KeyAlias, KeyStore, TrustStore, ClientAuthEnabled, CLRStore
লোকাল টার্গেট কানেকশন ApiProxy, ProxyEndpoint
পথ একটি লোডব্যালেন্সার উপাদান ব্যবহার করার সময়, পাথ উপাদান সক্রিয় থাকে এবং একটি বার্তা টেমপ্লেট গ্রহণ করে।

বার্তা টেমপ্লেট সিনট্যাক্স

এই বিভাগটি বার্তা টেমপ্লেট ব্যবহার করার জন্য আপনাকে যে নিয়মগুলি অনুসরণ করতে হবে তা ব্যাখ্যা করে৷

ভেরিয়েবল বোঝাতে কোঁকড়া ধনুর্বন্ধনী ব্যবহার করুন

ভেরিয়েবলের নামগুলি কোঁকড়া বন্ধনীতে আবদ্ধ করুন { } । ভেরিয়েবলের অস্তিত্ব না থাকলে, আউটপুটে একটি খালি স্ট্রিং ফেরত দেওয়া হয়; যাইহোক, আপনি বার্তা টেমপ্লেটগুলিতে ডিফল্ট মান নির্দিষ্ট করতে পারেন (ভেরিয়েবলটি অমীমাংসিত হলে প্রতিস্থাপিত মান)। বার্তা টেমপ্লেটগুলিতে ডিফল্ট মান সেট করা দেখুন।

উল্লেখ্য যে সমগ্র বার্তা টেমপ্লেট স্ট্রিংটি উদ্ধৃতিতে আবদ্ধ করা অনুমোদিত, কিন্তু ঐচ্ছিক। উদাহরণস্বরূপ, নিম্নলিখিত দুটি বার্তা টেমপ্লেট সমতুল্য:

<Set>
    <Headers>
        <Header name="x-h1">"Hello {user.name}"</Header>
        <Header name="x-h1">Hello {user.name}</Header>
    </Headers>
</Set>

বার্তা টেমপ্লেটে ডিফল্ট মান সেট করা

যদি একটি টেমপ্লেটেড ভেরিয়েবল সমাধান করা না যায়, এজ একটি খালি স্ট্রিং প্রতিস্থাপন করে। যাইহোক, আপনি নিম্নরূপ একটি ডিফল্ট মান নির্দিষ্ট করতে পারেন:

<Header name="x-h1">Test message. id = {request.header.id:Unknown}</Header>

উপরের নমুনায় যদি ভেরিয়েবল request.header.id সমাধান করা না যায় তাহলে এর মান Unknown দ্বারা প্রতিস্থাপিত হয়। যেমন:

Test message. id = Unknown

ফাংশন এক্সপ্রেশনে স্পেস অনুমোদিত নয়

বার্তা টেমপ্লেট ফাংশন এক্সপ্রেশনে কোথাও স্পেস অনুমোদিত নয়। যেমন:

অনুমোদিত:

{substring(alpha,0,4)}
{createUuid()}
{randomLong(10)}

অনুমোদিত নয়:

{substring( alpha, 0, 4 )}
{ createUuid( ) }
{randomLong( 10 )}

JSON পেলোডের জন্য লিগ্যাসি সিনট্যাক্স

ক্লাউড রিলিজ 16.08.17 এর আগে এজ সংস্করণগুলিতে, আপনি JSON পেলোডগুলির মধ্যে পরিবর্তনশীল রেফারেন্সগুলি বোঝাতে কোঁকড়া ধনুর্বন্ধনী ব্যবহার করতে পারবেন না । সেই পুরানো সংস্করণগুলিতে, আপনাকে ডিলিমিটার অক্ষরগুলি নির্দিষ্ট করতে variablePrefix এবং variableSuffix বৈশিষ্ট্যগুলি ব্যবহার করতে হবে এবং পরিবর্তনশীল নামগুলি মোড়ানোর জন্য ব্যবহার করতে হবে, যেমন:

<Set>
  <Payload contentType="application/json" variablePrefix="@" variableSuffix="#">
    {"name":"foo", "type":"@variable_name#"}
  </Payload>
</Set>

যদিও Apigee সুপারিশ করে যে আপনি নতুন কোঁকড়া-বন্ধনী সিনট্যাক্স ব্যবহার করুন, পুরানো সিনট্যাক্স এখনও কাজ করে।

বার্তা টেমপ্লেট ফাংশন ব্যবহার করে

এজ ফাংশনের একটি সেট প্রদান করে যা আপনি বার্তা টেমপ্লেটের মধ্যে ব্যবহার করতে পারেন এস্কেপ, এনকোড, হ্যাশ এবং স্ট্রিং ভেরিয়েবল ফরম্যাট করতে।

বার্তা টেমপ্লেট ফাংশন বার্তা টেমপ্লেট ফাংশন রেফারেন্সে বিস্তারিতভাবে বর্ণনা করা হয়েছে।

উদাহরণ: toLowerCase()

একটি স্ট্রিং ভেরিয়েবলকে ছোট হাতের অক্ষরে রূপান্তর করতে বিল্ট-ইন toLowerCase() ফাংশনটি ব্যবহার করুন:

<AssignMessage name="AM-Set-Custom-Response">
    <AssignTo createNew="false" type="response"/>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
    <Set>
        <Headers>
            <Header name="x-h1">Test header: {toLowerCase(foo.bar:FOO)}</Header>
        </Headers>
    </Set>
</AssignMessage>

যদি foo.bar ফ্লো ভেরিয়েবলের সমাধান হয়, তাহলে এর অক্ষরগুলো সব ছোট হাতের হবে। যদি foo.bar অমীমাংসিত হয় তবে ডিফল্ট মান FOO প্রতিস্থাপিত হয় এবং ছোট হাতের অক্ষরে রূপান্তরিত হয়। যেমন:

Test header: foo

উদাহরণ: escapeJSON()

এখানে একটি আকর্ষণীয় ব্যবহারের ক্ষেত্রে রয়েছে: ধরা যাক আপনার ব্যাকএন্ড অ্যাপটি একটি JSON প্রতিক্রিয়া প্রদান করে যাতে বৈধ এস্কেপ অক্ষর রয়েছে। যেমন:

{
      "code": "INVALID",
      "user_message": "Invalid value for \"logonId\" check your input."
}

তারপর, ধরা যাক আপনি একটি কাস্টম পেলোডে ক্লায়েন্ট কলারের কাছে এই বার্তাটি ফেরত দিতে চান৷ এটি করার সাধারণ উপায় হল টার্গেট রেসপন্স পেলোড থেকে বার্তাটি বের করা এবং এটিকে একটি কাস্টম প্রক্সি রেসপন্সে যোগ করতে অ্যাসাইন মেসেজ ব্যবহার করা (অর্থাৎ, এটি ক্লায়েন্টের কাছে ফেরত পাঠান)।

এখানে এক্সট্রাক্ট ভেরিয়েবল নীতি যা user_message তথ্যকে standard.systemMessage নামক একটি ভেরিয়েবলে বের করে দেয়:

<ExtractVariables name="EV-BackendErrorResponse">
    <DisplayName>EV-BackendErrorResponse</DisplayName>
    <JSONPayload>
        <Variable name="standard.systemMessage">
            <JSONPath>$.user_message</JSONPath>
        </Variable>
    </JSONPayload>
</ExtractVariables>

এখন, এখানে একটি সম্পূর্ণ বৈধ অ্যাসাইন মেসেজ নীতি যা রেসপন্স পেলোডে (প্রক্সি রেসপন্স) এক্সট্র্যাক্ট করা ভেরিয়েবল যোগ করে:

<AssignMessage name="AM-SetStandardFaultResponse">
    <DisplayName>AM-SetStandardFaultResponse</DisplayName>
    <Set>
        <Payload contentType="application/json">
           {
              "systemMessage": "{standard.systemMessage}"
           }
        </Payload>
    </Set>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
    <AssignTo createNew="false" transport="http" type="response"/>
</AssignMessage>


দুর্ভাগ্যবশত, একটি সমস্যা আছে. এক্সট্র্যাক্ট ভেরিয়েবল নীতি বার্তার অংশের চারপাশে পালিয়ে যাওয়া উদ্ধৃতি অক্ষরগুলিকে সরিয়ে দিয়েছে। এর মানে হল যে ক্লায়েন্টের কাছে ফিরে আসা প্রতিক্রিয়াটি অবৈধ JSON। এটি স্পষ্টতই আপনার উদ্দেশ্য নয়!

{
    "systemMessage": "Invalid value for "logonId" check your input."
}

এই সমস্যাটি মোকাবেলা করার জন্য, আপনি একটি বার্তা টেমপ্লেট ফাংশন ব্যবহার করতে অ্যাসাইন মেসেজ নীতি পরিবর্তন করতে পারেন যা আপনার জন্য JSON-এর মধ্যে উদ্ধৃতিগুলি এড়িয়ে যায়৷ এই ফাংশন, escapeJSON() , JSON এক্সপ্রেশনের মধ্যে যেকোনও উদ্ধৃতি বা অন্যান্য বিশেষ অক্ষর এড়িয়ে যায়:

<AssignMessage name="AM-SetStandardFaultResponse">
    <DisplayName>AM-SetStandardFaultResponse</DisplayName>
    <Set>
        <Payload contentType="application/json">
           {
              "systemMessage": "{escapeJSON(standard.systemMessage)}"
           }
        </Payload>
    </Set>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
    <AssignTo createNew="false" transport="http" type="response"/>
</AssignMessage>


ফাংশনটি এমবেড করা উদ্ধৃতিগুলিকে এড়িয়ে যায়, যার ফলে বৈধ JSON হয়, যা আপনি ঠিক যা চেয়েছিলেন:

{
      "systemMessage": "Invalid value for \"logonId\" check your input.",
}

একটি বার্তা টেমপ্লেট হল একটি গতিশীল স্ট্রিং প্রতিস্থাপন বৈশিষ্ট্য যা আপনি নির্দিষ্ট নীতি এবং TargetEndpoint সংজ্ঞাগুলিতে ব্যবহার করতে পারেন৷ মেসেজ টেমপ্লেট ফাংশন আপনাকে একটি মেসেজ টেমপ্লেটের মধ্যে হ্যাশিং, স্ট্রিং ম্যানিপুলেশন, ক্যারেক্টার এস্কেপিং এবং অন্যান্যের মতো দরকারী ক্রিয়াকলাপ সম্পাদন করতে দেয়।

উদাহরণস্বরূপ, নিম্নলিখিত AssignMessage নীতিতে, toLowerCase() ফাংশনটি একটি বার্তা টেমপ্লেটে ব্যবহৃত হয়:

<AssignMessage name="AM-Set-Custom-Response">
    <AssignTo createNew="false" type="response"/>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
    <Set>
       <Headers>
         <Header name="x-h1">Test header: {Hello, toLowerCase(user.name)}</Header>
       </Headers>
    </Set>
</AssignMessage>

এই বিষয় বার্তা টেমপ্লেট ফাংশন, তাদের আর্গুমেন্ট, এবং আউটপুট বর্ণনা করে। এই বিষয়টি অনুমান করে যে আপনি বার্তা টেমপ্লেট এবং সেগুলি ব্যবহার করা প্রসঙ্গের সাথে পরিচিত।

হ্যাশ ফাংশন

একটি হ্যাশ মান গণনা করুন এবং সেই হ্যাশের স্ট্রিং উপস্থাপনা ফেরত দিন।

হেক্সাডেসিমেল হ্যাশ ফাংশন

একটি হ্যাশ মান গণনা করুন এবং একটি হেক্সাডেসিমেল সংখ্যা হিসাবে সেই হ্যাশের স্ট্রিং উপস্থাপনা প্রদান করুন।

সিনট্যাক্স

ফাংশন বর্ণনা
md5Hex(string) হেক্সাডেসিমেল সংখ্যা হিসাবে প্রকাশ করা একটি MD5 হ্যাশ গণনা করে।
sha1Hex(string) হেক্সাডেসিমেল সংখ্যা হিসাবে প্রকাশ করা একটি SHA1 হ্যাশ গণনা করে।
sha256Hex(string) হেক্সাডেসিমেল সংখ্যা হিসাবে প্রকাশ করা একটি SHA256 হ্যাশ গণনা করে।
sha384Hex(string) হেক্সাডেসিমেল সংখ্যা হিসাবে প্রকাশ করা একটি SHA384 হ্যাশ গণনা করে।
sha512Hex(string) হেক্সাডেসিমেল সংখ্যা হিসাবে প্রকাশ করা একটি SHA512 হ্যাশ গণনা করে।

যুক্তি

স্ট্রিং - হ্যাশ ফাংশনগুলি একটি একক স্ট্রিং আর্গুমেন্ট নেয় যার উপর হ্যাশ অ্যালগরিদম গণনা করা হয়। আর্গুমেন্ট একটি আক্ষরিক স্ট্রিং বা একটি স্ট্রিং ফ্লো ভেরিয়েবল হতে পারে।

উদাহরণ

ফাংশন কল:

sha256Hex('abc')

ফলাফল:

ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad

ফাংশন কল:

var str = 'abc';
sha256Hex(str)

ফলাফল:

ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad

বেস 64 হ্যাশ ফাংশন

একটি হ্যাশ মান গণনা করুন এবং একটি Base64 এনকোডেড মান হিসাবে সেই হ্যাশের স্ট্রিং উপস্থাপনা ফেরত দিন।

সিনট্যাক্স

ফাংশন বর্ণনা
md5Base64(string) বেস64 এনকোডেড মান হিসাবে প্রকাশ করা একটি MD5 হ্যাশ গণনা করে।
sha1Base64(string) বেস64 এনকোডেড মান হিসাবে প্রকাশ করা একটি SHA1 হ্যাশ গণনা করে।
sha256Base64(string) একটি Base64 এনকোডেড মান হিসাবে প্রকাশ করা একটি SHA256 হ্যাশ গণনা করে।
sha384Base64(string) একটি Base64 এনকোডেড ভ্যালুয়ার হিসাবে প্রকাশ করা একটি SHA384 হ্যাশ গণনা করে।
sha512Base64(string) একটি Base64 এনকোডেড মান হিসাবে প্রকাশ করা একটি SHA512 হ্যাশ গণনা করে।

যুক্তি

স্ট্রিং - হ্যাশ ফাংশনগুলি একটি একক স্ট্রিং আর্গুমেন্ট নেয় যার উপর হ্যাশ অ্যালগরিদম গণনা করা হয়। আর্গুমেন্ট একটি আক্ষরিক স্ট্রিং বা একটি স্ট্রিং ফ্লো ভেরিয়েবল হতে পারে।

উদাহরণ

ফাংশন কল:

sha256Base64('abc')

ফলাফল:

ungWv48Bz+pBQUDeXa4iI7ADYaOWF3qctBD/YfIAFa0=

ফাংশন কল:

var str = 'abc';
sha256Base64(str)

ফলাফল:

ungWv48Bz+pBQUDeXa4iI7ADYaOWF3qctBD/YfIAFa0=

স্ট্রিং ফাংশন

একটি বার্তা টেমপ্লেটের মধ্যে স্ট্রিংগুলিতে ক্রিয়াকলাপ সম্পাদন করুন।

বেস64 এনকোডিং ফাংশন

Base64 এনকোডিং স্কিম ব্যবহার করে স্ট্রিং এনকোড এবং ডিকোড করুন।

সিনট্যাক্স

ফাংশন বর্ণনা
encodeBase64(string) Base64 এনকোডিং ব্যবহার করে একটি স্ট্রিং এনকোড করে। উদাহরণস্বরূপ: encodeBase64( value ) , যখন value abc ধরে রাখে, ফাংশনটি স্ট্রিংটি প্রদান করে: YWJj
decodeBase64(string) একটি Base64 এনকোডেড স্ট্রিং ডিকোড করে। উদাহরণস্বরূপ: decodeBase64( value ) যখন value aGVsbG8sIHdvcmxk ধারণ করে, ফাংশনটি hello, world স্ট্রিং প্রদান করে।

যুক্তি

স্ট্রিং - এনকোড বা ডিকোড করার জন্য স্ট্রিং। একটি আক্ষরিক স্ট্রিং বা একটি স্ট্রিং ফ্লো ভেরিয়েবল হতে পারে।

উদাহরণ

<AssignMessage name="AM-Set-Custom-Response">
    <AssignTo createNew="false" type="response"/>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
    <Set>
       <Headers>
         <Header name="x-h1">Hello, {decodeBase64('d29ybGQK')}</Header>
       </Headers>
    </Set>
</AssignMessage>

কেস রূপান্তর ফাংশন

একটি স্ট্রিংকে সমস্ত বড় হাতের বা সমস্ত ছোট হাতের অক্ষরে রূপান্তর করুন।

সিনট্যাক্স

ফাংশন বর্ণনা
toUpperCase(string) একটি স্ট্রিংকে বড় হাতের অক্ষরে রূপান্তর করুন।
toLowerCase(string) একটি স্ট্রিংকে ছোট হাতের অক্ষরে রূপান্তর করুন।


যুক্তি

স্ট্রিং - রূপান্তর করার জন্য স্ট্রিং। একটি আক্ষরিক স্ট্রিং বা একটি স্ট্রিং ফ্লো ভেরিয়েবল হতে পারে।

উদাহরণ

<AssignMessage name="AM-Set-Custom-Response">
    <AssignTo createNew="false" type="response"/>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
    <Set>
       <Headers>
         <Header name="x-h1">Hello, {toLowerCase(user.name)}</Header>
       </Headers>
    </Set>
</AssignMessage>

সাবস্ট্রিং ফাংশন

নির্দিষ্ট স্ট্রিং এর শুরু এবং শেষ সূচকের মধ্যে অক্ষর প্রদান করে।

সিনট্যাক্স

substring(str,start_index,end_index)

যুক্তি

  • str - একটি আক্ষরিক স্ট্রিং বা স্ট্রিং ফ্লো ভেরিয়েবল।
  • start_index - স্ট্রিং এর মধ্যে শুরু সূচক।
  • end_index - (ঐচ্ছিক) স্ট্রিং এ শেষ সূচক। যদি সরবরাহ না করা হয়, শেষ সূচকটি স্ট্রিংয়ের শেষ।

উদাহরণ

নিম্নলিখিত উদাহরণগুলির জন্য, ধরুন যে এই প্রবাহ ভেরিয়েবলগুলি বিদ্যমান:

পরিবর্তনশীল নাম মান
alpha ABCDEFGHIJKLMNOPQRSTUVWXYZ
seven 7


এই ভেরিয়েবলগুলি ব্যবহার করে এমন ফাংশন কলগুলির ফলাফল এখানে রয়েছে:

বার্তা টেমপ্লেট অভিব্যক্তি ফলাফল
{substring(alpha,22)} WXYZ
hello {substring(alpha,22)} hello WXYZ
{substring(alpha,-4)} WXYZ
{substring(alpha,-8,-4)} STUV
{substring(alpha,0,10)} ABCDEFGHIJ
{substring(alpha,0,seven)} ABCDEFG

সমস্ত ফাংশন প্রতিস্থাপন করুন

একটি স্ট্রিং-এ একটি রেগুলার এক্সপ্রেশন প্রয়োগ করে এবং যেকোনো মিলের জন্য, ম্যাচটিকে প্রতিস্থাপন মান দিয়ে প্রতিস্থাপন করে।

সিনট্যাক্স

replaceAll(string,regex,value)

যুক্তি

  • স্ট্রিং - একটি আক্ষরিক স্ট্রিং বা স্ট্রিং ফ্লো ভেরিয়েবল যাতে প্রতিস্থাপন করা যায়।
  • regex - একটি নিয়মিত অভিব্যক্তি।
  • মান - স্ট্রিং এর মধ্যে সমস্ত রেজেক্স মিল প্রতিস্থাপন করার মান।

উদাহরণ

নিম্নলিখিত উদাহরণগুলির জন্য, ধরুন এই প্রবাহ ভেরিয়েবলগুলি বিদ্যমান:

পরিবর্তনশীল নাম মান
header Bearer ABCDEFGHIJKLMNOPQRSTUVWXYZ-9993
regex1 "^Bearer "
replacement "TOKEN: "

এই ভেরিয়েবলগুলি ব্যবহার করে এমন ফাংশন কলগুলির ফলাফল এখানে রয়েছে:

বার্তা টেমপ্লেট অভিব্যক্তি ফলাফল
{replaceAll(header,"9993",'')} Bearer ABCDEFGHIJKLMNOPQRSTUVWXYZ-
{replaceAll(header,regex1,'')} ABCDEFGHIJKLMNOPQRSTUVWXYZ-9993
{replaceAll(header,regex1,replacement)} TOKEN: ABCDEFGHIJKLMNOPQRSTUVWXYZ-9993

প্রথম ফাংশন প্রতিস্থাপন করুন

স্ট্রিং-এ নির্দিষ্ট রেগুলার এক্সপ্রেশন ম্যাচের শুধুমাত্র প্রথম ঘটনাকে প্রতিস্থাপন করে।

সিনট্যাক্স

replaceFirst(string,regex,value)

যুক্তি

  • স্ট্রিং - একটি আক্ষরিক স্ট্রিং বা স্ট্রিং ফ্লো ভেরিয়েবল যাতে প্রতিস্থাপন করা যায়।
  • regex - একটি নিয়মিত অভিব্যক্তি।
  • মান - রেজেক্স প্রতিস্থাপনের মান স্ট্রিংয়ের মধ্যে মেলে।

ক্যারেক্টার এস্কেপ এবং এনকোডিং ফাংশন

একটি স্ট্রিং-এ বিশেষ অক্ষরগুলিকে এস্কেপ বা এনকোড করার ফাংশন৷

সিনট্যাক্স

ফাংশন বর্ণনা
escapeJSON(স্ট্রিং) ব্যাকস্ল্যাশ-এস্কেপ ডবল-কোট।
escapeXML(স্ট্রিং) সংশ্লিষ্ট XML সত্তার সাথে কোণ বন্ধনী, অ্যাপোস্ট্রফি, ডাবল-কোট এবং অ্যাম্পারস্যান্ড প্রতিস্থাপন করে। XML 1.0 নথির জন্য ব্যবহার করুন।

escapeXML11(স্ট্রিং) escapeXML এর মতোই কাজ করে, কিন্তু XML v1.1 সত্তার জন্য। নিচে ব্যবহার নোট দেখুন.
এনকোডএইচটিএমএল(স্ট্রিং) অ্যাপোস্ট্রফি, কোণ বন্ধনী এবং অ্যাম্পারস্যান্ডকে এনকোড করে।

যুক্তি

স্ট্রিং - পালানোর জন্য স্ট্রিং। একটি আক্ষরিক স্ট্রিং বা একটি স্ট্রিং ফ্লো ভেরিয়েবল হতে পারে।

ব্যবহারের নোট

XML 1.1 নির্দিষ্ট নিয়ন্ত্রণ অক্ষর উপস্থাপন করতে পারে, কিন্তু এটি নাল বাইট বা আনপেয়ারড ইউনিকোড সারোগেট কোডপয়েন্টগুলিকে উপস্থাপন করতে পারে না, এমনকি পালিয়ে যাওয়ার পরেও। escapeXML11() ফাংশন এমন অক্ষরগুলিকে সরিয়ে দেয় যেগুলি নিম্নলিখিত রেঞ্জে ফিট করে না:

[#x1-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]

escapeXML11() ফাংশন নিম্নলিখিত রেঞ্জের অক্ষরগুলিকে এস্কেপ করে:

[#x1-#x8] | [#xB-#xC] | [#xE-#x1F] | [#x7F-#x84] | [#x86-#x9F]

উদাহরণ

অনুমান করুন খাদ্য নামক একটি প্রবাহ পরিবর্তনশীল এই মানটির সাথে বিদ্যমান: "bread" & "butter" । তারপর, ফাংশন:

{escapeHTML(food)}

ফলাফল:

&quot;bread&quot; &amp; &quot;butter&quot;

সময় বিন্যাস ফাংশন

স্থানীয় সময় অঞ্চলে বা ইউটিসি-তে ফর্ম্যাট করা সময়ের একটি স্ট্রিং উপস্থাপনা ফেরত দিন।

সিনট্যাক্স

ফাংশন বর্ণনা
timeFormat(format,str) স্থানীয় সময় অঞ্চলে ফর্ম্যাট করা তারিখ প্রদান করে।
timeFormatMs(format,str) স্থানীয় সময় অঞ্চলে ফর্ম্যাট করা তারিখ প্রদান করে।
timeFormatUTC(format,str) UTC-তে ফর্ম্যাট করা তারিখ ফেরত দেয়।
timeFormatUTCMs(format,str) UTC-তে ফর্ম্যাট করা তারিখ ফেরত দেয়।

যুক্তি

  • বিন্যাস - একটি তারিখ/সময় বিন্যাস স্ট্রিং। একটি আক্ষরিক স্ট্রিং বা একটি স্ট্রিং ভেরিয়েবল হতে পারে।
  • str - একটি স্ট্রিং বা স্ট্রিং ফ্লো ভেরিয়েবল যেখানে একটি সময় মান রয়েছে। টাইমফরমেটএম-এর জন্য মানটি সেকেন্ড-সেকেন্ড-এপক বা মিলিসেকেন্ড-সিন্স-ইপোক হতে পারে।

উদাহরণ

নিম্নলিখিত মানগুলি অনুমান করুন এবং অনুমান করুন স্থানীয় সময় অঞ্চলটি প্রশান্ত মহাসাগরীয়:

  • epoch_time_ms = 1494390266000
  • epoch_time = 1494390266
  • fmt1 = yyyy-MM-dd
  • fmt2 = yyyy-MM-dd HH-mm-ss
  • fmt3 = yyyyMMddHHmmss

ফাংশন নিম্নলিখিত ফলাফল প্রদান করে:

    ফাংশন আউটপুট
    timeFormatMs(fmt1,epoch_time_ms) 2017-05-09
    timeFormat(fmt1,epoch_time) 2017-05-09
    timeFormat(fmt2,epoch_time) 2017-05-09 21:24:26
    timeFormat(fmt3,epoch_time) 20170509212426
    timeFormatUTC(fmt1,epoch_time) 2017-05-10
    timeFormatUTC(fmt2,epoch_time) 2017-05-10 04:24:26
    timeFormatUTC(fmt3,epoch_time) 20170510042426

    HMAC গণনা ফাংশন

    HMAC গণনা ফাংশন একটি HMAC গণনা করার জন্য HMAC নীতি ব্যবহার করার বিকল্প প্রদান করে। একটি ক্যাসকেডেড HMAC গণনা সম্পাদন করার সময় ফাংশনগুলি সুবিধাজনক, যেমন একটি HMAC-এর আউটপুট দ্বিতীয় HMAC-এর কী হিসাবে ব্যবহৃত হয়৷

    সিনট্যাক্স

    ফাংশন বর্ণনা
    hmacSha224(key,valueToSign[,keyencoding[,outputencoding]]) SHA-224 হ্যাশ ফাংশন সহ একটি HMAC গণনা করে৷
    hmacSha256(key,valueToSign[,keyencoding[,outputencoding]]) SHA-256 হ্যাশ ফাংশন সহ একটি HMAC এনকোড করে৷
    hmacSha384(key,valueToSign[,keyencoding[,outputencoding]]) SHA-384 হ্যাশ ফাংশন সহ একটি HMAC এনকোড করে৷
    hmacSha512(key,valueToSign[,keyencoding[,outputencoding]]) SHA-512 হ্যাশ ফাংশন সহ একটি HMAC এনকোড করে৷
    hmacMd5(key,valueToSign[,keyencoding[,outputencoding]]) MD5 হ্যাশ ফাংশন সহ একটি HMAC এনকোড করে।
    hmacSha1(key, valueToSign [,keyencoding[,outputencoding]]) SHA-1 এনক্রিপশন অ্যালগরিদম সহ একটি HMAC এনকোড করে৷

    যুক্তি

    • কী - (প্রয়োজনীয়) গোপন কী নির্দিষ্ট করে, একটি স্ট্রিং হিসাবে এনকোড করা, HMAC গণনা করতে ব্যবহৃত।
    • valueToSign - (প্রয়োজনীয়) স্বাক্ষর করার জন্য বার্তাটি নির্দিষ্ট করে। এটি একটি স্ট্রিং হওয়া উচিত।
    • কীনকোডিং - (ঐচ্ছিক) গোপন কী স্ট্রিংটি এই নির্দিষ্ট এনকোডিং অনুযায়ী ডিকোড করা হবে। বৈধ মান: hex , base16 , base64 , utf-8 । ডিফল্ট: utf-8
    • আউটপুটেনকোডিং - (ঐচ্ছিক) আউটপুটের জন্য ব্যবহার করার জন্য এনকোডিং অ্যালগরিদম নির্দিষ্ট করে। বৈধ মান: hex , base16 , base64 . মানগুলি কেস সংবেদনশীল; hex এবং base16 সমার্থক শব্দ। ডিফল্ট: base64

    উদাহরণ

    এই উদাহরণটি একটি HMAC-256 গণনা করার জন্য AssignMessage নীতি ব্যবহার করে এবং এটি একটি ফ্লো ভেরিয়েবলে বরাদ্দ করে:

    <AssignMessage name='AM-HMAC-1'>
      <AssignVariable>
        <Name>valueToSign</Name>
        <Template>{request.header.apikey}.{request.header.date}</Template>
      </AssignVariable>
      <AssignVariable>
        <Name>hmac_value</Name>
        <Template>{hmacSha256(private.secretkey,valueToSign)}</Template>
      </AssignVariable>
    </AssignMessage>

    এই উদাহরণটি ব্যাখ্যা করে যে কীভাবে একটি ক্যাসকেডিং HMAC তৈরি করতে হয় যা AWS স্বাক্ষর v4 স্বাক্ষর প্রক্রিয়ার সাথে ব্যবহার করা যেতে পারে। উদাহরণটি AWS স্বাক্ষর v4 এর জন্য একটি স্বাক্ষর গণনা করতে ব্যবহৃত ক্যাসকেডেড HMAC-এর পাঁচটি স্তর তৈরি করতে AssignMessage নীতি ব্যবহার করে:

    <AssignMessage name='AM-HMAC-AWS-1'>
      <!-- 1 -->
      <AssignVariable>
        <Name>DateValue</Name>
        <Template>{timeFormatUTCMs('yyyyMMdd',system.timestamp)}</Template>
      </AssignVariable>
      <!-- 2 -->
      <AssignVariable>
        <Name>FirstKey</Name>
        <Template>AWS4{private.secret_aws_access_key}</Template>
      </AssignVariable>
      <!-- 3 -->
      <AssignVariable>
        <Name>DateKey</Name>
        <Template>{hmacSha256(FirstKey,DateValue,'utf-8','base16')}</Template>
      </AssignVariable>
      <!-- 4 -->
      <AssignVariable>
        <Name>DateRegionKey</Name>
        <Template>{hmacSha256(DateKey,aws_region,'base16','base16')}</Template>
      </AssignVariable>
      <!-- 5 -->
      <AssignVariable>
        <Name>DateRegionServiceKey</Name>
        <Template>{hmacSha256(DateRegionKey,aws_service,'base16','base16')}</Template>
      </AssignVariable>
      <!-- 6 -->
      <AssignVariable>
        <Name>SigningKey</Name>
        <Template>{hmacSha256(DateRegionServiceKey,'aws4_request','base16','base16')}</Template>
      </AssignVariable>
      <!-- 7 -->
      <AssignVariable>
        <Name>aws4_hmac_value</Name>
        <Template>{hmacSha256(SigningKey,stringToSign,'base16','base16')}</Template>
      </AssignVariable>
    </AssignMessage>

    অন্যান্য ফাংশন

    UUID ফাংশন তৈরি করুন

    একটি UUID তৈরি করে এবং ফেরত দেয়।

    সিনট্যাক্স

    createUuid()

    যুক্তি

    কোনোটিই নয়।

    উদাহরণ

    { createUuid()}

    নমুনা ফলাফল:

    ec3ca9be-d1e1-4ef4-aee4-4a58f3130db8

    এলোমেলো দীর্ঘ জেনারেটর ফাংশন

    একটি এলোমেলো দীর্ঘ পূর্ণসংখ্যা প্রদান করে।

    সিনট্যাক্স

    randomLong(args)

    যুক্তি

    • যদি কোন আর্গুমেন্ট নির্দিষ্ট করা না থাকে, তাহলে ফাংশনটি জাভা সিকিউরর্যান্ডম ক্লাস দ্বারা গণনা করা একটি এলোমেলো দীর্ঘ পূর্ণসংখ্যা প্রদান করে।
    • একটি যুক্তি উপস্থিত থাকলে, এটি গণনার সর্বনিম্ন মান হিসাবে বিবেচিত হয়।
    • যদি একটি দ্বিতীয় যুক্তি উপস্থিত থাকে, তাহলে এটি গণনার সর্বাধিক মান হিসাবে বিবেচিত হয়।

    উদাহরণ

    {random()}

    এই মত কিছু ফলাফল:

    5211338197474042880

    রেজেক্স টেক্সট জেনারেটর

    একটি প্রদত্ত রেগুলার এক্সপ্রেশনের সাথে মেলে এমন একটি টেক্সট স্ট্রিং তৈরি করুন।

    সিনট্যাক্স

    xeger(regex)

    যুক্তি

    regex - একটি নিয়মিত অভিব্যক্তি।

    উদাহরণ

    এই উদাহরণটি কোন শূন্য ছাড়া একটি সাত অঙ্কের স্ট্রিং তৈরি করে:

    xeger('[1-9]{7}')

    উদাহরণ ফলাফল:

    9857253

    নাল-কোলেসিং ফাংশন

    firstnonnull() ফাংশন বাম-সবচেয়ে, নন-নাল আর্গুমেন্টের মান প্রদান করে।

    সিনট্যাক্স

    firstnonnull(var1,varn)

    যুক্তি

    var1 - একটি প্রসঙ্গ পরিবর্তনশীল।

    var n - এক বা একাধিক প্রসঙ্গ ভেরিয়েবল। আপনি একটি ফলব্যাক মান প্রদান করতে একটি স্ট্রিং-এ ডান-সবচেয়ে আর্গুমেন্ট সেট করতে পারেন (একটি মান যা সেট করা হবে যদি বাম হাতের কোনো আর্গুমেন্ট সেট না থাকে)।

    উদাহরণ

    নিম্নলিখিত টেবিলটি কীভাবে ফাংশনটি ব্যবহার করতে হয় তা ব্যাখ্যা করে:

    টেমপ্লেট Var1 Var2 Var3 ফলাফল
    {firstnonnull(var1,var2)} সেট করা হয়নি foo N/A foo
    {firstnonnull(var1,var2)} foo bar N/A foo
    {firstnonnull(var1,var2)} foo সেট করা হয়নি N/A foo
    {firstnonnull(var1,var2,var3)} foo bar baz foo
    {firstnonnull(var1,var2,var3)} সেট করা হয়নি bar baz bar
    {firstnonnull(var1,var2,var3)} সেট করা হয়নি সেট করা হয়নি baz baz
    {firstnonnull(var1,var2,var3)} সেট করা হয়নি সেট করা হয়নি সেট করা হয়নি null
    {firstnonnull(var1)} সেট করা হয়নি N/A N/A null
    {firstnonnull(var1)} foo N/A N/A foo
    {firstnonnull(var1,var2)} "" bar N/A ""
    {firstnonnull(var1,var2,'fallback value')} null null fallback value fallback value

    XPath ফাংশন

    একটি XML ভেরিয়েবলে একটি XPath অভিব্যক্তি প্রয়োগ করে।

    সিনট্যাক্স

    xpath(xpath_expression,xml_string,[datatype])

    যুক্তি

    xpath_expression - একটি XPath এক্সপ্রেশন।

    xml_string - একটি ফ্লো ভেরিয়েবল বা XML ধারণকারী স্ট্রিং।

    ডেটাটাইপ - (ঐচ্ছিক) কোয়েরির পছন্দসই রিটার্ন প্রকার নির্দিষ্ট করে। এটি নোডসেট, নোড, সংখ্যা, বুলিয়ান, স্ট্রিং হতে পারে। এটা নোডসেট ডিফল্ট. ডিফল্ট সাধারণত সঠিক পছন্দ হয়.

    উদাহরণ 1

    ধরুন এই প্রসঙ্গ ভেরিয়েবলগুলি একটি XML স্ট্রিং এবং একটি XPath অভিব্যক্তিকে সংজ্ঞায়িত করে:

    xml = "<tag><tagid>250397</tagid><readerid>1</readerid><rssi>74</rssi><date>2019/06/15</date></tag>"
    xpath = "/tag/tagid"

    এবং xpath() ফাংশনটি একটি AssignMessage নীতিতে ব্যবহার করা হয়, নিম্নরূপ:

    <AssignMessage>
      <AssignVariable>
        <Name>extracted_tag</Name>
        <Template>{xpath(xpath,xml)}</Template>
      </AssignVariable>
    </AssignMessage><

    ফাংশন <tagid>250397</tagid> মান প্রদান করে। এই মানটি extracted_tag ​​নামক কনটেক্সট ভেরিয়েবলে স্থাপন করা হয়।

    উদাহরণ 2

    আপনি যদি শুধুমাত্র নোডের মান চান তবে text() ফাংশনটি ব্যবহার করুন, নিম্নরূপ:

    <AssignMessage>
      <AssignVariable>
        <Name>extracted_tag</Name>
        <Template>{xpath('/tag/tagid/text()',xml)}</Template>
      </AssignVariable>
    </AssignMessage>

    এই অপারেশনের ফলস্বরূপ, প্রসঙ্গ পরিবর্তনশীল extracted_tag 250397 এ সেট করা হয়েছে

    যদি একাধিক নোড নির্বাচন করা হয়, তাহলে xpath() এর ফলাফল হল নির্বাচনের সমস্ত মান, একটি কমা দিয়ে সংযুক্ত।

    উদাহরণ 3: XML নেমস্পেস

    একটি নামস্থান নির্দিষ্ট করতে, অতিরিক্ত পরামিতি যুক্ত করুন, প্রতিটি একটি স্ট্রিং যা prefix:namespaceuri । উদাহরণস্বরূপ, একটি xpath() ফাংশন যা একটি SOAP বডির চাইল্ড উপাদান নির্বাচন করে তা এইরকম হতে পারে:

    <AssignMessage>
      <AssignVariable>
        <Name>soapns</Name>
        <Value>soap:http://schemas.xmlsoap.org/soap/envelope/</Value>
      </AssignVariable>
      <AssignVariable>
        <Name>xpathexpression</Name>
        <Value>/soap:Envelope/soap:Body/*</Value>
      </AssignVariable>
      <AssignVariable>
        <Name>extracted_element</Name>
        <Template>{xpath(xpathexpression,xml,soapns)}</Template>
      </AssignVariable>
    </AssignMessage>

    অতিরিক্ত নামস্থানের জন্য, আপনি xpath() ফাংশনে 10টি পর্যন্ত অতিরিক্ত প্যারামিটার যোগ করতে পারেন।

    আপনি একক উদ্ধৃতি দ্বারা বেষ্টিত একটি স্ট্রিং হিসাবে একটি সাধারণ XPath অভিব্যক্তি নির্দিষ্ট করতে পারেন:

    {xpath('/tag/tagid/text()',xml)}

    যদি XPath এক্সপ্রেশনে নেমস্পেস উপসর্গ (এবং কোলন) অন্তর্ভুক্ত থাকে তবে আপনাকে সেই XPath এক্সপ্রেশনটিকে একটি ভেরিয়েবলে বরাদ্দ করতে হবে এবং এক্সপ্রেশনের পরিবর্তে পরিবর্তনশীল নামটি নির্দিষ্ট করতে হবে।

    {xpath(xpathexpression,xml,ns1)}

    উদাহরণ 4: একটি পছন্দসই রিটার্ন টাইপ নির্দিষ্ট করা

    xpath() ফাংশনে পাস করা ঐচ্ছিক তৃতীয় প্যারামিটারটি কোয়েরির পছন্দসই রিটার্ন প্রকার নির্দিষ্ট করে।

    কিছু XPath প্রশ্ন সাংখ্যিক বা বুলিয়ান মান প্রদান করতে পারে। উদাহরণস্বরূপ count() ফাংশন একটি সংখ্যা প্রদান করে। এটি একটি বৈধ XPath প্রশ্ন:

    count(//Record/Fields/Pair)

    এই বৈধ প্রশ্নটি একটি বুলিয়ান প্রদান করে:

    count(//Record/Fields/Pair)>0

    এই ক্ষেত্রে xpath() ফাংশনটি একটি তৃতীয় প্যারামিটার সহ যে প্রকারটি নির্দিষ্ট করে:

    {xpath(expression,xml,'number')}
    {xpath(expression,xml,'boolean')}

    যদি তৃতীয় প্যারামিটারে একটি কোলন থাকে, তাহলে এটি একটি নেমস্পেস আর্গুমেন্ট হিসাবে ব্যাখ্যা করা হয়। যদি না হয়, তাহলে এটি পছন্দসই রিটার্ন টাইপ হিসাবে বিবেচিত হয়। এই ক্ষেত্রে, যদি তৃতীয় প্যারামিটারটি বৈধ মানের একটি না হয় (কেস উপেক্ষা করে), xpath() ফাংশনটি একটি নোডসেট ফেরত দেওয়ার জন্য ডিফল্ট হয়।

    JSON পাথ ফাংশন

    একটি JSON ভেরিয়েবলে একটি JSON পাথ এক্সপ্রেশন প্রয়োগ করে।

    সিনট্যাক্স

    jsonPath(json-path,json-var,want-array)

    যুক্তি

    • (প্রয়োজনীয়) json-path : (স্ট্রিং) একটি JSON পাথ এক্সপ্রেশন।
    • (প্রয়োজনীয়) json-var : (স্ট্রিং) একটি ফ্লো ভেরিয়েবল বা JSON ধারণকারী স্ট্রিং।
    • (ঐচ্ছিক) want-array : (স্ট্রিং) যদি এই প্যারামিটারটি 'true' তে সেট করা হয় এবং ফলাফল সেটটি যদি একটি অ্যারে হয়, তবে সমস্ত অ্যারের উপাদানগুলি ফেরত দেওয়া হয়। যদি অন্য কোনো মান সেট করা হয় বা যদি এই প্যারামিটারটি বাদ দেওয়া হয়, তাহলে ফলাফল সেট অ্যারের শুধুমাত্র জিরোথ উপাদান প্রদান করা হয়। যদি ফলাফল সেট একটি অ্যারে না হয়, তাহলে এই তৃতীয় প্যারামিটার, যদি উপস্থিত থাকে, উপেক্ষা করা হয়।

    উদাহরণ 1

    যদি এটি বার্তা টেমপ্লেট হয়:

    The address is {jsonPath($.results[?(@.name == 'Mae West')].address.line1,the_json_variable)}

    এবং_ the_json_variable মধ্যে রয়েছে:

    {
      "results" : [
        {
          "address" : {
            "line1" : "18250 142ND AV NE",
            "city" : "Woodinville",
            "state" : "Washington",
            "zip" : "98072"
          },
          "name" : "Fred Meyer"
        },
        {
          "address" : {
            "line1" : "1060 West Addison Street",
            "city" : "Chicago",
            "state" : "Illinois",
            "zip" : "60613"
          },
          "name" : "Mae West"
        }
      ]
    } 

    ফাংশনের ফলাফল হল:

    The address is 1060 West Addison Street

    মনে রাখবেন যে এই ক্ষেত্রে, ফলাফল সেটটি একটি একক উপাদান (উপাদানের একটি অ্যারে নয়)। ফলাফল সেট একটি অ্যারে হলে, তারপর শুধুমাত্র অ্যারের জিরোথ উপাদান ফিরে আসবে। সম্পূর্ণ অ্যারে ফেরাতে, তৃতীয় প্যারামিটার হিসাবে 'true' সহ ফাংশনটিকে কল করুন, যেমনটি পরবর্তী উদাহরণে দেখানো হয়েছে।

    উদাহরণ 2

    যদি এটি বার্তা টেমপ্লেট হয়:

    {jsonPath($.config.quota[?(@.operation=='ManageOrder')].appname,the_json_variable,'true')}

    এবং_ the_json_variable মধ্যে রয়েছে:

    {
      "results" : [
         {
          "config": {
            "quota": [
              {
                "appname": "A",
                "operation": "ManageOrder",
                "value": "900"
              },
              {
                "appname": "B",
                "operation": "ManageOrder",
                "value": "1000"
              },
              {
                "appname": "B",
                "operation": "SubmitOrder",
                "value": "800"
              }
            ]
          }
        }
      ]
    } 

    ফাংশনের ফলাফল হল:

    ['A','B']
    ,

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

    এই বিষয়টি আলোচনা করে কিভাবে API প্রক্সিতে বার্তা টেমপ্লেট ব্যবহার করতে হয় এবং একটি ফাংশন রেফারেন্স প্রদান করে।

    একটি বার্তা টেমপ্লেট কি?

    একটি বার্তা টেমপ্লেট আপনাকে নির্দিষ্ট নীতি এবং TargetEndpoint উপাদানগুলিতে পরিবর্তনশীল স্ট্রিং প্রতিস্থাপন করার অনুমতি দেয়। এই বৈশিষ্ট্যটি, যেখানে সমর্থিত, আপনাকে প্রক্সি চালানোর সময় গতিশীলভাবে স্ট্রিংগুলিকে পপুলেট করতে দেয়।

    আপনি একটি বার্তা টেমপ্লেটে ফ্লো ভেরিয়েবল রেফারেন্স এবং আক্ষরিক পাঠ্যের যেকোনো সমন্বয় অন্তর্ভুক্ত করতে পারেন। ফ্লো ভেরিয়েবলের নামগুলি অবশ্যই কোঁকড়া ধনুর্বন্ধনীতে আবদ্ধ থাকতে হবে, যখন কোঁকড়া বন্ধনীতে নয় এমন যেকোন পাঠ্য আক্ষরিক পাঠ্য হিসাবে আউটপুট হবে।

    এছাড়াও দেখুন আপনি কোথায় বার্তা টেমপ্লেট ব্যবহার করতে পারেন?

    উদাহরণ

    উদাহরণস্বরূপ, বার্তা বরাদ্দ নীতি আপনাকে <Payload> উপাদানের মধ্যে একটি বার্তা টেমপ্লেট ব্যবহার করতে দেয়:

    <AssignMessage name="set-dynamic-content">
      <AssignTo createNew="false" type="response"></AssignTo>
      <Set>
        <Payload contentType="application/json">
          {"name":"Alert", "message":"You entered an invalid username: {user.name}"}
        </Payload>
      </Set>
      <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    </AssignMessage>

    উপরের উদাহরণে, ফ্লো ভেরিয়েবল user.name এর মান (কোঁকড়া ধনুর্বন্ধনীতে) মূল্যায়ন করা হবে এবং রানটাইমে পেলোড স্ট্রিংয়ে প্রতিস্থাপিত হবে। সুতরাং, উদাহরণস্বরূপ, যদি user.name=jdoe , তাহলে পেলোডের ফলে বার্তা আউটপুট হবে: You entered an invalid username: jdoe । যদি ভেরিয়েবলটি সমাধান করা না যায়, তাহলে একটি খালি স্ট্রিং হল আউটপুট।

    উদাহরণ

    যখন একটি কোটা অতিক্রম করা হয়, এটি কলকারীকে একটি অর্থপূর্ণ বার্তা ফেরত দেওয়া একটি ভাল অভ্যাস। কোটা লঙ্ঘন সম্পর্কে কলকারীকে তথ্য দেওয়ার জন্য আউটপুট প্রদান করতে এই প্যাটার্নটি সাধারণত একটি "ফল্ট রুল" এর সাথে ব্যবহার করা হয়। নিম্নলিখিত অ্যাসাইন মেসেজ নীতিতে, বার্তা টেমপ্লেটগুলি বিভিন্ন XML উপাদানে গতিশীলভাবে কোটা তথ্য পূরণ করতে ব্যবহৃত হয়:

    <AssignMessage name='AM-QuotaViolationMessage'>
      <Description>message for quota exceeded</Description>
      <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
      <Set>
        <Headers>
          <Header name='X-Quota-Reset'>{ratelimit.Quota-1.expiry.time}</Header>
          <Header name='X-Quota-Allowed'>{ratelimit.Quota-1.allowed.count}</Header>
          <Header name='X-Quota-Available'>{ratelimit.Quota-1.available.count}</Header>
        </Headers>
        <Payload contentType='application/json'>{
      "error" : {
        "message" : "you have exceeded your quota",
        "clientId" : "{request.queryparam.apikey}"
      }
    }
        </Payload>
        <StatusCode>429</StatusCode>
        <ReasonPhrase>Quota Exceeded</ReasonPhrase>
      </Set>
    </AssignMessage>

    AssignMessage নীতিতে, <Set> উপাদান সমর্থন বার্তা টেমপ্লেটিং-এ নিম্নলিখিত উপাদানগুলি রয়েছে:

    • হেডার
    • QueryParam
    • ফর্মপরম
    • পেলোড
    • সংস্করণ
    • ক্রিয়া
    • পথ
    • স্ট্যাটাসকোড
    • যুক্তিবাক্য

    আবার, নোট করুন যে একটি বার্তা টেমপ্লেটে ফ্লো ভেরিয়েবল অবশ্যই কোঁকড়া বন্ধনীতে আবদ্ধ থাকতে হবে

    যখন এই নীতি কার্যকর হয়:

    • হেডার উপাদানগুলি নির্দিষ্ট প্রবাহ ভেরিয়েবলের মানগুলি গ্রহণ করে।
    • পেলোডে আক্ষরিক পাঠ্য এবং ভেরিয়েবলের মিশ্রণ রয়েছে ( client_id গতিশীলভাবে জনবহুল)।
    • StatusCode এবং ReasonPhrase শুধুমাত্র আক্ষরিক পাঠ অন্তর্ভুক্ত করে; যাইহোক, যদি আপনি এটি ব্যবহার করতে চান তবে এই উপাদানগুলি বার্তা টেমপ্লেটিং সমর্থন করে।

    উদাহরণ

    একটি প্রক্সি TargetEndpoint সংজ্ঞায়, <SSLInfo> সমর্থন বার্তা টেমপ্লেটিং-এর চাইল্ড-এলিমেন্ট। নীতিগুলিতে ব্যবহৃত একই প্যাটার্ন অনুসরণ করে, প্রক্সি কার্যকর করার সময় কোঁকড়া বন্ধনীতে ফ্লো ভেরিয়েবলগুলি প্রতিস্থাপিত হয়।

    <TargetEndpoint name="default">
      
      <HTTPTargetConnection>
        <SSLInfo>
            <Enabled>{myvars.ssl.enabled}</Enabled>
            <ClientAuthEnabled>{myvars.ssl.client.auth.enabled}</ClientAuthEnabled>
            <KeyStore>{myvars.ssl.keystore}</KeyStore>
            <KeyAlias>{myvars.ssl.keyAlias}</KeyAlias>
            <TrustStore>{myvars.ssl.trustStore}</TrustStore>
        </SSLInfo>
    
      </HTTPTargetConnection>
      
    </TargetEndpoint>

    আপনি কোথায় বার্তা টেমপ্লেট ব্যবহার করতে পারেন?

    বার্তা টেমপ্লেটগুলি বিভিন্ন নীতির পাশাপাশি TargetEndpoint কনফিগারেশনে ব্যবহৃত কিছু উপাদান সমর্থিত।

    নীতি যা বার্তা টেমপ্লেট গ্রহণ করে

    নীতি উপাদান এবং শিশু-উপাদান যা বার্তা টেমপ্লেট সমর্থন করে
    অ্যাক্সেস কন্ট্রোল নীতি <SourceAddress> , mask অ্যাট্রিবিউট এবং IP ঠিকানার জন্য।
    অ্যাসাইন মেসেজ নীতি <Set> চাইল্ড এলিমেন্ট: পেলোড, কনটেন্ট টাইপ, ক্রিয়া, ভার্সন, পাথ, স্ট্যাটাসকোড, রিজনফ্রেজ, হেডার, কোয়েরিপ্যারাম, ফর্মপ্যারাম

    <Add> এলিমেন্টস: হেডার, কোয়েরিপ্যারাম, ফর্মপ্যারাম

    <AssignVariable> চাইল্ড এলিমেন্ট: <Template>

    এক্সটেনশন কলআউট নীতি <Input>
    ExtractVariables নীতি <JsonPath>
    জেডাব্লুএস নীতি তৈরি করুন
    JWS নীতি যাচাই করুন
    <Payload> ( শুধুমাত্র জেডাব্লুএস নীতি তৈরি করুন )

    <AdditionalHeaders><Claim>

    * এই উপাদানগুলি শুধুমাত্র তখনই বার্তা টেমপ্লেট সমর্থন করে যখন type=map

    জেডাব্লুটি নীতি তৈরি করুন
    JWT নীতি যাচাই করুন
    <AdditionalClaims><Claim>

    <AdditionalHeaders><Claim>

    * এই উপাদানগুলি শুধুমাত্র তখনই বার্তা টেমপ্লেট সমর্থন করে যখন type=map

    LDAP নীতি <SearchQuery>
    মেসেজলগিং নীতি <Syslog><Message>

    <File><Message>

    OAS যাচাইকরণ নীতি <OASResource> উপাদান
    রেইসফল্ট নীতি <Set> উপাদান: পেলোড, বিষয়বস্তু প্রকার, ক্রিয়া, সংস্করণ, পথ, স্ট্যাটাসকোড, যুক্তিবাক্য, শিরোনাম, ক্যোয়ারীপ্যারাম, ফর্মপ্যারাম

    <Add> উপাদান: শিরোনাম, ক্যোয়ারীপ্যারাম, ফর্মপ্যারাম

    SAMLA প্রত্যয়ন নীতি <Template>

    * শুধুমাত্র যখন পলিসি স্বাক্ষর <GenerateSAMLAssertion> হয়

    সার্ভিস কলআউট নীতি <Set> উপাদান: পেলোড, বিষয়বস্তু প্রকার, ক্রিয়া, সংস্করণ, পথ, স্ট্যাটাসকোড, যুক্তিবাক্য, /হেডার, ক্যোয়ারীপ্যারাম, ফর্মপ্যারাম

    <Add> উপাদান: শিরোনাম, ক্যোয়ারীপ্যারাম, ফর্মপ্যারাম

    <HTTPTargetConnection>/<URL> : মনে রাখবেন যে স্ট্রিংয়ের প্রথম অংশটি অবশ্যই http বা https হতে হবে।

    TargetEndpoint উপাদান যা বার্তা টেমপ্লেট গ্রহণ করে

    HTTPTargetConnection উপাদান শিশু-উপাদান যা বার্তা টেমপ্লেট সমর্থন করে
    এসএসএলইনফো সক্ষম, KeyAlias, KeyStore, TrustStore, ClientAuthEnabled, CLRStore
    লোকাল টার্গেট কানেকশন ApiProxy, ProxyEndpoint
    পথ একটি লোডব্যালেন্সার উপাদান ব্যবহার করার সময়, পাথ উপাদান সক্রিয় থাকে এবং একটি বার্তা টেমপ্লেট গ্রহণ করে।

    বার্তা টেমপ্লেট সিনট্যাক্স

    এই বিভাগটি বার্তা টেমপ্লেট ব্যবহার করার জন্য আপনাকে যে নিয়মগুলি অনুসরণ করতে হবে তা ব্যাখ্যা করে৷

    ভেরিয়েবল বোঝাতে কোঁকড়া ধনুর্বন্ধনী ব্যবহার করুন

    ভেরিয়েবলের নামগুলি কোঁকড়া বন্ধনীতে আবদ্ধ করুন { } । ভেরিয়েবলের অস্তিত্ব না থাকলে, আউটপুটে একটি খালি স্ট্রিং ফেরত দেওয়া হয়; যাইহোক, আপনি বার্তা টেমপ্লেটগুলিতে ডিফল্ট মান নির্দিষ্ট করতে পারেন (ভেরিয়েবলটি অমীমাংসিত হলে প্রতিস্থাপিত মান)। বার্তা টেমপ্লেটগুলিতে ডিফল্ট মান সেট করা দেখুন।

    উল্লেখ্য যে সমগ্র বার্তা টেমপ্লেট স্ট্রিংটি উদ্ধৃতিতে আবদ্ধ করা অনুমোদিত, কিন্তু ঐচ্ছিক। উদাহরণস্বরূপ, নিম্নলিখিত দুটি বার্তা টেমপ্লেট সমতুল্য:

    <Set>
        <Headers>
            <Header name="x-h1">"Hello {user.name}"</Header>
            <Header name="x-h1">Hello {user.name}</Header>
        </Headers>
    </Set>

    বার্তা টেমপ্লেটে ডিফল্ট মান সেট করা

    যদি একটি টেমপ্লেটেড ভেরিয়েবল সমাধান করা না যায়, এজ একটি খালি স্ট্রিং প্রতিস্থাপন করে। যাইহোক, আপনি নিম্নরূপ একটি ডিফল্ট মান নির্দিষ্ট করতে পারেন:

    <Header name="x-h1">Test message. id = {request.header.id:Unknown}</Header>

    উপরের নমুনায় যদি ভেরিয়েবল request.header.id সমাধান করা না যায় তাহলে এর মান Unknown দ্বারা প্রতিস্থাপিত হয়। যেমন:

    Test message. id = Unknown

    ফাংশন এক্সপ্রেশনে স্পেস অনুমোদিত নয়

    বার্তা টেমপ্লেট ফাংশন এক্সপ্রেশনে কোথাও স্পেস অনুমোদিত নয়। যেমন:

    অনুমোদিত:

    {substring(alpha,0,4)}
    {createUuid()}
    {randomLong(10)}

    অনুমোদিত নয়:

    {substring( alpha, 0, 4 )}
    { createUuid( ) }
    {randomLong( 10 )}

    JSON পেলোডের জন্য লিগ্যাসি সিনট্যাক্স

    ক্লাউড রিলিজ 16.08.17 এর আগে এজ সংস্করণগুলিতে, আপনি JSON পেলোডগুলির মধ্যে পরিবর্তনশীল রেফারেন্সগুলি বোঝাতে কোঁকড়া ধনুর্বন্ধনী ব্যবহার করতে পারবেন না । সেই পুরানো সংস্করণগুলিতে, আপনাকে ডিলিমিটার অক্ষরগুলি নির্দিষ্ট করতে variablePrefix এবং variableSuffix বৈশিষ্ট্যগুলি ব্যবহার করতে হবে এবং পরিবর্তনশীল নামগুলি মোড়ানোর জন্য ব্যবহার করতে হবে, যেমন:

    <Set>
      <Payload contentType="application/json" variablePrefix="@" variableSuffix="#">
        {"name":"foo", "type":"@variable_name#"}
      </Payload>
    </Set>

    যদিও Apigee সুপারিশ করে যে আপনি নতুন কোঁকড়া-বন্ধনী সিনট্যাক্স ব্যবহার করুন, পুরানো সিনট্যাক্স এখনও কাজ করে।

    বার্তা টেমপ্লেট ফাংশন ব্যবহার করে

    এজ ফাংশনের একটি সেট প্রদান করে যা আপনি বার্তা টেমপ্লেটের মধ্যে ব্যবহার করতে পারেন এস্কেপ, এনকোড, হ্যাশ এবং স্ট্রিং ভেরিয়েবল ফরম্যাট করতে।

    বার্তা টেমপ্লেট ফাংশন বার্তা টেমপ্লেট ফাংশন রেফারেন্সে বিস্তারিতভাবে বর্ণনা করা হয়েছে।

    উদাহরণ: toLowerCase()

    একটি স্ট্রিং ভেরিয়েবলকে ছোট হাতের অক্ষরে রূপান্তর করতে বিল্ট-ইন toLowerCase() ফাংশনটি ব্যবহার করুন:

    <AssignMessage name="AM-Set-Custom-Response">
        <AssignTo createNew="false" type="response"/>
        <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
        <Set>
            <Headers>
                <Header name="x-h1">Test header: {toLowerCase(foo.bar:FOO)}</Header>
            </Headers>
        </Set>
    </AssignMessage>

    যদি foo.bar ফ্লো ভেরিয়েবলের সমাধান হয়, তাহলে এর অক্ষরগুলো সব ছোট হাতের হবে। যদি foo.bar অমীমাংসিত হয় তবে ডিফল্ট মান FOO প্রতিস্থাপিত হয় এবং ছোট হাতের অক্ষরে রূপান্তরিত হয়। যেমন:

    Test header: foo

    উদাহরণ: escapeJSON()

    এখানে একটি আকর্ষণীয় ব্যবহারের ক্ষেত্রে রয়েছে: ধরা যাক আপনার ব্যাকএন্ড অ্যাপটি একটি JSON প্রতিক্রিয়া প্রদান করে যাতে বৈধ এস্কেপ অক্ষর রয়েছে। যেমন:

    {
          "code": "INVALID",
          "user_message": "Invalid value for \"logonId\" check your input."
    }

    তারপর, ধরা যাক আপনি একটি কাস্টম পেলোডে ক্লায়েন্ট কলারের কাছে এই বার্তাটি ফেরত দিতে চান৷ এটি করার সাধারণ উপায় হল টার্গেট রেসপন্স পেলোড থেকে বার্তাটি বের করা এবং এটিকে একটি কাস্টম প্রক্সি রেসপন্সে যোগ করতে অ্যাসাইন মেসেজ ব্যবহার করা (অর্থাৎ, এটি ক্লায়েন্টের কাছে ফেরত পাঠান)।

    এখানে এক্সট্রাক্ট ভেরিয়েবল নীতি যা user_message তথ্যকে standard.systemMessage নামক একটি ভেরিয়েবলে বের করে দেয়:

    <ExtractVariables name="EV-BackendErrorResponse">
        <DisplayName>EV-BackendErrorResponse</DisplayName>
        <JSONPayload>
            <Variable name="standard.systemMessage">
                <JSONPath>$.user_message</JSONPath>
            </Variable>
        </JSONPayload>
    </ExtractVariables>

    এখন, এখানে একটি সম্পূর্ণ বৈধ অ্যাসাইন মেসেজ নীতি যা রেসপন্স পেলোডে (প্রক্সি রেসপন্স) এক্সট্র্যাক্ট করা ভেরিয়েবল যোগ করে:

    <AssignMessage name="AM-SetStandardFaultResponse">
        <DisplayName>AM-SetStandardFaultResponse</DisplayName>
        <Set>
            <Payload contentType="application/json">
               {
                  "systemMessage": "{standard.systemMessage}"
               }
            </Payload>
        </Set>
        <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
        <AssignTo createNew="false" transport="http" type="response"/>
    </AssignMessage>


    দুর্ভাগ্যবশত, একটি সমস্যা আছে. এক্সট্র্যাক্ট ভেরিয়েবল নীতি বার্তার অংশের চারপাশে পালিয়ে যাওয়া উদ্ধৃতি অক্ষরগুলিকে সরিয়ে দিয়েছে। এর মানে হল যে ক্লায়েন্টের কাছে ফিরে আসা প্রতিক্রিয়াটি অবৈধ JSON। এটি স্পষ্টতই আপনার উদ্দেশ্য নয়!

    {
        "systemMessage": "Invalid value for "logonId" check your input."
    }

    এই সমস্যাটি মোকাবেলা করার জন্য, আপনি একটি বার্তা টেমপ্লেট ফাংশন ব্যবহার করতে অ্যাসাইন মেসেজ নীতি পরিবর্তন করতে পারেন যা আপনার জন্য JSON-এর মধ্যে উদ্ধৃতিগুলি এড়িয়ে যায়৷ এই ফাংশন, escapeJSON() , JSON এক্সপ্রেশনের মধ্যে যেকোনও উদ্ধৃতি বা অন্যান্য বিশেষ অক্ষর এড়িয়ে যায়:

    <AssignMessage name="AM-SetStandardFaultResponse">
        <DisplayName>AM-SetStandardFaultResponse</DisplayName>
        <Set>
            <Payload contentType="application/json">
               {
                  "systemMessage": "{escapeJSON(standard.systemMessage)}"
               }
            </Payload>
        </Set>
        <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
        <AssignTo createNew="false" transport="http" type="response"/>
    </AssignMessage>


    ফাংশনটি এমবেড করা উদ্ধৃতিগুলিকে এড়িয়ে যায়, যার ফলে বৈধ JSON হয়, যা আপনি ঠিক যা চেয়েছিলেন:

    {
          "systemMessage": "Invalid value for \"logonId\" check your input.",
    }

    একটি বার্তা টেমপ্লেট হল একটি গতিশীল স্ট্রিং প্রতিস্থাপন বৈশিষ্ট্য যা আপনি নির্দিষ্ট নীতি এবং TargetEndpoint সংজ্ঞাগুলিতে ব্যবহার করতে পারেন৷ মেসেজ টেমপ্লেট ফাংশন আপনাকে একটি মেসেজ টেমপ্লেটের মধ্যে হ্যাশিং, স্ট্রিং ম্যানিপুলেশন, ক্যারেক্টার এস্কেপিং এবং অন্যান্যের মতো দরকারী ক্রিয়াকলাপ সম্পাদন করতে দেয়।

    উদাহরণস্বরূপ, নিম্নলিখিত AssignMessage নীতিতে, toLowerCase() ফাংশনটি একটি বার্তা টেমপ্লেটে ব্যবহৃত হয়:

    <AssignMessage name="AM-Set-Custom-Response">
        <AssignTo createNew="false" type="response"/>
        <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
        <Set>
           <Headers>
             <Header name="x-h1">Test header: {Hello, toLowerCase(user.name)}</Header>
           </Headers>
        </Set>
    </AssignMessage>

    এই বিষয় বার্তা টেমপ্লেট ফাংশন, তাদের আর্গুমেন্ট, এবং আউটপুট বর্ণনা করে। এই বিষয়টি অনুমান করে যে আপনি বার্তা টেমপ্লেট এবং সেগুলি ব্যবহার করা প্রসঙ্গের সাথে পরিচিত।

    হ্যাশ ফাংশন

    একটি হ্যাশ মান গণনা করুন এবং সেই হ্যাশের স্ট্রিং উপস্থাপনা ফেরত দিন।

    হেক্সাডেসিমেল হ্যাশ ফাংশন

    একটি হ্যাশ মান গণনা করুন এবং একটি হেক্সাডেসিমেল সংখ্যা হিসাবে সেই হ্যাশের স্ট্রিং উপস্থাপনা প্রদান করুন।

    সিনট্যাক্স

    ফাংশন বর্ণনা
    md5Hex(string) হেক্সাডেসিমেল সংখ্যা হিসাবে প্রকাশ করা একটি MD5 হ্যাশ গণনা করে।
    sha1Hex(string) হেক্সাডেসিমেল সংখ্যা হিসাবে প্রকাশ করা একটি SHA1 হ্যাশ গণনা করে।
    sha256Hex(string) হেক্সাডেসিমেল সংখ্যা হিসাবে প্রকাশ করা একটি SHA256 হ্যাশ গণনা করে।
    sha384Hex(string) হেক্সাডেসিমেল সংখ্যা হিসাবে প্রকাশ করা একটি SHA384 হ্যাশ গণনা করে।
    sha512Hex(string) হেক্সাডেসিমেল সংখ্যা হিসাবে প্রকাশ করা একটি SHA512 হ্যাশ গণনা করে।

    যুক্তি

    স্ট্রিং - হ্যাশ ফাংশনগুলি একটি একক স্ট্রিং আর্গুমেন্ট নেয় যার উপর হ্যাশ অ্যালগরিদম গণনা করা হয়। আর্গুমেন্ট একটি আক্ষরিক স্ট্রিং বা একটি স্ট্রিং ফ্লো ভেরিয়েবল হতে পারে।

    উদাহরণ

    ফাংশন কল:

    sha256Hex('abc')

    ফলাফল:

    ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad

    ফাংশন কল:

    var str = 'abc';
    sha256Hex(str)

    ফলাফল:

    ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad

    বেস 64 হ্যাশ ফাংশন

    একটি হ্যাশ মান গণনা করুন এবং একটি Base64 এনকোডেড মান হিসাবে সেই হ্যাশের স্ট্রিং উপস্থাপনা ফেরত দিন।

    সিনট্যাক্স

    ফাংশন বর্ণনা
    md5Base64(string) বেস64 এনকোডেড মান হিসাবে প্রকাশ করা একটি MD5 হ্যাশ গণনা করে।
    sha1Base64(string) বেস64 এনকোডেড মান হিসাবে প্রকাশ করা একটি SHA1 হ্যাশ গণনা করে।
    sha256Base64(string) একটি Base64 এনকোডেড মান হিসাবে প্রকাশ করা একটি SHA256 হ্যাশ গণনা করে।
    sha384Base64(string) একটি Base64 এনকোডেড ভ্যালুয়ার হিসাবে প্রকাশ করা একটি SHA384 হ্যাশ গণনা করে।
    sha512Base64(string) একটি Base64 এনকোডেড মান হিসাবে প্রকাশ করা একটি SHA512 হ্যাশ গণনা করে।

    যুক্তি

    স্ট্রিং - হ্যাশ ফাংশনগুলি একটি একক স্ট্রিং আর্গুমেন্ট নেয় যার উপর হ্যাশ অ্যালগরিদম গণনা করা হয়। আর্গুমেন্ট একটি আক্ষরিক স্ট্রিং বা একটি স্ট্রিং ফ্লো ভেরিয়েবল হতে পারে।

    উদাহরণ

    ফাংশন কল:

    sha256Base64('abc')

    ফলাফল:

    ungWv48Bz+pBQUDeXa4iI7ADYaOWF3qctBD/YfIAFa0=

    ফাংশন কল:

    var str = 'abc';
    sha256Base64(str)

    ফলাফল:

    ungWv48Bz+pBQUDeXa4iI7ADYaOWF3qctBD/YfIAFa0=

    স্ট্রিং ফাংশন

    একটি বার্তা টেমপ্লেটের মধ্যে স্ট্রিংগুলিতে ক্রিয়াকলাপ সম্পাদন করুন।

    বেস64 এনকোডিং ফাংশন

    Base64 এনকোডিং স্কিম ব্যবহার করে স্ট্রিং এনকোড এবং ডিকোড করুন।

    সিনট্যাক্স

    ফাংশন বর্ণনা
    encodeBase64(string) Base64 এনকোডিং ব্যবহার করে একটি স্ট্রিং এনকোড করে। উদাহরণস্বরূপ: encodeBase64( value ) , যখন value abc ধরে রাখে, ফাংশনটি স্ট্রিংটি প্রদান করে: YWJj
    decodeBase64(string) একটি Base64 এনকোডেড স্ট্রিং ডিকোড করে। উদাহরণস্বরূপ: decodeBase64( value ) যখন value aGVsbG8sIHdvcmxk ধারণ করে, ফাংশনটি hello, world স্ট্রিং প্রদান করে।

    যুক্তি

    স্ট্রিং - এনকোড বা ডিকোড করার জন্য স্ট্রিং। একটি আক্ষরিক স্ট্রিং বা একটি স্ট্রিং ফ্লো ভেরিয়েবল হতে পারে।

    উদাহরণ

    <AssignMessage name="AM-Set-Custom-Response">
        <AssignTo createNew="false" type="response"/>
        <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
        <Set>
           <Headers>
             <Header name="x-h1">Hello, {decodeBase64('d29ybGQK')}</Header>
           </Headers>
        </Set>
    </AssignMessage>

    কেস রূপান্তর ফাংশন

    একটি স্ট্রিংকে সমস্ত বড় হাতের বা সমস্ত ছোট হাতের অক্ষরে রূপান্তর করুন।

    সিনট্যাক্স

    ফাংশন বর্ণনা
    toUpperCase(string) একটি স্ট্রিংকে বড় হাতের অক্ষরে রূপান্তর করুন।
    toLowerCase(string) একটি স্ট্রিংকে ছোট হাতের অক্ষরে রূপান্তর করুন।


    যুক্তি

    স্ট্রিং - রূপান্তর করার জন্য স্ট্রিং। একটি আক্ষরিক স্ট্রিং বা একটি স্ট্রিং ফ্লো ভেরিয়েবল হতে পারে।

    উদাহরণ

    <AssignMessage name="AM-Set-Custom-Response">
        <AssignTo createNew="false" type="response"/>
        <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
        <Set>
           <Headers>
             <Header name="x-h1">Hello, {toLowerCase(user.name)}</Header>
           </Headers>
        </Set>
    </AssignMessage>

    সাবস্ট্রিং ফাংশন

    নির্দিষ্ট স্ট্রিং এর শুরু এবং শেষ সূচকের মধ্যে অক্ষর প্রদান করে।

    সিনট্যাক্স

    substring(str,start_index,end_index)

    যুক্তি

    • str - একটি আক্ষরিক স্ট্রিং বা স্ট্রিং ফ্লো ভেরিয়েবল।
    • start_index - স্ট্রিং এর মধ্যে শুরু সূচক।
    • end_index - (ঐচ্ছিক) স্ট্রিং এ শেষ সূচক। যদি সরবরাহ না করা হয়, শেষ সূচকটি স্ট্রিংয়ের শেষ।

    উদাহরণ

    নিম্নলিখিত উদাহরণগুলির জন্য, ধরুন যে এই প্রবাহ ভেরিয়েবলগুলি বিদ্যমান:

    পরিবর্তনশীল নাম মান
    alpha ABCDEFGHIJKLMNOPQRSTUVWXYZ
    seven 7


    এই ভেরিয়েবলগুলি ব্যবহার করে এমন ফাংশন কলগুলির ফলাফল এখানে রয়েছে:

    বার্তা টেমপ্লেট অভিব্যক্তি ফলাফল
    {substring(alpha,22)} WXYZ
    hello {substring(alpha,22)} hello WXYZ
    {substring(alpha,-4)} WXYZ
    {substring(alpha,-8,-4)} STUV
    {substring(alpha,0,10)} ABCDEFGHIJ
    {substring(alpha,0,seven)} ABCDEFG

    সমস্ত ফাংশন প্রতিস্থাপন করুন

    একটি স্ট্রিং-এ একটি রেগুলার এক্সপ্রেশন প্রয়োগ করে এবং যেকোনো মিলের জন্য, ম্যাচটিকে প্রতিস্থাপন মান দিয়ে প্রতিস্থাপন করে।

    সিনট্যাক্স

    replaceAll(string,regex,value)

    যুক্তি

    • স্ট্রিং - একটি আক্ষরিক স্ট্রিং বা স্ট্রিং ফ্লো ভেরিয়েবল যাতে প্রতিস্থাপন করা যায়।
    • regex - একটি নিয়মিত অভিব্যক্তি।
    • মান - স্ট্রিং এর মধ্যে সমস্ত রেজেক্স মিল প্রতিস্থাপন করার মান।

    উদাহরণ

    নিম্নলিখিত উদাহরণগুলির জন্য, ধরুন এই প্রবাহের ভেরিয়েবলগুলি বিদ্যমান:

    পরিবর্তনশীল নাম মান
    header Bearer ABCDEFGHIJKLMNOPQRSTUVWXYZ-9993
    regex1 "^Bearer "
    replacement "TOKEN: "

    এখানে ফাংশন কলগুলির ফলাফল রয়েছে যা এই ভেরিয়েবলগুলি ব্যবহার করে:

    বার্তা টেম্পলেট এক্সপ্রেশন ফলাফল
    {replaceAll(header,"9993",'')} Bearer ABCDEFGHIJKLMNOPQRSTUVWXYZ-
    {replaceAll(header,regex1,'')} ABCDEFGHIJKLMNOPQRSTUVWXYZ-9993
    {replaceAll(header,regex1,replacement)} TOKEN: ABCDEFGHIJKLMNOPQRSTUVWXYZ-9993

    প্রথম ফাংশন প্রতিস্থাপন

    স্ট্রিংয়ে নির্দিষ্ট নিয়মিত এক্সপ্রেশন ম্যাচের প্রথম ঘটনাটি প্রতিস্থাপন করে।

    সিনট্যাক্স

    replaceFirst(string,regex,value)

    যুক্তি

    • স্ট্রিং - একটি আক্ষরিক স্ট্রিং বা স্ট্রিং ফ্লো ভেরিয়েবল যাতে প্রতিস্থাপন করা যায়।
    • রেজেক্স - একটি নিয়মিত অভিব্যক্তি।
    • মান - স্ট্রিংয়ের মধ্যে রেজেক্স ম্যাচগুলি প্রতিস্থাপনের মান।

    চরিত্র পালানো এবং এনকোডিং ফাংশন

    ফাংশনগুলি যা একটি স্ট্রিংয়ে বিশেষ অক্ষরগুলি পালাতে বা এনকোড করে।

    সিনট্যাক্স

    ফাংশন বর্ণনা
    এস্কেপজসন (স্ট্রিং) ব্যাকস্ল্যাশ-এস্কেপস ডাবল-কোটস।
    এস্কাপেক্সএমএল (স্ট্রিং) কোণ বন্ধনী, অ্যাপোস্ট্রোফ, ডাবল-কোয়েট এবং এম্পারস্যান্ডগুলি সম্পর্কিত এক্সএমএল সত্তাগুলির সাথে প্রতিস্থাপন করে। এক্সএমএল 1.0 নথির জন্য ব্যবহার করুন।

    এস্কাপেক্সএমএল 11 (স্ট্রিং) এস্কাপেক্সএমএল এর মতো একইভাবে কাজ করে তবে এক্সএমএল ভি 1.1 সত্তার জন্য। নীচে ব্যবহার নোট দেখুন।
    এনকোডেটিএমএল (স্ট্রিং) এনকোডগুলি অ্যাপোস্ট্রোফ, কোণ বন্ধনী এবং এম্পারস্যান্ড।

    যুক্তি

    স্ট্রিং - পালানোর জন্য স্ট্রিং। আক্ষরিক স্ট্রিং বা স্ট্রিং ফ্লো ভেরিয়েবল হতে পারে।

    ব্যবহারের নোট

    এক্সএমএল 1.1 নির্দিষ্ট নিয়ন্ত্রণের অক্ষরের প্রতিনিধিত্ব করতে পারে, তবে এটি পালানোর পরেও নাল বাইট বা আনপায়ারড ইউনিকোড সারোগেট কোডপয়েন্টগুলি উপস্থাপন করতে পারে না। এস্কাপেক্সএমএল 11 () ফাংশনটি এমন অক্ষরগুলি সরিয়ে দেয় যা নিম্নলিখিত রেঞ্জগুলিতে ফিট করে না:

    [#x1-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]

    escapeXML11() ফাংশন নিম্নলিখিত রেঞ্জগুলিতে অক্ষরগুলি এড়িয়ে চলেছে:

    [#x1-#x8] | [#xB-#xC] | [#xE-#x1F] | [#x7F-#x84] | [#x86-#x9F]

    উদাহরণ

    এই মানটির সাথে খাদ্য নামক একটি প্রবাহের পরিবর্তনশীল অনুমান করুন: "bread" & "butter" । তারপরে, ফাংশন:

    {escapeHTML(food)}

    ফলাফল:

    &quot;bread&quot; &amp; &quot;butter&quot;

    সময় ফর্ম্যাট ফাংশন

    স্থানীয় সময় অঞ্চলে বা ইউটিসিতে ফর্ম্যাট করা সময়ের একটি স্ট্রিং উপস্থাপনা ফিরিয়ে দিন।

    সিনট্যাক্স

    ফাংশন বর্ণনা
    timeFormat(format,str) স্থানীয় সময় অঞ্চলে তারিখের বিন্যাসটি ফেরত দেয়।
    timeFormatMs(format,str) স্থানীয় সময় অঞ্চলে তারিখের বিন্যাসটি ফেরত দেয়।
    timeFormatUTC(format,str) ইউটিসিতে তারিখের বিন্যাসটি ফেরত দেয়।
    timeFormatUTCMs(format,str) ইউটিসিতে তারিখের বিন্যাসটি ফেরত দেয়।

    যুক্তি

    • ফর্ম্যাট - একটি তারিখ/সময় ফর্ম্যাট স্ট্রিং। আক্ষরিক স্ট্রিং বা স্ট্রিং ভেরিয়েবল হতে পারে।
    • এসআরটি - একটি সময় মান সমন্বিত একটি স্ট্রিং বা স্ট্রিং ফ্লো ভেরিয়েবল। টাইমফর্ম্যাটমসের জন্য মানটি কয়েক সেকেন্ডের মধ্যে হতে পারে বা মিলিসেকেন্ড-এ-এপোক।

    উদাহরণ

    নিম্নলিখিত মানগুলি ধরে নিন এবং ধরে নিন স্থানীয় টাইমজোনটি প্রশান্ত মহাসাগর:

    • epoch_time_ms = 1494390266000
    • epoch_time = 1494390266
    • fmt1 = yyyy-MM-dd
    • fmt2 = yyyy-MM-dd HH-mm-ss
    • fmt3 = yyyyMMddHHmmss

    ফাংশনগুলি নিম্নলিখিত ফলাফলগুলি ফিরিয়ে দেয়:

      ফাংশন আউটপুট
      timeFormatMs(fmt1,epoch_time_ms) 2017-05-09
      timeFormat(fmt1,epoch_time) 2017-05-09
      timeFormat(fmt2,epoch_time) 2017-05-09 21:24:26
      timeFormat(fmt3,epoch_time) 20170509212426
      timeFormatUTC(fmt1,epoch_time) 2017-05-10
      timeFormatUTC(fmt2,epoch_time) 2017-05-10 04:24:26
      timeFormatUTC(fmt3,epoch_time) 20170510042426

      এইচএমএসি গণনা ফাংশন

      এইচএমএসি গণনা ফাংশনগুলি এইচএমএসি গণনা করতে এইচএমএসি নীতি ব্যবহারের বিকল্প সরবরাহ করে। ক্যাসকেড এইচএমএসি গণনা সম্পাদন করার সময় ফাংশনগুলি কার্যকর হয়, যখন কোনও এইচএমএসি এর আউটপুট দ্বিতীয় এইচএমএসি -র কী হিসাবে ব্যবহৃত হয়।

      সিনট্যাক্স

      ফাংশন বর্ণনা
      hmacSha224(key,valueToSign[,keyencoding[,outputencoding]]) SHA-224 হ্যাশ ফাংশন সহ একটি এইচএমএসি গণনা করে।
      hmacSha256(key,valueToSign[,keyencoding[,outputencoding]]) SHA-256 হ্যাশ ফাংশন সহ একটি এইচএমএসি এনকোড করে।
      hmacSha384(key,valueToSign[,keyencoding[,outputencoding]]) SHA-384 হ্যাশ ফাংশন সহ একটি এইচএমএসি এনকোড করে।
      hmacSha512(key,valueToSign[,keyencoding[,outputencoding]]) SHA-512 হ্যাশ ফাংশন সহ একটি এইচএমএসি এনকোড করে।
      hmacMd5(key,valueToSign[,keyencoding[,outputencoding]]) এমডি 5 হ্যাশ ফাংশন সহ একটি এইচএমএসি এনকোড করে।
      hmacSha1(key, valueToSign [,keyencoding[,outputencoding]]) SHA-1 এনক্রিপশন অ্যালগরিদম সহ একটি এইচএমএসি এনকোড করে।

      যুক্তি

      • কী - (প্রয়োজনীয়) গোপন কীটি নির্দিষ্ট করে, একটি স্ট্রিং হিসাবে এনকোড করা, এইচএমএসি গণনা করতে ব্যবহৃত।
      • ভ্যালুয়েটোসাইন - (প্রয়োজনীয়) সাইন ইন বার্তাটি নির্দিষ্ট করে। এটি একটি স্ট্রিং হওয়া উচিত।
      • কীঙ্কোডিং - (al চ্ছিক) সিক্রেট কী স্ট্রিংটি এই নির্দিষ্ট এনকোডিং অনুসারে ডিকোড করা হবে। বৈধ মান: hex , base16 , base64 , utf-8 । ডিফল্ট: utf-8
      • আউটপুটেনকোডিং - (al চ্ছিক) আউটপুটটির জন্য ব্যবহার করতে এনকোডিং অ্যালগরিদম নির্দিষ্ট করে। বৈধ মান: hex , base16 , base64 । মানগুলি কেস সংবেদনশীল; hex এবং base16 প্রতিশব্দ। ডিফল্ট: base64

      উদাহরণ

      এই উদাহরণটি এইচএমএসি -256 গণনা করতে এবং এটি একটি ফ্লো ভেরিয়েবলকে বরাদ্দ করতে অ্যাসাইনমেসেজ নীতি ব্যবহার করে:

      <AssignMessage name='AM-HMAC-1'>
        <AssignVariable>
          <Name>valueToSign</Name>
          <Template>{request.header.apikey}.{request.header.date}</Template>
        </AssignVariable>
        <AssignVariable>
          <Name>hmac_value</Name>
          <Template>{hmacSha256(private.secretkey,valueToSign)}</Template>
        </AssignVariable>
      </AssignMessage>

      এই উদাহরণটি চিত্রিত করে যে কীভাবে একটি ক্যাসকেডিং এইচএমএসি তৈরি করা যায় যা এডাব্লুএস স্বাক্ষর ভি 4 স্বাক্ষর প্রক্রিয়াটির সাথে ব্যবহার করা যেতে পারে। উদাহরণটি এডাব্লুএস স্বাক্ষর v4 এর জন্য স্বাক্ষর গণনা করতে ব্যবহৃত পাঁচটি ক্যাসকেড এইচএমএসি এর পাঁচটি স্তর তৈরি করতে অ্যাসাইনমেসেজ নীতি ব্যবহার করে:

      <AssignMessage name='AM-HMAC-AWS-1'>
        <!-- 1 -->
        <AssignVariable>
          <Name>DateValue</Name>
          <Template>{timeFormatUTCMs('yyyyMMdd',system.timestamp)}</Template>
        </AssignVariable>
        <!-- 2 -->
        <AssignVariable>
          <Name>FirstKey</Name>
          <Template>AWS4{private.secret_aws_access_key}</Template>
        </AssignVariable>
        <!-- 3 -->
        <AssignVariable>
          <Name>DateKey</Name>
          <Template>{hmacSha256(FirstKey,DateValue,'utf-8','base16')}</Template>
        </AssignVariable>
        <!-- 4 -->
        <AssignVariable>
          <Name>DateRegionKey</Name>
          <Template>{hmacSha256(DateKey,aws_region,'base16','base16')}</Template>
        </AssignVariable>
        <!-- 5 -->
        <AssignVariable>
          <Name>DateRegionServiceKey</Name>
          <Template>{hmacSha256(DateRegionKey,aws_service,'base16','base16')}</Template>
        </AssignVariable>
        <!-- 6 -->
        <AssignVariable>
          <Name>SigningKey</Name>
          <Template>{hmacSha256(DateRegionServiceKey,'aws4_request','base16','base16')}</Template>
        </AssignVariable>
        <!-- 7 -->
        <AssignVariable>
          <Name>aws4_hmac_value</Name>
          <Template>{hmacSha256(SigningKey,stringToSign,'base16','base16')}</Template>
        </AssignVariable>
      </AssignMessage>

      অন্যান্য ফাংশন

      ইউআইডি ফাংশন তৈরি করুন

      একটি ইউইড উত্পন্ন এবং ফেরত দেয়।

      সিনট্যাক্স

      createUuid()

      যুক্তি

      কোনোটিই নয়।

      উদাহরণ

      { createUuid()}

      নমুনা ফলাফল:

      ec3ca9be-d1e1-4ef4-aee4-4a58f3130db8

      এলোমেলো দীর্ঘ জেনারেটর ফাংশন

      একটি এলোমেলো দীর্ঘ পূর্ণসংখ্যা প্রদান করে।

      সিনট্যাক্স

      randomLong(args)

      যুক্তি

      • যদি কোনও যুক্তি নির্দিষ্ট না করা হয় তবে জাভা সিকিউরানডম ক্লাস দ্বারা গণনা করা হিসাবে ফাংশনটি একটি এলোমেলো দীর্ঘ পূর্ণসংখ্যা দেয়।
      • যদি একটি যুক্তি উপস্থিত থাকে তবে এটি গণনার ন্যূনতম মান হিসাবে বিবেচিত হয়।
      • যদি দ্বিতীয় যুক্তি উপস্থিত থাকে তবে এটি গণনার সর্বাধিক মান হিসাবে বিবেচিত হয়।

      উদাহরণ

      {random()}

      এরকম কিছু ফলাফল:

      5211338197474042880

      রেজেক্স পাঠ্য জেনারেটর

      একটি পাঠ্য স্ট্রিং তৈরি করুন যা প্রদত্ত নিয়মিত অভিব্যক্তির সাথে মেলে।

      সিনট্যাক্স

      xeger(regex)

      যুক্তি

      রেজেক্স - একটি নিয়মিত অভিব্যক্তি।

      উদাহরণ

      এই উদাহরণটি কোনও জিরো ছাড়াই একটি সাত অঙ্কের স্ট্রিং উত্পন্ন করে:

      xeger('[1-9]{7}')

      উদাহরণ ফলাফল:

      9857253

      নাল-কোয়েলেসিং ফাংশন

      firstnonnull() ফাংশনটি বাম-সর্বাধিক, নন-নাল আর্গুমেন্টের মান প্রদান করে।

      সিনট্যাক্স

      firstnonnull(var1,varn)

      যুক্তি

      var1 - একটি প্রসঙ্গ পরিবর্তনশীল।

      var n - এক বা একাধিক প্রসঙ্গ ভেরিয়েবল। আপনি একটি ফ্যালব্যাক মান সরবরাহ করতে ডান-সর্বাধিক যুক্তিটি একটি স্ট্রিংয়ের কাছে সেট করতে পারেন (বাম-হাতের যুক্তিগুলির কোনওটি সেট না করা হলে সেট করা হবে)।

      উদাহরণ

      নিম্নলিখিত টেবিলটি কীভাবে ফাংশনটি ব্যবহার করবেন তা চিত্রিত করে:

      টেমপ্লেট Var1 Var2 Var3 ফলাফল
      {firstnonnull(var1,var2)} সেট করা হয়নি foo N/A foo
      {firstnonnull(var1,var2)} foo bar N/A foo
      {firstnonnull(var1,var2)} foo সেট করা হয়নি N/A foo
      {firstnonnull(var1,var2,var3)} foo bar baz foo
      {firstnonnull(var1,var2,var3)} সেট করা হয়নি bar baz bar
      {firstnonnull(var1,var2,var3)} সেট করা হয়নি সেট করা হয়নি baz baz
      {firstnonnull(var1,var2,var3)} সেট করা হয়নি সেট করা হয়নি সেট করা হয়নি null
      {firstnonnull(var1)} সেট করা হয়নি N/A N/A null
      {firstnonnull(var1)} foo N/A N/A foo
      {firstnonnull(var1,var2)} "" bar N/A ""
      {firstnonnull(var1,var2,'fallback value')} null null fallback value fallback value

      এক্সপথ ফাংশন

      একটি এক্সএমএল ভেরিয়েবলের জন্য একটি এক্সপথ এক্সপ্রেশন প্রয়োগ করে।

      সিনট্যাক্স

      xpath(xpath_expression,xml_string,[datatype])

      যুক্তি

      এক্সপথ_ এক্সপ্রেসন - একটি এক্সপথ এক্সপ্রেশন।

      এক্সএমএল_স্ট্রিং - এক্সএমএলযুক্ত একটি ফ্লো ভেরিয়েবল বা স্ট্রিং।

      ডেটাটাইপ - (al চ্ছিক) ক্যোয়ারির কাঙ্ক্ষিত রিটার্ন ধরণের নির্দিষ্ট করে। এটি নোডসেট, নোড, নম্বর, বুলিয়ান, স্ট্রিং হতে পারে। এটি নোডসেটে ডিফল্ট হয়। ডিফল্ট সাধারণত সঠিক পছন্দ।

      উদাহরণ 1

      ধরুন এই প্রসঙ্গের ভেরিয়েবলগুলি একটি এক্সএমএল স্ট্রিং এবং একটি এক্সপথ এক্সপ্রেশনকে সংজ্ঞায়িত করে:

      xml = "<tag><tagid>250397</tagid><readerid>1</readerid><rssi>74</rssi><date>2019/06/15</date></tag>"
      xpath = "/tag/tagid"

      এবং xpath() ফাংশনটি একটি অ্যাসাইনমেসেজ নীতিতে ব্যবহৃত হয়, নিম্নরূপ:

      <AssignMessage>
        <AssignVariable>
          <Name>extracted_tag</Name>
          <Template>{xpath(xpath,xml)}</Template>
        </AssignVariable>
      </AssignMessage><

      ফাংশনটি <tagid>250397</tagid> মানটি প্রদান করে। এই মানটি extracted_tag নামক প্রসঙ্গে ভেরিয়েবলে স্থাপন করা হয়।

      উদাহরণ 2

      আপনি যদি কেবল নোডের মান চান তবে নিম্নলিখিত হিসাবে text() ফাংশনটি ব্যবহার করুন:

      <AssignMessage>
        <AssignVariable>
          <Name>extracted_tag</Name>
          <Template>{xpath('/tag/tagid/text()',xml)}</Template>
        </AssignVariable>
      </AssignMessage>

      এই অপারেশনের ফলস্বরূপ, প্রসঙ্গটি ভেরিয়েবল extracted_tag 250397 এ সেট করা আছে

      যদি একাধিক নোড নির্বাচন করা হয়, তবে xpath() এর ফলাফলটি নির্বাচনের সমস্ত মান, কমা দিয়ে সংযুক্ত।

      উদাহরণ 3: এক্সএমএল নেমস্পেস

      একটি নেমস্পেস নির্দিষ্ট করতে, অতিরিক্ত পরামিতিগুলি যুক্ত করুন, প্রতিটি একটি স্ট্রিং যা prefix:namespaceuri । উদাহরণস্বরূপ, একটি xpath() ফাংশন যা একটি সাবান দেহের শিশু উপাদান নির্বাচন করে তা এর মতো হতে পারে:

      <AssignMessage>
        <AssignVariable>
          <Name>soapns</Name>
          <Value>soap:http://schemas.xmlsoap.org/soap/envelope/</Value>
        </AssignVariable>
        <AssignVariable>
          <Name>xpathexpression</Name>
          <Value>/soap:Envelope/soap:Body/*</Value>
        </AssignVariable>
        <AssignVariable>
          <Name>extracted_element</Name>
          <Template>{xpath(xpathexpression,xml,soapns)}</Template>
        </AssignVariable>
      </AssignMessage>

      অতিরিক্ত নেমস্পেসগুলির জন্য, আপনি xpath() ফাংশনে 10 টি পর্যন্ত অতিরিক্ত পরামিতি যুক্ত করতে পারেন।

      আপনি একক উদ্ধৃতি দ্বারা বেষ্টিত স্ট্রিং হিসাবে একটি সাধারণ এক্সপথ এক্সপ্রেশন নির্দিষ্ট করতে পারেন:

      {xpath('/tag/tagid/text()',xml)}

      যদি এক্সপথ এক্সপ্রেশনটিতে নেমস্পেস উপসর্গগুলি (এবং কলোনস) অন্তর্ভুক্ত থাকে তবে আপনাকে সেই এক্সপথ এক্সপ্রেশনটি একটি ভেরিয়েবলের সাথে নির্ধারণ করতে হবে এবং সরাসরি অভিব্যক্তির পরিবর্তে ভেরিয়েবলের নাম নির্দিষ্ট করতে হবে।

      {xpath(xpathexpression,xml,ns1)}

      উদাহরণ 4: একটি পছন্দসই রিটার্ন প্রকার নির্দিষ্ট করে

      xpath() ফাংশনে পাস করা al চ্ছিক তৃতীয় প্যারামিটারটি ক্যোয়ারির কাঙ্ক্ষিত রিটার্ন প্রকার নির্দিষ্ট করে।

      কিছু এক্সপথ কোয়েরি সংখ্যাসূচক বা বুলিয়ান মানগুলি ফিরিয়ে দিতে পারে। উদাহরণস্বরূপ count() ফাংশন একটি সংখ্যা প্রদান করে। এটি একটি বৈধ এক্সপথ কোয়েরি:

      count(//Record/Fields/Pair)

      এই বৈধ ক্যোয়ারী একটি বুলিয়ান ফেরত দেয়:

      count(//Record/Fields/Pair)>0

      এই ক্ষেত্রে তৃতীয় প্যারামিটার সহ xpath() ফাংশনটি অনুরোধ করুন:

      {xpath(expression,xml,'number')}
      {xpath(expression,xml,'boolean')}

      যদি তৃতীয় প্যারামিটারে একটি কোলন থাকে তবে এটি একটি নেমস্পেস আর্গুমেন্ট হিসাবে ব্যাখ্যা করা হয়। যদি তা না হয় তবে এটি পছন্দসই রিটার্ন টাইপ হিসাবে বিবেচিত হয়। এই ক্ষেত্রে, যদি তৃতীয় প্যারামিটারটি বৈধ মানগুলির মধ্যে একটি না হয় (কেস উপেক্ষা করে), xpath() ফাংশন একটি নোডসেট ফেরত দেওয়ার জন্য ডিফল্ট।

      Json পাথ ফাংশন

      একটি JSON ভেরিয়েবলের জন্য একটি JSON পাথ এক্সপ্রেশন প্রয়োগ করে।

      সিনট্যাক্স

      jsonPath(json-path,json-var,want-array)

      যুক্তি

      • (প্রয়োজনীয়) json-path : (স্ট্রিং) একটি জেএসএন পাথ এক্সপ্রেশন।
      • (প্রয়োজনীয়) json-var : (স্ট্রিং) একটি ফ্লো ভেরিয়েবল বা জেএসএন সহ স্ট্রিং।
      • (Al চ্ছিক) want-array : (স্ট্রিং) যদি এই প্যারামিটারটি 'true' এ সেট করা থাকে এবং যদি ফলাফল সেটটি একটি অ্যারে হয় তবে সমস্ত অ্যারে উপাদানগুলি ফিরে আসে। যদি অন্য কোনও মানতে সেট করা হয় বা যদি এই প্যারামিটারটি বাদ দেওয়া হয় তবে কেবল ফলাফলের সেট অ্যারের জেরোথ উপাদানটি ফিরে আসে। যদি ফলাফল সেটটি কোনও অ্যারে না হয় তবে এই তৃতীয় প্যারামিটারটি উপস্থিত থাকলে উপেক্ষা করা হয়।

      উদাহরণ 1

      যদি এটি বার্তা টেম্পলেট হয়:

      The address is {jsonPath($.results[?(@.name == 'Mae West')].address.line1,the_json_variable)}

      এবং the_json_variable রয়েছে:

      {
        "results" : [
          {
            "address" : {
              "line1" : "18250 142ND AV NE",
              "city" : "Woodinville",
              "state" : "Washington",
              "zip" : "98072"
            },
            "name" : "Fred Meyer"
          },
          {
            "address" : {
              "line1" : "1060 West Addison Street",
              "city" : "Chicago",
              "state" : "Illinois",
              "zip" : "60613"
            },
            "name" : "Mae West"
          }
        ]
      } 

      ফাংশনটির ফলাফল হ'ল:

      The address is 1060 West Addison Street

      নোট করুন যে এই ক্ষেত্রে, ফলাফল সেটটি একটি একক উপাদান (উপাদানগুলির একটি অ্যারে নয়)। যদি ফলাফল সেটটি একটি অ্যারে ছিল, তবে কেবল অ্যারের জেরোথ উপাদানটি ফিরে আসবে। পুরো অ্যারেটি ফিরিয়ে দিতে, তৃতীয় প্যারামিটার হিসাবে 'true' দিয়ে ফাংশনটি কল করুন, যেমনটি পরবর্তী উদাহরণে দেখানো হয়েছে।

      উদাহরণ 2

      যদি এটি বার্তা টেম্পলেট হয়:

      {jsonPath($.config.quota[?(@.operation=='ManageOrder')].appname,the_json_variable,'true')}

      এবং the_json_variable রয়েছে:

      {
        "results" : [
           {
            "config": {
              "quota": [
                {
                  "appname": "A",
                  "operation": "ManageOrder",
                  "value": "900"
                },
                {
                  "appname": "B",
                  "operation": "ManageOrder",
                  "value": "1000"
                },
                {
                  "appname": "B",
                  "operation": "SubmitOrder",
                  "value": "800"
                }
              ]
            }
          }
        ]
      } 

      ফাংশনটির ফলাফল হ'ল:

      ['A','B']
      ,

      আপনি অ্যাপিগি এজ ডকুমেন্টেশন দেখছেন।
      অ্যাপিগি এক্স ডকুমেন্টেশনে যান
      তথ্য

      এই বিষয়টি কীভাবে এপিআই প্রক্সিগুলিতে বার্তা টেম্পলেটগুলি ব্যবহার করতে হয় তা নিয়ে আলোচনা করে এবং একটি ফাংশন রেফারেন্স সরবরাহ করে।

      একটি বার্তা টেম্পলেট কি?

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

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

      আপনি কোথায় বার্তা টেম্পলেট ব্যবহার করতে পারেন তাও দেখুন?

      উদাহরণ

      উদাহরণস্বরূপ, বরাদ্দ বার্তা নীতি আপনাকে <Payload> উপাদানটির মধ্যে একটি বার্তা টেম্পলেট ব্যবহার করতে দেয়:

      <AssignMessage name="set-dynamic-content">
        <AssignTo createNew="false" type="response"></AssignTo>
        <Set>
          <Payload contentType="application/json">
            {"name":"Alert", "message":"You entered an invalid username: {user.name}"}
          </Payload>
        </Set>
        <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
      </AssignMessage>

      উপরের উদাহরণে, ফ্লো ভেরিয়েবল user.name (কোঁকড়ানো ধনুর্বন্ধনী) এর মানটি মূল্যায়ন ও রানটাইমের সময় পে -লোড স্ট্রিংয়ে প্রতিস্থাপন করা হবে। সুতরাং, উদাহরণস্বরূপ, যদি user.name=jdoe , তবে পে -লোডে ফলাফলের বার্তা আউটপুটটি হবে: You entered an invalid username: jdoe । যদি ভেরিয়েবলটি সমাধান করা যায় না, তবে একটি খালি স্ট্রিং আউটপুট।

      উদাহরণ

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

      <AssignMessage name='AM-QuotaViolationMessage'>
        <Description>message for quota exceeded</Description>
        <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
        <Set>
          <Headers>
            <Header name='X-Quota-Reset'>{ratelimit.Quota-1.expiry.time}</Header>
            <Header name='X-Quota-Allowed'>{ratelimit.Quota-1.allowed.count}</Header>
            <Header name='X-Quota-Available'>{ratelimit.Quota-1.available.count}</Header>
          </Headers>
          <Payload contentType='application/json'>{
        "error" : {
          "message" : "you have exceeded your quota",
          "clientId" : "{request.queryparam.apikey}"
        }
      }
          </Payload>
          <StatusCode>429</StatusCode>
          <ReasonPhrase>Quota Exceeded</ReasonPhrase>
        </Set>
      </AssignMessage>

      অ্যাসাইনমেসেজ নীতিতে, <Set> উপাদান সমর্থন বার্তা টেম্প্লেটিংয়ে নিম্নলিখিত উপাদানগুলি:

      • হেডার
      • QueryParam
      • ফর্মপ্যারাম
      • পেলোড
      • সংস্করণ
      • ক্রিয়া
      • পথ
      • স্ট্যাটাসকোড
      • যুক্তিযুক্ত

      আবার, নোট করুন যে কোনও বার্তা টেমপ্লেটে প্রবাহের ভেরিয়েবলগুলি অবশ্যই কোঁকড়ানো ধনুর্বন্ধনে আবদ্ধ থাকতে হবে

      যখন এই নীতি কার্যকর করে:

      • শিরোনাম উপাদানগুলি নির্দিষ্ট প্রবাহের ভেরিয়েবলের মানগুলি গ্রহণ করে।
      • পে -লোডে আক্ষরিক পাঠ্য এবং ভেরিয়েবলের মিশ্রণ অন্তর্ভুক্ত রয়েছে ( client_id গতিশীলভাবে পপুলেটেড)।
      • স্ট্যাটাসকোড এবং কারণগুলির মধ্যে কেবল আক্ষরিক পাঠ্য অন্তর্ভুক্ত; যাইহোক, এই উপাদানগুলি যদি আপনি এটি ব্যবহার করতে চান তবে বার্তা টেম্প্লেটিং সমর্থন করে।

      উদাহরণ

      একটি প্রক্সি টার্গেটেন্ডপয়েন্ট সংজ্ঞাতে, <SSLInfo> সমর্থন বার্তা টেম্প্লেটিংয়ের শিশু-উপাদানগুলি। নীতিগুলিতে ব্যবহৃত একই প্যাটার্ন অনুসরণ করে, প্রক্সি কার্যকর করার সময় কোঁকড়ানো ধনুর্বন্ধনীগুলিতে প্রবাহের ভেরিয়েবলগুলি প্রতিস্থাপন করা হয়।

      <TargetEndpoint name="default">
        
        <HTTPTargetConnection>
          <SSLInfo>
              <Enabled>{myvars.ssl.enabled}</Enabled>
              <ClientAuthEnabled>{myvars.ssl.client.auth.enabled}</ClientAuthEnabled>
              <KeyStore>{myvars.ssl.keystore}</KeyStore>
              <KeyAlias>{myvars.ssl.keyAlias}</KeyAlias>
              <TrustStore>{myvars.ssl.trustStore}</TrustStore>
          </SSLInfo>
      
        </HTTPTargetConnection>
        
      </TargetEndpoint>

      আপনি বার্তা টেম্পলেটগুলি কোথায় ব্যবহার করতে পারেন?

      বার্তা টেমপ্লেটগুলি বেশ কয়েকটি নীতিতে পাশাপাশি টার্গেটেন্ডপয়েন্ট কনফিগারেশনে ব্যবহৃত নির্দিষ্ট উপাদানগুলিতে সমর্থিত।

      নীতিগুলি যা বার্তা টেম্পলেটগুলি গ্রহণ করে

      নীতি উপাদান এবং শিশু-উপাদানগুলি যা বার্তা টেমপ্লেটগুলিকে সমর্থন করে
      অ্যাক্সেসকন্ট্রোল নীতি <SourceAddress> , mask অ্যাট্রিবিউট এবং আইপি ঠিকানার জন্য।
      অ্যাসাইনমেসেজ নীতি <Set> শিশু উপাদানগুলি: পে -লোড, কন্টেন্টটাইপ, ক্রিয়া, সংস্করণ, পাথ, স্ট্যাটাসকোড, যুক্তিবাদী, শিরোনাম, ক্যোয়ারপ্যারামস, ফর্মপ্যারামস

      <Add> শিশু উপাদানগুলি: শিরোনাম, ক্যুরপ্যারামস, ফর্মপ্যারামস

      <AssignVariable> শিশু উপাদান: <Template>

      এক্সটেনশনক্যালআউট নীতি <Input>
      এক্সট্র্যাক্টভারিয়েবলস নীতি <JsonPath>
      জেনারেটজডাব্লুএস নীতি
      যাচাই করা হয়
      <Payload> (কেবলমাত্র জেনারেটজেডব্লিউএস নীতি )

      <AdditionalHeaders><Claim>

      * এই উপাদানগুলি কেবল টাইপ = মানচিত্র যখন বার্তা টেম্পলেট সমর্থন করে।

      জেনারেটজডব্লিউটি নীতি
      যাচাই করা নীতি
      <AdditionalClaims><Claim>

      <AdditionalHeaders><Claim>

      * এই উপাদানগুলি কেবল টাইপ = মানচিত্র যখন বার্তা টেম্পলেট সমর্থন করে।

      এলডিএপি নীতি <SearchQuery>
      মেসেজলগিং নীতি <Syslog><Message>

      <File><Message>

      ওসভ্যালিডেশন নীতি <OASResource> উপাদান
      রিসফাল্ট নীতি <Set> উপাদানসমূহ: পে -লোড, কন্টেন্টটাইপ, ক্রিয়া, সংস্করণ, পাথ, স্ট্যাটাসকোড, যুক্তিবাদী, শিরোনাম, ক্যোয়ারপ্যারামস, ফর্মপ্যারামস

      <Add> উপাদানগুলি: শিরোনাম, ক্যুরপ্যারামস, ফর্মপ্যারামস

      স্যামলাসারেশন নীতি <Template>

      * কেবলমাত্র যখন নীতি স্বাক্ষরটি <GenerateSAMLAssertion> হয়

      সার্ভিসক্যালআউট নীতি <Set> উপাদানসমূহ: পে -লোড, কন্টেন্টটাইপ, ক্রিয়া, সংস্করণ, পাথ, স্ট্যাটাসকোড, যুক্তিবাদী, /শিরোনাম, ক্যোয়ারপ্যারামস, ফর্মপ্যারামস

      <Add> উপাদানগুলি: শিরোনাম, ক্যুরপ্যারামস, ফর্মপ্যারামস

      <HTTPTargetConnection>/<URL> : দ্রষ্টব্য যে স্ট্রিংয়ের প্রথম অংশটি অবশ্যই এইচটিটিপি বা এইচটিটিপিএস হতে হবে।

      টার্গেটেন্ডপয়েন্ট উপাদানগুলি যা বার্তা টেম্পলেটগুলি গ্রহণ করে

      HttpargetConnection উপাদান শিশু-উপাদানগুলি যা বার্তা টেম্পলেটগুলিকে সমর্থন করে
      Ssllinfo সক্ষম, কীলিয়াস, কীস্টোর, ট্রাস্টস্টোর, ক্লায়েন্টএথেনেবল, ক্লারস্টোর
      লোকালটারগেট সংযোগ অ্যাপিপ্রোক্সি, প্রক্সিেন্ডপয়েন্ট
      পথ লোডব্ল্যান্সার উপাদান ব্যবহার করার সময়, পাথ উপাদানটি সক্রিয় এবং একটি বার্তা টেম্পলেট গ্রহণ করে।

      বার্তা টেম্পলেট সিনট্যাক্স

      এই বিভাগটি বার্তা টেম্পলেটগুলি ব্যবহার করতে আপনাকে অবশ্যই যে নিয়মগুলি অনুসরণ করতে হবে তা ব্যাখ্যা করে।

      ভেরিয়েবলগুলি বোঝাতে কোঁকড়ানো ধনুর্বন্ধনী ব্যবহার করুন

      কোঁকড়ানো ধনুর্বন্ধনী {} এ পরিবর্তনশীল নামগুলি সংযুক্ত করুন} যদি ভেরিয়েবলটি বিদ্যমান না থাকে তবে আউটপুটে একটি খালি স্ট্রিং ফিরে আসে; তবে, আপনি বার্তা টেম্পলেটগুলিতে ডিফল্ট মানগুলি নির্দিষ্ট করতে পারেন (ভেরিয়েবলটি অমীমাংসিত হলে প্রতিস্থাপন করা মানগুলি)। বার্তা টেম্পলেটগুলিতে ডিফল্ট মান নির্ধারণ দেখুন।

      নোট করুন যে কোটগুলিতে পুরো বার্তা টেম্পলেট স্ট্রিংটি বন্ধ করে দেওয়া অনুমোদিত, তবে al চ্ছিক। উদাহরণস্বরূপ, নিম্নলিখিত দুটি বার্তা টেম্পলেট সমতুল্য:

      <Set>
          <Headers>
              <Header name="x-h1">"Hello {user.name}"</Header>
              <Header name="x-h1">Hello {user.name}</Header>
          </Headers>
      </Set>

      বার্তা টেম্পলেটগুলিতে ডিফল্ট মান সেট করা

      যদি কোনও টেম্পলেটেড ভেরিয়েবলটি সমাধান করা যায় না, তবে প্রান্তটি একটি খালি স্ট্রিংকে প্রতিস্থাপন করে। তবে আপনি নিম্নলিখিত হিসাবে একটি ডিফল্ট মান নির্দিষ্ট করতে পারেন:

      <Header name="x-h1">Test message. id = {request.header.id:Unknown}</Header>

      উপরের নমুনায় যদি পরিবর্তনশীল request.header.id সমাধান করা যায় না তবে এর মানটি Unknown দ্বারা প্রতিস্থাপন করা হয়। যেমন:

      Test message. id = Unknown

      ফাংশন এক্সপ্রেশনগুলিতে স্পেসগুলি অনুমোদিত নয়

      স্পেসগুলি বার্তা টেম্পলেট ফাংশন এক্সপ্রেশনগুলিতে কোথাও অনুমোদিত নয়। যেমন:

      অনুমোদিত:

      {substring(alpha,0,4)}
      {createUuid()}
      {randomLong(10)}

      অনুমোদিত নয়:

      {substring( alpha, 0, 4 )}
      { createUuid( ) }
      {randomLong( 10 )}

      জেএসএন পে -লোডের জন্য লিগ্যাসি সিনট্যাক্স

      ক্লাউড রিলিজ 16.08.17 এর আগে প্রান্ত সংস্করণগুলিতে, আপনি JSON পে -লোডের মধ্যে পরিবর্তনশীল রেফারেন্সগুলি বোঝাতে কোঁকড়ানো ধনুর্বন্ধনী ব্যবহার করতে পারেন নি । এই পুরানো সংস্করণগুলিতে, আপনাকে ডিলিমিটার অক্ষর নির্দিষ্ট করতে variablePrefix এবং variableSuffix বৈশিষ্ট্যগুলি ব্যবহার করতে হবে এবং সেগুলি যেমন ভেরিয়েবলের নামগুলি মোড়ানোর জন্য ব্যবহার করতে হবে:

      <Set>
        <Payload contentType="application/json" variablePrefix="@" variableSuffix="#">
          {"name":"foo", "type":"@variable_name#"}
        </Payload>
      </Set>

      যদিও অ্যাপিগি সুপারিশ করে যে আপনি নতুন কোঁকড়ানো-ব্রেস সিনট্যাক্স ব্যবহার করুন, পুরানো সিনট্যাক্সটি এখনও কাজ করে।

      বার্তা টেম্পলেট ফাংশন ব্যবহার করে

      এজ ফাংশনগুলির একটি সেট সরবরাহ করে যা আপনি পালাতে, এনকোড, হ্যাশ এবং ফর্ম্যাট স্ট্রিং ভেরিয়েবলগুলির জন্য বার্তা টেম্পলেটগুলির মধ্যে ব্যবহার করতে পারেন।

      বার্তা টেম্পলেট ফাংশনগুলি বার্তা টেম্পলেট ফাংশন রেফারেন্সে বিশদভাবে বর্ণনা করা হয়েছে।

      উদাহরণ: টোলওয়ারকেস ()

      স্ট্রিং ভেরিয়েবলকে ছোট হাতের দিকে রূপান্তর করতে অন্তর্নির্মিত toLowerCase() ফাংশনটি ব্যবহার করুন:

      <AssignMessage name="AM-Set-Custom-Response">
          <AssignTo createNew="false" type="response"/>
          <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
          <Set>
              <Headers>
                  <Header name="x-h1">Test header: {toLowerCase(foo.bar:FOO)}</Header>
              </Headers>
          </Set>
      </AssignMessage>

      যদি foo.bar ফ্লো ভেরিয়েবলটি সমাধান করে তবে এর অক্ষরগুলি সমস্ত ছোট হাতের হবে। যদি foo.bar সমাধান না করা হয় তবে ডিফল্ট মান FOO প্রতিস্থাপন করা হয় এবং ছোট অক্ষরগুলিতে রূপান্তরিত হয়। যেমন:

      Test header: foo

      উদাহরণ: এস্কেপজসন ()

      এখানে একটি আকর্ষণীয় ব্যবহারের কেস রয়েছে: আসুন আমরা বলি যে আপনার ব্যাকএন্ড অ্যাপটি একটি জেএসএন প্রতিক্রিয়া দেয় যা বৈধ পালানোর অক্ষর ধারণ করে। যেমন:

      {
            "code": "INVALID",
            "user_message": "Invalid value for \"logonId\" check your input."
      }

      তারপরে, ধরা যাক আপনি এই বার্তাটি কাস্টম পে -লোডে ক্লায়েন্ট কলারের কাছে ফিরিয়ে দিতে চান। এটি করার স্বাভাবিক উপায় হ'ল টার্গেট রেসপন্স পে -লোড থেকে বার্তাটি বের করা এবং এটি একটি কাস্টম প্রক্সি প্রতিক্রিয়াতে যুক্ত করার জন্য বার্তাটি ব্যবহার করা (এটি ক্লায়েন্টকে এটি ফেরত পাঠান)।

      এখানে এক্সট্রাক্ট ভেরিয়েবল নীতি যা user_message তথ্যকে একটি ভেরিয়েবলে standard.systemMessage নামে পরিচিত করে et সিস্টেমমেসেজ:

      <ExtractVariables name="EV-BackendErrorResponse">
          <DisplayName>EV-BackendErrorResponse</DisplayName>
          <JSONPayload>
              <Variable name="standard.systemMessage">
                  <JSONPath>$.user_message</JSONPath>
              </Variable>
          </JSONPayload>
      </ExtractVariables>

      এখন, এখানে একটি পুরোপুরি বৈধ অ্যাসাইন বার্তা নীতি যা প্রতিক্রিয়া পে -লোডে (প্রক্সি প্রতিক্রিয়া) নিষ্কাশিত ভেরিয়েবল যুক্ত করে:

      <AssignMessage name="AM-SetStandardFaultResponse">
          <DisplayName>AM-SetStandardFaultResponse</DisplayName>
          <Set>
              <Payload contentType="application/json">
                 {
                    "systemMessage": "{standard.systemMessage}"
                 }
              </Payload>
          </Set>
          <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
          <AssignTo createNew="false" transport="http" type="response"/>
      </AssignMessage>


      দুর্ভাগ্যক্রমে, একটি সমস্যা আছে। এক্সট্রাক্ট ভেরিয়েবল নীতি বার্তার অংশের চারপাশে পালানো উদ্ধৃতি অক্ষরগুলি সরিয়ে দেয়। এর অর্থ ক্লায়েন্টের কাছে ফিরে আসা প্রতিক্রিয়াটি অবৈধ JSON। এটি স্পষ্টভাবে আপনি যা চান তা নয়!

      {
          "systemMessage": "Invalid value for "logonId" check your input."
      }

      এই সমস্যাটি ঘিরে কাজ করার জন্য, আপনি আপনার জন্য JSON এর মধ্যে উদ্ধৃতিগুলি এড়িয়ে গিয়ে কোনও বার্তা টেম্পলেট ফাংশন ব্যবহার করার জন্য বার্তা নীতিটি সংশোধন করতে পারেন। এই ফাংশন, escapeJSON() , কোনও জেসন এক্সপ্রেশনের মধ্যে ঘটে যাওয়া কোনও উদ্ধৃতি বা অন্যান্য বিশেষ অক্ষর থেকে রক্ষা পায়:

      <AssignMessage name="AM-SetStandardFaultResponse">
          <DisplayName>AM-SetStandardFaultResponse</DisplayName>
          <Set>
              <Payload contentType="application/json">
                 {
                    "systemMessage": "{escapeJSON(standard.systemMessage)}"
                 }
              </Payload>
          </Set>
          <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
          <AssignTo createNew="false" transport="http" type="response"/>
      </AssignMessage>


      ফাংশনটি এম্বেড থাকা উদ্ধৃতিগুলি থেকে রক্ষা পায়, ফলস্বরূপ বৈধ জেএসওএন, যা আপনি চেয়েছিলেন ঠিক তাই:

      {
            "systemMessage": "Invalid value for \"logonId\" check your input.",
      }

      একটি বার্তা টেমপ্লেট একটি গতিশীল স্ট্রিং প্রতিস্থাপন বৈশিষ্ট্য যা আপনি নির্দিষ্ট নীতিগুলিতে এবং টার্গেট পয়েন্ট সংজ্ঞাতে ব্যবহার করতে পারেন। বার্তা টেমপ্লেট ফাংশনগুলি আপনাকে হ্যাশিং, স্ট্রিং ম্যানিপুলেশন, চরিত্রের পলায়ন এবং অন্যদের একটি বার্তা টেমপ্লেটের মধ্যে দরকারী অপারেশনগুলি সম্পাদন করতে দেয়।

      উদাহরণস্বরূপ, নিম্নলিখিত অ্যাসাইনমেসেজ নীতিতে, ফাংশন toLowerCase() একটি বার্তা টেমপ্লেটে ব্যবহৃত হয়:

      <AssignMessage name="AM-Set-Custom-Response">
          <AssignTo createNew="false" type="response"/>
          <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
          <Set>
             <Headers>
               <Header name="x-h1">Test header: {Hello, toLowerCase(user.name)}</Header>
             </Headers>
          </Set>
      </AssignMessage>

      এই বিষয়টি বার্তা টেম্পলেট ফাংশন, তাদের যুক্তি এবং আউটপুটগুলি বর্ণনা করে। এই বিষয়টি ধরে নিয়েছে যে আপনি বার্তা টেম্পলেট এবং যে প্রসঙ্গে সেগুলি ব্যবহৃত হয় তার সাথে আপনি পরিচিত।

      হ্যাশ ফাংশন

      একটি হ্যাশ মান গণনা করুন এবং সেই হ্যাশের স্ট্রিং উপস্থাপনা ফিরিয়ে দিন।

      হেক্সাডেসিমাল হ্যাশ ফাংশন

      একটি হ্যাশ মান গণনা করুন এবং হেক্সাডেসিমাল সংখ্যা হিসাবে সেই হ্যাশের স্ট্রিং উপস্থাপনা ফিরিয়ে দিন।

      সিনট্যাক্স

      ফাংশন বর্ণনা
      md5Hex(string) হেক্সাডেসিমাল সংখ্যা হিসাবে প্রকাশিত একটি এমডি 5 হ্যাশ গণনা করে।
      sha1Hex(string) হেক্সাডেসিমাল সংখ্যা হিসাবে প্রকাশিত একটি SHA1 হ্যাশ গণনা করে।
      sha256Hex(string) হেক্সাডেসিমাল সংখ্যা হিসাবে প্রকাশিত একটি SHA256 হ্যাশ গণনা করে।
      sha384Hex(string) হেক্সাডেসিমাল সংখ্যা হিসাবে প্রকাশিত একটি SHA384 হ্যাশ গণনা করে।
      sha512Hex(string) হেক্সাডেসিমাল সংখ্যা হিসাবে প্রকাশিত একটি SHA512 হ্যাশ গণনা করে।

      যুক্তি

      স্ট্রিং - হ্যাশ ফাংশনগুলি একটি একক স্ট্রিং আর্গুমেন্ট নেয় যার উপর হ্যাশ অ্যালগরিদম গণনা করা হয়। যুক্তিটি আক্ষরিক স্ট্রিং বা স্ট্রিং ফ্লো ভেরিয়েবল হতে পারে।

      উদাহরণ

      ফাংশন কল:

      sha256Hex('abc')

      ফলাফল:

      ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad

      ফাংশন কল:

      var str = 'abc';
      sha256Hex(str)

      ফলাফল:

      ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad

      বেস 64 হ্যাশ ফাংশন

      একটি হ্যাশ মান গণনা করুন এবং বেস 64 এনকোডেড মান হিসাবে সেই হ্যাশের স্ট্রিং উপস্থাপনা ফিরিয়ে দিন।

      সিনট্যাক্স

      ফাংশন বর্ণনা
      md5Base64(string) একটি এমডি 5 হ্যাশকে বেস 64 এনকোডেড মান হিসাবে প্রকাশ করা হয়েছে।
      sha1Base64(string) বেস 64 এনকোডেড মান হিসাবে প্রকাশিত একটি SHA1 হ্যাশ গণনা করে।
      sha256Base64(string) বেস 64 এনকোডেড মান হিসাবে প্রকাশিত একটি SHA256 হ্যাশ গণনা করে।
      sha384Base64(string) বেস 64 এনকোডেড ভ্যালুয়ার হিসাবে প্রকাশিত একটি Sha384 হ্যাশ গণনা করে।
      sha512Base64(string) বেস 64 এনকোডেড মান হিসাবে প্রকাশিত একটি SHA512 হ্যাশ গণনা করে।

      যুক্তি

      স্ট্রিং - হ্যাশ ফাংশনগুলি একটি একক স্ট্রিং আর্গুমেন্ট নেয় যার উপর হ্যাশ অ্যালগরিদম গণনা করা হয়। যুক্তিটি আক্ষরিক স্ট্রিং বা স্ট্রিং ফ্লো ভেরিয়েবল হতে পারে।

      উদাহরণ

      ফাংশন কল:

      sha256Base64('abc')

      ফলাফল:

      ungWv48Bz+pBQUDeXa4iI7ADYaOWF3qctBD/YfIAFa0=

      ফাংশন কল:

      var str = 'abc';
      sha256Base64(str)

      ফলাফল:

      ungWv48Bz+pBQUDeXa4iI7ADYaOWF3qctBD/YfIAFa0=

      স্ট্রিং ফাংশন

      একটি বার্তা টেম্পলেট মধ্যে স্ট্রিং উপর অপারেশন সম্পাদন করুন।

      বেস 64 এনকোডিং ফাংশন

      বেস 64 এনকোডিং স্কিম ব্যবহার করে এনকোড এবং ডিকোড স্ট্রিং।

      সিনট্যাক্স

      ফাংশন বর্ণনা
      encodeBase64(string) বেস 64 এনকোডিং ব্যবহার করে একটি স্ট্রিং এনকোড করে। উদাহরণস্বরূপ: encodeBase64( value ) , যখন value abc ধারণ করে, ফাংশনটি স্ট্রিংটি দেয়: YWJj
      decodeBase64(string) একটি বেস 64 এনকোডযুক্ত স্ট্রিং ডিকোড করে। উদাহরণস্বরূপ: decodeBase64( value ) যখন value aGVsbG8sIHdvcmxk ধারণ করে, তখন ফাংশনটি স্ট্রিং hello, world ফিরিয়ে দেয়।

      যুক্তি

      স্ট্রিং - এনকোড বা ডিকোড করার জন্য স্ট্রিং। আক্ষরিক স্ট্রিং বা স্ট্রিং ফ্লো ভেরিয়েবল হতে পারে।

      উদাহরণ

      <AssignMessage name="AM-Set-Custom-Response">
          <AssignTo createNew="false" type="response"/>
          <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
          <Set>
             <Headers>
               <Header name="x-h1">Hello, {decodeBase64('d29ybGQK')}</Header>
             </Headers>
          </Set>
      </AssignMessage>

      কেস রূপান্তর ফাংশন

      একটি স্ট্রিং সমস্ত বড় হাতের বা সমস্ত ছোট হাতের অক্ষরে রূপান্তর করুন।

      সিনট্যাক্স

      ফাংশন বর্ণনা
      toUpperCase(string) একটি স্ট্রিং বড় হাতের মধ্যে রূপান্তর করুন।
      toLowerCase(string) একটি স্ট্রিংকে ছোট হাতের দিকে রূপান্তর করুন।


      যুক্তি

      স্ট্রিং - রূপান্তর করতে স্ট্রিং। আক্ষরিক স্ট্রিং বা স্ট্রিং ফ্লো ভেরিয়েবল হতে পারে।

      উদাহরণ

      <AssignMessage name="AM-Set-Custom-Response">
          <AssignTo createNew="false" type="response"/>
          <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
          <Set>
             <Headers>
               <Header name="x-h1">Hello, {toLowerCase(user.name)}</Header>
             </Headers>
          </Set>
      </AssignMessage>

      সাবস্ট্রিং ফাংশন

      নির্দিষ্ট স্ট্রিংয়ের শুরু এবং শেষ সূচকের মধ্যে অক্ষরগুলি ফিরিয়ে দেয়।

      সিনট্যাক্স

      substring(str,start_index,end_index)

      যুক্তি

      • স্ট্র - একটি আক্ষরিক স্ট্রিং বা স্ট্রিং ফ্লো ভেরিয়েবল।
      • START_INDEX - স্ট্রিংয়ে শুরু সূচক।
      • end_index - (al চ্ছিক) স্ট্রিংয়ে শেষ সূচক। যদি সরবরাহ না করা হয় তবে সমাপ্তি সূচকটি স্ট্রিংয়ের শেষ।

      উদাহরণ

      নিম্নলিখিত উদাহরণগুলির জন্য, ধরুন যে এই প্রবাহের ভেরিয়েবলগুলি বিদ্যমান:

      পরিবর্তনশীল নাম মান
      alpha ABCDEFGHIJKLMNOPQRSTUVWXYZ
      seven 7


      এখানে ফাংশন কলগুলির ফলাফল রয়েছে যা এই ভেরিয়েবলগুলি ব্যবহার করে:

      বার্তা টেম্পলেট এক্সপ্রেশন ফলাফল
      {substring(alpha,22)} WXYZ
      hello {substring(alpha,22)} hello WXYZ
      {substring(alpha,-4)} WXYZ
      {substring(alpha,-8,-4)} STUV
      {substring(alpha,0,10)} ABCDEFGHIJ
      {substring(alpha,0,seven)} ABCDEFG

      সমস্ত ফাংশন প্রতিস্থাপন

      একটি স্ট্রিং এবং যে কোনও ম্যাচের জন্য নিয়মিত অভিব্যক্তি প্রয়োগ করে, ম্যাচটিকে প্রতিস্থাপনের মান দিয়ে প্রতিস্থাপন করে।

      সিনট্যাক্স

      replaceAll(string,regex,value)

      যুক্তি

      • স্ট্রিং - একটি আক্ষরিক স্ট্রিং বা স্ট্রিং ফ্লো ভেরিয়েবল যাতে প্রতিস্থাপন করা যায়।
      • রেজেক্স - একটি নিয়মিত অভিব্যক্তি।
      • মান - স্ট্রিংয়ের মধ্যে সমস্ত রেজেক্স ম্যাচগুলি প্রতিস্থাপনের মান।

      উদাহরণ

      নিম্নলিখিত উদাহরণগুলির জন্য, ধরুন এই প্রবাহের ভেরিয়েবলগুলি বিদ্যমান:

      পরিবর্তনশীল নাম মান
      header Bearer ABCDEFGHIJKLMNOPQRSTUVWXYZ-9993
      regex1 "^Bearer "
      replacement "TOKEN: "

      এখানে ফাংশন কলগুলির ফলাফল রয়েছে যা এই ভেরিয়েবলগুলি ব্যবহার করে:

      বার্তা টেম্পলেট এক্সপ্রেশন ফলাফল
      {replaceAll(header,"9993",'')} Bearer ABCDEFGHIJKLMNOPQRSTUVWXYZ-
      {replaceAll(header,regex1,'')} ABCDEFGHIJKLMNOPQRSTUVWXYZ-9993
      {replaceAll(header,regex1,replacement)} TOKEN: ABCDEFGHIJKLMNOPQRSTUVWXYZ-9993

      প্রথম ফাংশন প্রতিস্থাপন

      স্ট্রিংয়ে নির্দিষ্ট নিয়মিত এক্সপ্রেশন ম্যাচের প্রথম ঘটনাটি প্রতিস্থাপন করে।

      সিনট্যাক্স

      replaceFirst(string,regex,value)

      যুক্তি

      • স্ট্রিং - একটি আক্ষরিক স্ট্রিং বা স্ট্রিং ফ্লো ভেরিয়েবল যাতে প্রতিস্থাপন করা যায়।
      • রেজেক্স - একটি নিয়মিত অভিব্যক্তি।
      • মান - স্ট্রিংয়ের মধ্যে রেজেক্স ম্যাচগুলি প্রতিস্থাপনের মান।

      চরিত্র পালানো এবং এনকোডিং ফাংশন

      ফাংশনগুলি যা একটি স্ট্রিংয়ে বিশেষ অক্ষরগুলি পালাতে বা এনকোড করে।

      সিনট্যাক্স

      ফাংশন বর্ণনা
      এস্কেপজসন (স্ট্রিং) ব্যাকস্ল্যাশ-এস্কেপস ডাবল-কোটস।
      এস্কাপেক্সএমএল (স্ট্রিং) কোণ বন্ধনী, অ্যাপোস্ট্রোফ, ডাবল-কোয়েট এবং এম্পারস্যান্ডগুলি সম্পর্কিত এক্সএমএল সত্তাগুলির সাথে প্রতিস্থাপন করে। এক্সএমএল 1.0 নথির জন্য ব্যবহার করুন।

      এস্কাপেক্সএমএল 11 (স্ট্রিং) এস্কাপেক্সএমএল এর মতো একইভাবে কাজ করে তবে এক্সএমএল ভি 1.1 সত্তার জন্য। নীচে ব্যবহার নোট দেখুন।
      এনকোডেটিএমএল (স্ট্রিং) এনকোডগুলি অ্যাপোস্ট্রোফ, কোণ বন্ধনী এবং এম্পারস্যান্ড।

      যুক্তি

      স্ট্রিং - পালানোর জন্য স্ট্রিং। আক্ষরিক স্ট্রিং বা স্ট্রিং ফ্লো ভেরিয়েবল হতে পারে।

      ব্যবহারের নোট

      এক্সএমএল 1.1 নির্দিষ্ট নিয়ন্ত্রণের অক্ষরের প্রতিনিধিত্ব করতে পারে, তবে এটি পালানোর পরেও নাল বাইট বা আনপায়ারড ইউনিকোড সারোগেট কোডপয়েন্টগুলি উপস্থাপন করতে পারে না। এস্কাপেক্সএমএল 11 () ফাংশনটি এমন অক্ষরগুলি সরিয়ে দেয় যা নিম্নলিখিত রেঞ্জগুলিতে ফিট করে না:

      [#x1-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]

      escapeXML11() ফাংশন নিম্নলিখিত রেঞ্জগুলিতে অক্ষরগুলি এড়িয়ে চলেছে:

      [#x1-#x8] | [#xB-#xC] | [#xE-#x1F] | [#x7F-#x84] | [#x86-#x9F]

      উদাহরণ

      এই মানটির সাথে খাদ্য নামক একটি প্রবাহের পরিবর্তনশীল অনুমান করুন: "bread" & "butter" । তারপরে, ফাংশন:

      {escapeHTML(food)}

      ফলাফল:

      &quot;bread&quot; &amp; &quot;butter&quot;

      সময় ফর্ম্যাট ফাংশন

      স্থানীয় সময় অঞ্চলে বা ইউটিসিতে ফর্ম্যাট করা সময়ের একটি স্ট্রিং উপস্থাপনা ফিরিয়ে দিন।

      সিনট্যাক্স

      ফাংশন বর্ণনা
      timeFormat(format,str) স্থানীয় সময় অঞ্চলে তারিখের বিন্যাসটি ফেরত দেয়।
      timeFormatMs(format,str) স্থানীয় সময় অঞ্চলে তারিখের বিন্যাসটি ফেরত দেয়।
      timeFormatUTC(format,str) ইউটিসিতে তারিখের বিন্যাসটি ফেরত দেয়।
      timeFormatUTCMs(format,str) ইউটিসিতে তারিখের বিন্যাসটি ফেরত দেয়।

      যুক্তি

      • ফর্ম্যাট - একটি তারিখ/সময় ফর্ম্যাট স্ট্রিং। আক্ষরিক স্ট্রিং বা স্ট্রিং ভেরিয়েবল হতে পারে।
      • এসআরটি - একটি সময় মান সমন্বিত একটি স্ট্রিং বা স্ট্রিং ফ্লো ভেরিয়েবল। টাইমফর্ম্যাটমসের জন্য মানটি কয়েক সেকেন্ডের মধ্যে হতে পারে বা মিলিসেকেন্ড-এ-এপোক।

      উদাহরণ

      নিম্নলিখিত মানগুলি ধরে নিন এবং ধরে নিন স্থানীয় টাইমজোনটি প্রশান্ত মহাসাগর:

      • epoch_time_ms = 1494390266000
      • epoch_time = 1494390266
      • fmt1 = yyyy-MM-dd
      • fmt2 = yyyy-MM-dd HH-mm-ss
      • fmt3 = yyyyMMddHHmmss

      ফাংশনগুলি নিম্নলিখিত ফলাফলগুলি ফিরিয়ে দেয়:

        ফাংশন আউটপুট
        timeFormatMs(fmt1,epoch_time_ms) 2017-05-09
        timeFormat(fmt1,epoch_time) 2017-05-09
        timeFormat(fmt2,epoch_time) 2017-05-09 21:24:26
        timeFormat(fmt3,epoch_time) 20170509212426
        timeFormatUTC(fmt1,epoch_time) 2017-05-10
        timeFormatUTC(fmt2,epoch_time) 2017-05-10 04:24:26
        timeFormatUTC(fmt3,epoch_time) 20170510042426

        এইচএমএসি গণনা ফাংশন

        এইচএমএসি গণনা ফাংশনগুলি এইচএমএসি গণনা করতে এইচএমএসি নীতি ব্যবহারের বিকল্প সরবরাহ করে। ক্যাসকেড এইচএমএসি গণনা সম্পাদন করার সময় ফাংশনগুলি কার্যকর হয়, যখন কোনও এইচএমএসি এর আউটপুট দ্বিতীয় এইচএমএসি -র কী হিসাবে ব্যবহৃত হয়।

        সিনট্যাক্স

        ফাংশন বর্ণনা
        hmacSha224(key,valueToSign[,keyencoding[,outputencoding]]) SHA-224 হ্যাশ ফাংশন সহ একটি এইচএমএসি গণনা করে।
        hmacSha256(key,valueToSign[,keyencoding[,outputencoding]]) SHA-256 হ্যাশ ফাংশন সহ একটি এইচএমএসি এনকোড করে।
        hmacSha384(key,valueToSign[,keyencoding[,outputencoding]]) SHA-384 হ্যাশ ফাংশন সহ একটি এইচএমএসি এনকোড করে।
        hmacSha512(key,valueToSign[,keyencoding[,outputencoding]]) SHA-512 হ্যাশ ফাংশন সহ একটি এইচএমএসি এনকোড করে।
        hmacMd5(key,valueToSign[,keyencoding[,outputencoding]]) এমডি 5 হ্যাশ ফাংশন সহ একটি এইচএমএসি এনকোড করে।
        hmacSha1(key, valueToSign [,keyencoding[,outputencoding]]) SHA-1 এনক্রিপশন অ্যালগরিদম সহ একটি এইচএমএসি এনকোড করে।

        যুক্তি

        • কী - (প্রয়োজনীয়) গোপন কীটি নির্দিষ্ট করে, একটি স্ট্রিং হিসাবে এনকোড করা, এইচএমএসি গণনা করতে ব্যবহৃত।
        • ভ্যালুয়েটোসাইন - (প্রয়োজনীয়) সাইন ইন বার্তাটি নির্দিষ্ট করে। এটি একটি স্ট্রিং হওয়া উচিত।
        • কীঙ্কোডিং - (al চ্ছিক) সিক্রেট কী স্ট্রিংটি এই নির্দিষ্ট এনকোডিং অনুসারে ডিকোড করা হবে। বৈধ মান: hex , base16 , base64 , utf-8 । ডিফল্ট: utf-8
        • আউটপুটেনকোডিং - (al চ্ছিক) আউটপুটটির জন্য ব্যবহার করতে এনকোডিং অ্যালগরিদম নির্দিষ্ট করে। বৈধ মান: hex , base16 , base64 । মানগুলি কেস সংবেদনশীল; hex এবং base16 প্রতিশব্দ। ডিফল্ট: base64

        উদাহরণ

        এই উদাহরণটি এইচএমএসি -256 গণনা করতে এবং এটি একটি ফ্লো ভেরিয়েবলকে বরাদ্দ করতে অ্যাসাইনমেসেজ নীতি ব্যবহার করে:

        <AssignMessage name='AM-HMAC-1'>
          <AssignVariable>
            <Name>valueToSign</Name>
            <Template>{request.header.apikey}.{request.header.date}</Template>
          </AssignVariable>
          <AssignVariable>
            <Name>hmac_value</Name>
            <Template>{hmacSha256(private.secretkey,valueToSign)}</Template>
          </AssignVariable>
        </AssignMessage>

        এই উদাহরণটি চিত্রিত করে যে কীভাবে একটি ক্যাসকেডিং এইচএমএসি তৈরি করা যায় যা এডাব্লুএস স্বাক্ষর ভি 4 স্বাক্ষর প্রক্রিয়াটির সাথে ব্যবহার করা যেতে পারে। উদাহরণটি এডাব্লুএস স্বাক্ষর v4 এর জন্য স্বাক্ষর গণনা করতে ব্যবহৃত পাঁচটি ক্যাসকেড এইচএমএসি এর পাঁচটি স্তর তৈরি করতে অ্যাসাইনমেসেজ নীতি ব্যবহার করে:

        <AssignMessage name='AM-HMAC-AWS-1'>
          <!-- 1 -->
          <AssignVariable>
            <Name>DateValue</Name>
            <Template>{timeFormatUTCMs('yyyyMMdd',system.timestamp)}</Template>
          </AssignVariable>
          <!-- 2 -->
          <AssignVariable>
            <Name>FirstKey</Name>
            <Template>AWS4{private.secret_aws_access_key}</Template>
          </AssignVariable>
          <!-- 3 -->
          <AssignVariable>
            <Name>DateKey</Name>
            <Template>{hmacSha256(FirstKey,DateValue,'utf-8','base16')}</Template>
          </AssignVariable>
          <!-- 4 -->
          <AssignVariable>
            <Name>DateRegionKey</Name>
            <Template>{hmacSha256(DateKey,aws_region,'base16','base16')}</Template>
          </AssignVariable>
          <!-- 5 -->
          <AssignVariable>
            <Name>DateRegionServiceKey</Name>
            <Template>{hmacSha256(DateRegionKey,aws_service,'base16','base16')}</Template>
          </AssignVariable>
          <!-- 6 -->
          <AssignVariable>
            <Name>SigningKey</Name>
            <Template>{hmacSha256(DateRegionServiceKey,'aws4_request','base16','base16')}</Template>
          </AssignVariable>
          <!-- 7 -->
          <AssignVariable>
            <Name>aws4_hmac_value</Name>
            <Template>{hmacSha256(SigningKey,stringToSign,'base16','base16')}</Template>
          </AssignVariable>
        </AssignMessage>

        অন্যান্য ফাংশন

        ইউআইডি ফাংশন তৈরি করুন

        একটি ইউইড উত্পন্ন এবং ফেরত দেয়।

        সিনট্যাক্স

        createUuid()

        যুক্তি

        কোনোটিই নয়।

        উদাহরণ

        { createUuid()}

        নমুনা ফলাফল:

        ec3ca9be-d1e1-4ef4-aee4-4a58f3130db8

        এলোমেলো দীর্ঘ জেনারেটর ফাংশন

        একটি এলোমেলো দীর্ঘ পূর্ণসংখ্যা প্রদান করে।

        সিনট্যাক্স

        randomLong(args)

        যুক্তি

        • যদি কোনও যুক্তি নির্দিষ্ট না করা হয় তবে জাভা সিকিউরানডম ক্লাস দ্বারা গণনা করা হিসাবে ফাংশনটি একটি এলোমেলো দীর্ঘ পূর্ণসংখ্যা দেয়।
        • যদি একটি যুক্তি উপস্থিত থাকে তবে এটি গণনার ন্যূনতম মান হিসাবে বিবেচিত হয়।
        • যদি দ্বিতীয় যুক্তি উপস্থিত থাকে তবে এটি গণনার সর্বাধিক মান হিসাবে বিবেচিত হয়।

        উদাহরণ

        {random()}

        এরকম কিছু ফলাফল:

        5211338197474042880

        রেজেক্স পাঠ্য জেনারেটর

        একটি পাঠ্য স্ট্রিং তৈরি করুন যা প্রদত্ত নিয়মিত অভিব্যক্তির সাথে মেলে।

        সিনট্যাক্স

        xeger(regex)

        যুক্তি

        রেজেক্স - একটি নিয়মিত অভিব্যক্তি।

        উদাহরণ

        এই উদাহরণটি কোনও জিরো ছাড়াই একটি সাত অঙ্কের স্ট্রিং উত্পন্ন করে:

        xeger('[1-9]{7}')

        উদাহরণ ফলাফল:

        9857253

        নাল-কোয়েলেসিং ফাংশন

        firstnonnull() ফাংশনটি বাম-সর্বাধিক, নন-নাল আর্গুমেন্টের মান প্রদান করে।

        সিনট্যাক্স

        firstnonnull(var1,varn)

        যুক্তি

        var1 - একটি প্রসঙ্গ পরিবর্তনশীল।

        var n - এক বা একাধিক প্রসঙ্গ ভেরিয়েবল। আপনি একটি ফ্যালব্যাক মান সরবরাহ করতে ডান-সর্বাধিক যুক্তিটি একটি স্ট্রিংয়ের কাছে সেট করতে পারেন (বাম-হাতের যুক্তিগুলির কোনওটি সেট না করা হলে সেট করা হবে)।

        উদাহরণ

        নিম্নলিখিত টেবিলটি কীভাবে ফাংশনটি ব্যবহার করবেন তা চিত্রিত করে:

        টেমপ্লেট Var1 Var2 Var3 ফলাফল
        {firstnonnull(var1,var2)} সেট করা হয়নি foo N/A foo
        {firstnonnull(var1,var2)} foo bar N/A foo
        {firstnonnull(var1,var2)} foo সেট করা হয়নি N/A foo
        {firstnonnull(var1,var2,var3)} foo bar baz foo
        {firstnonnull(var1,var2,var3)} সেট করা হয়নি bar baz bar
        {firstnonnull(var1,var2,var3)} সেট করা হয়নি সেট করা হয়নি baz baz
        {firstnonnull(var1,var2,var3)} সেট করা হয়নি সেট করা হয়নি সেট করা হয়নি null
        {firstnonnull(var1)} সেট করা হয়নি N/A N/A null
        {firstnonnull(var1)} foo N/A N/A foo
        {firstnonnull(var1,var2)} "" bar N/A ""
        {firstnonnull(var1,var2,'fallback value')} null null fallback value fallback value

        এক্সপথ ফাংশন

        একটি এক্সএমএল ভেরিয়েবলের জন্য একটি এক্সপথ এক্সপ্রেশন প্রয়োগ করে।

        সিনট্যাক্স

        xpath(xpath_expression,xml_string,[datatype])

        যুক্তি

        এক্সপথ_ এক্সপ্রেসন - একটি এক্সপথ এক্সপ্রেশন।

        এক্সএমএল_স্ট্রিং - এক্সএমএলযুক্ত একটি ফ্লো ভেরিয়েবল বা স্ট্রিং।

        ডেটাটাইপ - (al চ্ছিক) ক্যোয়ারির কাঙ্ক্ষিত রিটার্ন ধরণের নির্দিষ্ট করে। এটি নোডসেট, নোড, নম্বর, বুলিয়ান, স্ট্রিং হতে পারে। এটি নোডসেটে ডিফল্ট হয়। ডিফল্ট সাধারণত সঠিক পছন্দ।

        উদাহরণ 1

        ধরুন এই প্রসঙ্গের ভেরিয়েবলগুলি একটি এক্সএমএল স্ট্রিং এবং একটি এক্সপথ এক্সপ্রেশনকে সংজ্ঞায়িত করে:

        xml = "<tag><tagid>250397</tagid><readerid>1</readerid><rssi>74</rssi><date>2019/06/15</date></tag>"
        xpath = "/tag/tagid"

        এবং xpath() ফাংশনটি একটি অ্যাসাইনমেসেজ নীতিতে ব্যবহৃত হয়, নিম্নরূপ:

        <AssignMessage>
          <AssignVariable>
            <Name>extracted_tag</Name>
            <Template>{xpath(xpath,xml)}</Template>
          </AssignVariable>
        </AssignMessage><

        ফাংশনটি <tagid>250397</tagid> মানটি প্রদান করে। এই মানটি extracted_tag নামক প্রসঙ্গে ভেরিয়েবলে স্থাপন করা হয়।

        উদাহরণ 2

        আপনি যদি কেবল নোডের মান চান তবে নিম্নলিখিত হিসাবে text() ফাংশনটি ব্যবহার করুন:

        <AssignMessage>
          <AssignVariable>
            <Name>extracted_tag</Name>
            <Template>{xpath('/tag/tagid/text()',xml)}</Template>
          </AssignVariable>
        </AssignMessage>

        এই অপারেশনের ফলস্বরূপ, প্রসঙ্গটি ভেরিয়েবল extracted_tag 250397 এ সেট করা আছে

        যদি একাধিক নোড নির্বাচন করা হয়, তবে xpath() এর ফলাফলটি নির্বাচনের সমস্ত মান, কমা দিয়ে সংযুক্ত।

        উদাহরণ 3: এক্সএমএল নেমস্পেস

        একটি নেমস্পেস নির্দিষ্ট করতে, অতিরিক্ত পরামিতিগুলি যুক্ত করুন, প্রতিটি একটি স্ট্রিং যা prefix:namespaceuri । উদাহরণস্বরূপ, একটি xpath() ফাংশন যা একটি সাবান দেহের শিশু উপাদান নির্বাচন করে তা এর মতো হতে পারে:

        <AssignMessage>
          <AssignVariable>
            <Name>soapns</Name>
            <Value>soap:http://schemas.xmlsoap.org/soap/envelope/</Value>
          </AssignVariable>
          <AssignVariable>
            <Name>xpathexpression</Name>
            <Value>/soap:Envelope/soap:Body/*</Value>
          </AssignVariable>
          <AssignVariable>
            <Name>extracted_element</Name>
            <Template>{xpath(xpathexpression,xml,soapns)}</Template>
          </AssignVariable>
        </AssignMessage>

        অতিরিক্ত নেমস্পেসগুলির জন্য, আপনি xpath() ফাংশনে 10 টি পর্যন্ত অতিরিক্ত পরামিতি যুক্ত করতে পারেন।

        আপনি একক উদ্ধৃতি দ্বারা বেষ্টিত স্ট্রিং হিসাবে একটি সাধারণ এক্সপথ এক্সপ্রেশন নির্দিষ্ট করতে পারেন:

        {xpath('/tag/tagid/text()',xml)}

        যদি এক্সপথ এক্সপ্রেশনটিতে নেমস্পেস উপসর্গগুলি (এবং কলোনস) অন্তর্ভুক্ত থাকে তবে আপনাকে সেই এক্সপথ এক্সপ্রেশনটি একটি ভেরিয়েবলের সাথে নির্ধারণ করতে হবে এবং সরাসরি অভিব্যক্তির পরিবর্তে ভেরিয়েবলের নাম নির্দিষ্ট করতে হবে।

        {xpath(xpathexpression,xml,ns1)}

        উদাহরণ 4: একটি পছন্দসই রিটার্ন প্রকার নির্দিষ্ট করে

        xpath() ফাংশনে পাস করা al চ্ছিক তৃতীয় প্যারামিটারটি ক্যোয়ারির কাঙ্ক্ষিত রিটার্ন প্রকার নির্দিষ্ট করে।

        কিছু এক্সপথ কোয়েরি সংখ্যাসূচক বা বুলিয়ান মানগুলি ফিরিয়ে দিতে পারে। উদাহরণস্বরূপ count() ফাংশন একটি সংখ্যা প্রদান করে। এটি একটি বৈধ এক্সপথ কোয়েরি:

        count(//Record/Fields/Pair)

        এই বৈধ ক্যোয়ারী একটি বুলিয়ান ফেরত দেয়:

        count(//Record/Fields/Pair)>0

        এই ক্ষেত্রে তৃতীয় প্যারামিটার সহ xpath() ফাংশনটি অনুরোধ করুন:

        {xpath(expression,xml,'number')}
        {xpath(expression,xml,'boolean')}

        যদি তৃতীয় প্যারামিটারে একটি কোলন থাকে তবে এটি একটি নেমস্পেস আর্গুমেন্ট হিসাবে ব্যাখ্যা করা হয়। যদি তা না হয় তবে এটি পছন্দসই রিটার্ন টাইপ হিসাবে বিবেচিত হয়। এই ক্ষেত্রে, যদি তৃতীয় প্যারামিটারটি বৈধ মানগুলির মধ্যে একটি না হয় (কেস উপেক্ষা করে), xpath() ফাংশন একটি নোডসেট ফেরত দেওয়ার জন্য ডিফল্ট।

        Json পাথ ফাংশন

        একটি JSON ভেরিয়েবলের জন্য একটি JSON পাথ এক্সপ্রেশন প্রয়োগ করে।

        সিনট্যাক্স

        jsonPath(json-path,json-var,want-array)

        যুক্তি

        • (প্রয়োজনীয়) json-path : (স্ট্রিং) একটি জেএসএন পাথ এক্সপ্রেশন।
        • (প্রয়োজনীয়) json-var : (স্ট্রিং) একটি ফ্লো ভেরিয়েবল বা জেএসএন সহ স্ট্রিং।
        • (Al চ্ছিক) want-array : (স্ট্রিং) যদি এই প্যারামিটারটি 'true' এ সেট করা থাকে এবং যদি ফলাফল সেটটি একটি অ্যারে হয় তবে সমস্ত অ্যারে উপাদানগুলি ফিরে আসে। যদি অন্য কোনও মানতে সেট করা হয় বা যদি এই প্যারামিটারটি বাদ দেওয়া হয় তবে কেবল ফলাফলের সেট অ্যারের জেরোথ উপাদানটি ফিরে আসে। যদি ফলাফল সেটটি কোনও অ্যারে না হয় তবে এই তৃতীয় প্যারামিটারটি উপস্থিত থাকলে উপেক্ষা করা হয়।

        উদাহরণ 1

        যদি এটি বার্তা টেম্পলেট হয়:

        The address is {jsonPath($.results[?(@.name == 'Mae West')].address.line1,the_json_variable)}

        এবং the_json_variable রয়েছে:

        {
          "results" : [
            {
              "address" : {
                "line1" : "18250 142ND AV NE",
                "city" : "Woodinville",
                "state" : "Washington",
                "zip" : "98072"
              },
              "name" : "Fred Meyer"
            },
            {
              "address" : {
                "line1" : "1060 West Addison Street",
                "city" : "Chicago",
                "state" : "Illinois",
                "zip" : "60613"
              },
              "name" : "Mae West"
            }
          ]
        } 

        ফাংশনটির ফলাফল হ'ল:

        The address is 1060 West Addison Street

        নোট করুন যে এই ক্ষেত্রে, ফলাফল সেটটি একটি একক উপাদান (উপাদানগুলির একটি অ্যারে নয়)। যদি ফলাফল সেটটি একটি অ্যারে ছিল, তবে কেবল অ্যারের জেরোথ উপাদানটি ফিরে আসবে। পুরো অ্যারেটি ফিরিয়ে দিতে, তৃতীয় প্যারামিটার হিসাবে 'true' দিয়ে ফাংশনটি কল করুন, যেমনটি পরবর্তী উদাহরণে দেখানো হয়েছে।

        উদাহরণ 2

        যদি এটি বার্তা টেম্পলেট হয়:

        {jsonPath($.config.quota[?(@.operation=='ManageOrder')].appname,the_json_variable,'true')}

        এবং the_json_variable রয়েছে:

        {
          "results" : [
             {
              "config": {
                "quota": [
                  {
                    "appname": "A",
                    "operation": "ManageOrder",
                    "value": "900"
                  },
                  {
                    "appname": "B",
                    "operation": "ManageOrder",
                    "value": "1000"
                  },
                  {
                    "appname": "B",
                    "operation": "SubmitOrder",
                    "value": "800"
                  }
                ]
              }
            }
          ]
        } 

        ফাংশনটির ফলাফল হ'ল:

        ['A','B']
        ,

        আপনি অ্যাপিগি এজ ডকুমেন্টেশন দেখছেন।
        অ্যাপিগি এক্স ডকুমেন্টেশনে যান
        তথ্য

        এই বিষয়টি কীভাবে এপিআই প্রক্সিগুলিতে বার্তা টেম্পলেটগুলি ব্যবহার করতে হয় তা নিয়ে আলোচনা করে এবং একটি ফাংশন রেফারেন্স সরবরাহ করে।

        একটি বার্তা টেম্পলেট কি?

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

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

        আপনি কোথায় বার্তা টেম্পলেট ব্যবহার করতে পারেন তাও দেখুন?

        উদাহরণ

        উদাহরণস্বরূপ, বরাদ্দ বার্তা নীতি আপনাকে <Payload> উপাদানটির মধ্যে একটি বার্তা টেম্পলেট ব্যবহার করতে দেয়:

        <AssignMessage name="set-dynamic-content">
          <AssignTo createNew="false" type="response"></AssignTo>
          <Set>
            <Payload contentType="application/json">
              {"name":"Alert", "message":"You entered an invalid username: {user.name}"}
            </Payload>
          </Set>
          <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
        </AssignMessage>

        উপরের উদাহরণে, ফ্লো ভেরিয়েবল user.name (কোঁকড়ানো ধনুর্বন্ধনী) এর মানটি মূল্যায়ন ও রানটাইমের সময় পে -লোড স্ট্রিংয়ে প্রতিস্থাপন করা হবে। সুতরাং, উদাহরণস্বরূপ, যদি user.name=jdoe , তবে পে -লোডে ফলাফলের বার্তা আউটপুটটি হবে: You entered an invalid username: jdoe । যদি ভেরিয়েবলটি সমাধান করা যায় না, তবে একটি খালি স্ট্রিং আউটপুট।

        উদাহরণ

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

        <AssignMessage name='AM-QuotaViolationMessage'>
          <Description>message for quota exceeded</Description>
          <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
          <Set>
            <Headers>
              <Header name='X-Quota-Reset'>{ratelimit.Quota-1.expiry.time}</Header>
              <Header name='X-Quota-Allowed'>{ratelimit.Quota-1.allowed.count}</Header>
              <Header name='X-Quota-Available'>{ratelimit.Quota-1.available.count}</Header>
            </Headers>
            <Payload contentType='application/json'>{
          "error" : {
            "message" : "you have exceeded your quota",
            "clientId" : "{request.queryparam.apikey}"
          }
        }
            </Payload>
            <StatusCode>429</StatusCode>
            <ReasonPhrase>Quota Exceeded</ReasonPhrase>
          </Set>
        </AssignMessage>

        অ্যাসাইনমেসেজ নীতিতে, <Set> উপাদান সমর্থন বার্তা টেম্প্লেটিংয়ে নিম্নলিখিত উপাদানগুলি:

        • হেডার
        • QueryParam
        • ফর্মপ্যারাম
        • পেলোড
        • সংস্করণ
        • ক্রিয়া
        • পথ
        • স্ট্যাটাসকোড
        • যুক্তিযুক্ত

        আবার, নোট করুন যে কোনও বার্তা টেমপ্লেটে প্রবাহের ভেরিয়েবলগুলি অবশ্যই কোঁকড়ানো ধনুর্বন্ধনে আবদ্ধ থাকতে হবে

        যখন এই নীতি কার্যকর করে:

        • শিরোনাম উপাদানগুলি নির্দিষ্ট প্রবাহের ভেরিয়েবলের মানগুলি গ্রহণ করে।
        • পে -লোডে আক্ষরিক পাঠ্য এবং ভেরিয়েবলের মিশ্রণ অন্তর্ভুক্ত রয়েছে ( client_id গতিশীলভাবে পপুলেটেড)।
        • স্ট্যাটাসকোড এবং কারণগুলির মধ্যে কেবল আক্ষরিক পাঠ্য অন্তর্ভুক্ত; যাইহোক, এই উপাদানগুলি যদি আপনি এটি ব্যবহার করতে চান তবে বার্তা টেম্প্লেটিং সমর্থন করে।

        উদাহরণ

        একটি প্রক্সি টার্গেটেন্ডপয়েন্ট সংজ্ঞাতে, <SSLInfo> সমর্থন বার্তা টেম্প্লেটিংয়ের শিশু-উপাদানগুলি। নীতিগুলিতে ব্যবহৃত একই প্যাটার্ন অনুসরণ করে, প্রক্সি কার্যকর করার সময় কোঁকড়ানো ধনুর্বন্ধনীগুলিতে প্রবাহের ভেরিয়েবলগুলি প্রতিস্থাপন করা হয়।

        <TargetEndpoint name="default">
          
          <HTTPTargetConnection>
            <SSLInfo>
                <Enabled>{myvars.ssl.enabled}</Enabled>
                <ClientAuthEnabled>{myvars.ssl.client.auth.enabled}</ClientAuthEnabled>
                <KeyStore>{myvars.ssl.keystore}</KeyStore>
                <KeyAlias>{myvars.ssl.keyAlias}</KeyAlias>
                <TrustStore>{myvars.ssl.trustStore}</TrustStore>
            </SSLInfo>
        
          </HTTPTargetConnection>
          
        </TargetEndpoint>

        আপনি বার্তা টেম্পলেটগুলি কোথায় ব্যবহার করতে পারেন?

        Message templates are supported in several policies as well as certain elements used in the TargetEndpoint configuration .

        Policies that accept message templates

        নীতি Elements and child-elements that support message templates
        AccessControl policy <SourceAddress> , for the mask attribute and the IP address.
        AssignMessage policy <Set> child elements: Payload, ContentType, Verb, Version, Path, StatusCode, ReasonPhrase, Headers, QueryParams, FormParams

        <Add> child elements: Headers, QueryParams, FormParams

        <AssignVariable> child element: <Template>

        ExtensionCallout policy <Input>
        ExtractVariables policy <JsonPath>
        GenerateJWS policy
        VerifyJWS policy
        <Payload> ( GenerateJWS policy only)

        <AdditionalHeaders><Claim>

        * These elements support message template only when type=map .

        GenerateJWT policy
        VerifyJWT policy
        <AdditionalClaims><Claim>

        <AdditionalHeaders><Claim>

        * These elements support message template only when type=map .

        LDAP policy <SearchQuery>
        MessageLogging policy <Syslog><Message>

        <File><Message>

        OASValidation policy <OASResource> element
        RaiseFault policy <Set> elements: Payload, ContentType, Verb, Version, Path, StatusCode, ReasonPhrase, Headers, QueryParams, FormParams

        <Add> elements: Headers, QueryParams, FormParams

        SAMLAssertion policy <Template>

        * Only when the policy signature is <GenerateSAMLAssertion>

        ServiceCallout policy <Set> elements: Payload, ContentType, Verb, Version, Path, StatusCode, ReasonPhrase, /Headers, QueryParams, FormParams

        <Add> elements: Headers, QueryParams, FormParams

        <HTTPTargetConnection>/<URL> : Note that the first part of the string must be http or https.

        TargetEndpoint elements that accept message templates

        HTTPTargetConnection elements Child-elements that support message templates
        SSLInfo Enabled, KeyAlias, KeyStore, TrustStore, ClientAuthEnabled, CLRStore
        LocalTargetConnection ApiProxy, ProxyEndpoint
        পথ When using a LoadBalancer element, the Path element is active and accepts a message template.

        Message template syntax

        This section explains the rules you must follow to use message templates.

        Use curly braces to denote variables

        Enclose variable names in curly braces { } . If the variable does not exist, an empty string is returned in the output; however, you can specify default values in message templates (values that are substituted if the variable is unresolved). See Setting default values in message templates .

        Note that enclosing the entire message template string in quotes is permitted, but optional. For example, the following two message templates are equivalent:

        <Set>
            <Headers>
                <Header name="x-h1">"Hello {user.name}"</Header>
                <Header name="x-h1">Hello {user.name}</Header>
            </Headers>
        </Set>

        Setting default values in message templates

        If a templated variable can't be resolved, Edge substitutes an empty string. However, you can specify a default value as follows:

        <Header name="x-h1">Test message. id = {request.header.id:Unknown}</Header>

        In the above sample if the variable request.header.id cannot be resolved then its value is replaced by Unknown . যেমন:

        Test message. id = Unknown

        Spaces are not allowed in function expressions

        Spaces are not allowed anywhere in message template function expressions. যেমন:

        অনুমোদিত:

        {substring(alpha,0,4)}
        {createUuid()}
        {randomLong(10)}

        অনুমোদিত নয়:

        {substring( alpha, 0, 4 )}
        { createUuid( ) }
        {randomLong( 10 )}

        Legacy syntax for JSON payloads

        In Edge versions before Cloud release 16.08.17 , you could not use curly braces to denote variable references within JSON payloads. In those older versions, you needed to use the variablePrefix and variableSuffix attributes to specify delimiter characters, and use those to wrap variable names, like so:

        <Set>
          <Payload contentType="application/json" variablePrefix="@" variableSuffix="#">
            {"name":"foo", "type":"@variable_name#"}
          </Payload>
        </Set>

        Although Apigee recommends that you use the newer curly-brace syntax, the older syntax still works.

        Using message template functions

        Edge provides a set of functions that you can use within message templates to escape, encode, hash, and format string variables.

        The message template functions are described in detail in Message template function reference .

        Example: toLowerCase()

        Use the built-in toLowerCase() function to transform a string variable to lowercase:

        <AssignMessage name="AM-Set-Custom-Response">
            <AssignTo createNew="false" type="response"/>
            <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
            <Set>
                <Headers>
                    <Header name="x-h1">Test header: {toLowerCase(foo.bar:FOO)}</Header>
                </Headers>
            </Set>
        </AssignMessage>

        If the foo.bar flow variable resolves, then its characters will be all lowercase. If foo.bar is unresolved then the default value FOO is substituted and converted to lowercase characters. যেমন:

        Test header: foo

        Example: escapeJSON()

        Here's an interesting use case: Let's say your backend app returns a JSON response that contains valid escape characters. যেমন:

        {
              "code": "INVALID",
              "user_message": "Invalid value for \"logonId\" check your input."
        }

        Then, let's say you want to return this message to the client caller in a custom payload. The usual way to do this is to extract the message from the target response payload and use Assign Message to add it to a custom proxy response (that is, send it back to the client).

        Here's the Extract Variables policy that extracts the user_message information into a variable called standard.systemMessage :

        <ExtractVariables name="EV-BackendErrorResponse">
            <DisplayName>EV-BackendErrorResponse</DisplayName>
            <JSONPayload>
                <Variable name="standard.systemMessage">
                    <JSONPath>$.user_message</JSONPath>
                </Variable>
            </JSONPayload>
        </ExtractVariables>

        Now, here's a perfectly valid Assign Message policy that adds the extracted variable to the response payload (the proxy response):

        <AssignMessage name="AM-SetStandardFaultResponse">
            <DisplayName>AM-SetStandardFaultResponse</DisplayName>
            <Set>
                <Payload contentType="application/json">
                   {
                      "systemMessage": "{standard.systemMessage}"
                   }
                </Payload>
            </Set>
            <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
            <AssignTo createNew="false" transport="http" type="response"/>
        </AssignMessage>


        Unfortunately, there's a problem. The Extract Variables policy removed the escaped quotation characters around part of the message. This means that the response returned to the client is invalid JSON. This is clearly not what you intended!

        {
            "systemMessage": "Invalid value for "logonId" check your input."
        }

        To work around this problem, you can modify the Assign Message policy to use a message template function that escapes the quotes within the JSON for you. This function, escapeJSON() , escapes any quotes or other special characters that occur within a JSON expression:

        <AssignMessage name="AM-SetStandardFaultResponse">
            <DisplayName>AM-SetStandardFaultResponse</DisplayName>
            <Set>
                <Payload contentType="application/json">
                   {
                      "systemMessage": "{escapeJSON(standard.systemMessage)}"
                   }
                </Payload>
            </Set>
            <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
            <AssignTo createNew="false" transport="http" type="response"/>
        </AssignMessage>


        The function escapes the embedded quotes, resulting in valid JSON, which is exactly what you wanted:

        {
              "systemMessage": "Invalid value for \"logonId\" check your input.",
        }

        A message template is a dynamic string substitution feature that you can use in certain policies and in TargetEndpoint definitions. Message template functions let you perform useful operations such as hashing, string manipulation, character escaping, and others within a message template.

        For example, in the following AssignMessage policy, the function toLowerCase() is used in a message template:

        <AssignMessage name="AM-Set-Custom-Response">
            <AssignTo createNew="false" type="response"/>
            <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
            <Set>
               <Headers>
                 <Header name="x-h1">Test header: {Hello, toLowerCase(user.name)}</Header>
               </Headers>
            </Set>
        </AssignMessage>

        This topic describes the message template functions, their arguments, and outputs. This topic assumes that you are familiar with message templates and the contexts in which they are used.

        হ্যাশ ফাংশন

        Compute a hash value and return the string representation of that hash.

        Hexadecimal hash functions

        Compute a hash value and return the string representation of that hash as a hexadecimal number.

        সিনট্যাক্স

        ফাংশন বর্ণনা
        md5Hex(string) Computes an MD5 hash expressed as a hexadecimal number.
        sha1Hex(string) Computes a SHA1 hash expressed as a hexadecimal number.
        sha256Hex(string) Computes a SHA256 hash expressed as a hexadecimal number.
        sha384Hex(string) Computes a SHA384 hash expressed as a hexadecimal number.
        sha512Hex(string) Computes a SHA512 hash expressed as a hexadecimal number.

        যুক্তি

        string - The Hash functions take a single string argument upon which the hash algorithm is computed. The argument can be a literal string or a string flow variable.

        উদাহরণ

        ফাংশন কল:

        sha256Hex('abc')

        ফলাফল:

        ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad

        ফাংশন কল:

        var str = 'abc';
        sha256Hex(str)

        ফলাফল:

        ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad

        Base64 hash functions

        Compute a hash value and return the string representation of that hash as a Base64 encoded value.

        সিনট্যাক্স

        ফাংশন বর্ণনা
        md5Base64(string) Computes an MD5 hash expressed as a Base64 encoded value.
        sha1Base64(string) Computes a SHA1 hash expressed as a Base64 encoded value.
        sha256Base64(string) Computes a SHA256 hash expressed as a Base64 encoded value.
        sha384Base64(string) Computes a SHA384 hash expressed as a Base64 encoded valuer.
        sha512Base64(string) Computes a SHA512 hash expressed as a Base64 encoded value.

        যুক্তি

        string - The Hash functions take a single string argument upon which the hash algorithm is computed. The argument can be a literal string or a string flow variable.

        উদাহরণ

        ফাংশন কল:

        sha256Base64('abc')

        ফলাফল:

        ungWv48Bz+pBQUDeXa4iI7ADYaOWF3qctBD/YfIAFa0=

        ফাংশন কল:

        var str = 'abc';
        sha256Base64(str)

        ফলাফল:

        ungWv48Bz+pBQUDeXa4iI7ADYaOWF3qctBD/YfIAFa0=

        স্ট্রিং ফাংশন

        Perform operations on strings within a message template.

        Base64 encoding functions

        Encode and decode strings using the Base64 encoding scheme.

        সিনট্যাক্স

        ফাংশন বর্ণনা
        encodeBase64(string) Encodes a string using Base64 encoding. For example: encodeBase64( value ) , when value holds abc , the function returns the string: YWJj
        decodeBase64(string) Decodes a Base64 encoded string. For example: decodeBase64( value ) when value holds aGVsbG8sIHdvcmxk , the function returns the string hello, world .

        যুক্তি

        string - The string to encode or decode. Can be a literal string or a string flow variable.

        উদাহরণ

        <AssignMessage name="AM-Set-Custom-Response">
            <AssignTo createNew="false" type="response"/>
            <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
            <Set>
               <Headers>
                 <Header name="x-h1">Hello, {decodeBase64('d29ybGQK')}</Header>
               </Headers>
            </Set>
        </AssignMessage>

        Case conversion functions

        Convert a string to all uppercase or all lowercase letters.

        সিনট্যাক্স

        ফাংশন বর্ণনা
        toUpperCase(string) Convert a string to uppercase.
        toLowerCase(string) Convert a string to lowercase.


        যুক্তি

        string - The string to convert. Can be a literal string or a string flow variable.

        উদাহরণ

        <AssignMessage name="AM-Set-Custom-Response">
            <AssignTo createNew="false" type="response"/>
            <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
            <Set>
               <Headers>
                 <Header name="x-h1">Hello, {toLowerCase(user.name)}</Header>
               </Headers>
            </Set>
        </AssignMessage>

        Substring function

        Returns the characters between the starting and ending index of the specified string.

        সিনট্যাক্স

        substring(str,start_index,end_index)

        যুক্তি

        • str - A literal string or string flow variable.
        • start_index - The starting index into the string.
        • end_index - (Optional) The ending index into the string. If not supplied, ending index is the end of the string.

        উদাহরণ

        For the following examples, suppose that these flow variables exist:

        পরিবর্তনশীল নাম মান
        alpha ABCDEFGHIJKLMNOPQRSTUVWXYZ
        seven 7


        Here are results of function calls that use these variables:

        Message template expression ফলাফল
        {substring(alpha,22)} WXYZ
        hello {substring(alpha,22)} hello WXYZ
        {substring(alpha,-4)} WXYZ
        {substring(alpha,-8,-4)} STUV
        {substring(alpha,0,10)} ABCDEFGHIJ
        {substring(alpha,0,seven)} ABCDEFG

        Replace All function

        Applies a regular expression to a string and for any matches, replaces the match with a replacement value.

        সিনট্যাক্স

        replaceAll(string,regex,value)

        যুক্তি

        • string - A literal string or string flow variable in which to make replacements.
        • regex - A regular expression.
        • value - The value to replace all regex matches within the string.

        উদাহরণ

        For the following examples, suppose these flow variables exist:

        পরিবর্তনশীল নাম মান
        header Bearer ABCDEFGHIJKLMNOPQRSTUVWXYZ-9993
        regex1 "^Bearer "
        replacement "TOKEN: "

        Here are results of function calls that use these variables:

        Message template expression ফলাফল
        {replaceAll(header,"9993",'')} Bearer ABCDEFGHIJKLMNOPQRSTUVWXYZ-
        {replaceAll(header,regex1,'')} ABCDEFGHIJKLMNOPQRSTUVWXYZ-9993
        {replaceAll(header,regex1,replacement)} TOKEN: ABCDEFGHIJKLMNOPQRSTUVWXYZ-9993

        Replace First function

        Replaces only the first occurrence of the specified regular expression match in the string.

        সিনট্যাক্স

        replaceFirst(string,regex,value)

        যুক্তি

        • string - A literal string or string flow variable in which to make replacements.
        • regex - A regular expression.
        • value - The value to replace regex matches within the string.

        Character escape and encoding functions

        Functions that escape or encode special characters in a string.

        সিনট্যাক্স

        ফাংশন বর্ণনা
        escapeJSON(string) Backslash-escapes double-quotes.
        escapeXML(string) Replaces angle brackets, apostrophe, double-quote and ampersands with the respective XML entities. Use for XML 1.0 documents.

        escapeXML11(string) Works the same way as escapeXML, but for XML v1.1 entities. See Usage notes below.
        encodeHTML(string) Encodes apostrophe, angle brackets, and ampersand.

        যুক্তি

        string - The string to escape. Can be a literal string or a string flow variable.

        ব্যবহারের নোট

        XML 1.1 can represent certain control characters, but it cannot represent the null byte or unpaired Unicode surrogate codepoints, even after escaping. The escapeXML11() function removes characters that do not fit in the following ranges:

        [#x1-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]

        The escapeXML11() function escapes characters in the following ranges:

        [#x1-#x8] | [#xB-#xC] | [#xE-#x1F] | [#x7F-#x84] | [#x86-#x9F]

        উদাহরণ

        Assume a flow variable called food exists with this value: "bread" & "butter" . Then, the function:

        {escapeHTML(food)}

        ফলাফল:

        &quot;bread&quot; &amp; &quot;butter&quot;

        Time format functions

        Return a string representation of the time, formatted in the local time zone, or in UTC.

        সিনট্যাক্স

        ফাংশন বর্ণনা
        timeFormat(format,str) Returns the date formatted in the local time zone.
        timeFormatMs(format,str) Returns the date formatted in the local time zone.
        timeFormatUTC(format,str) Returns the date formatted in UTC.
        timeFormatUTCMs(format,str) Returns the date formatted in UTC.

        যুক্তি

        • format - A date/time format string. Can be a literal string or a string variable.
        • str - A string or string flow variable containing a time value. The value can be in seconds-since-epoch or milliseconds-since-epoch for timeFormatMs.

        উদাহরণ

        Assume the following values and assume the local timezone is Pacific:

        • epoch_time_ms = 1494390266000
        • epoch_time = 1494390266
        • fmt1 = yyyy-MM-dd
        • fmt2 = yyyy-MM-dd HH-mm-ss
        • fmt3 = yyyyMMddHHmmss

        The functions return the following results:

          ফাংশন আউটপুট
          timeFormatMs(fmt1,epoch_time_ms) 2017-05-09
          timeFormat(fmt1,epoch_time) 2017-05-09
          timeFormat(fmt2,epoch_time) 2017-05-09 21:24:26
          timeFormat(fmt3,epoch_time) 20170509212426
          timeFormatUTC(fmt1,epoch_time) 2017-05-10
          timeFormatUTC(fmt2,epoch_time) 2017-05-10 04:24:26
          timeFormatUTC(fmt3,epoch_time) 20170510042426

          HMAC calculation functions

          The HMAC calculation functions provide an alternative to using the HMAC policy to compute an HMAC. The functions are handy when performing a cascaded HMAC calculation, as when the output of one HMAC is used as the key for a second HMAC.

          সিনট্যাক্স

          ফাংশন বর্ণনা
          hmacSha224(key,valueToSign[,keyencoding[,outputencoding]]) Computes an HMAC with the SHA-224 hash function.
          hmacSha256(key,valueToSign[,keyencoding[,outputencoding]]) Encodes an HMAC with the SHA-256 hash function.
          hmacSha384(key,valueToSign[,keyencoding[,outputencoding]]) Encodes an HMAC with the SHA-384 hash function.
          hmacSha512(key,valueToSign[,keyencoding[,outputencoding]]) Encodes an HMAC with the SHA-512 hash function.
          hmacMd5(key,valueToSign[,keyencoding[,outputencoding]]) Encodes an HMAC with the MD5 hash function.
          hmacSha1(key, valueToSign [,keyencoding[,outputencoding]]) Encodes an HMAC with the SHA-1 encryption algorithm.

          যুক্তি

          • key - (Required) Specifies the secret key, encoded as a string, used to compute the HMAC.
          • valueToSign - (Required) Specifies the message to sign. It should be a string.
          • keyencoding - (Optional) The secret key string will be decoded according to this specified encoding. Valid values: hex , base16 , base64 , utf-8 . Default: utf-8
          • outputencoding - (Optional) Specifies the encoding algorithm to use for the output. Valid values: hex , base16 , base64 . The values are case insensitive; hex and base16 are synonyms. Default: base64

          উদাহরণ

          This example uses the AssignMessage policy to compute an HMAC-256 and assign it to a flow variable:

          <AssignMessage name='AM-HMAC-1'>
            <AssignVariable>
              <Name>valueToSign</Name>
              <Template>{request.header.apikey}.{request.header.date}</Template>
            </AssignVariable>
            <AssignVariable>
              <Name>hmac_value</Name>
              <Template>{hmacSha256(private.secretkey,valueToSign)}</Template>
            </AssignVariable>
          </AssignMessage>

          This example illustrates how to generate a cascading HMAC that can be used with the AWS Signature v4 signing process. The example uses the AssignMessage policy to generate the five levels of cascaded HMAC used to calculate a signature for AWS Signature v4:

          <AssignMessage name='AM-HMAC-AWS-1'>
            <!-- 1 -->
            <AssignVariable>
              <Name>DateValue</Name>
              <Template>{timeFormatUTCMs('yyyyMMdd',system.timestamp)}</Template>
            </AssignVariable>
            <!-- 2 -->
            <AssignVariable>
              <Name>FirstKey</Name>
              <Template>AWS4{private.secret_aws_access_key}</Template>
            </AssignVariable>
            <!-- 3 -->
            <AssignVariable>
              <Name>DateKey</Name>
              <Template>{hmacSha256(FirstKey,DateValue,'utf-8','base16')}</Template>
            </AssignVariable>
            <!-- 4 -->
            <AssignVariable>
              <Name>DateRegionKey</Name>
              <Template>{hmacSha256(DateKey,aws_region,'base16','base16')}</Template>
            </AssignVariable>
            <!-- 5 -->
            <AssignVariable>
              <Name>DateRegionServiceKey</Name>
              <Template>{hmacSha256(DateRegionKey,aws_service,'base16','base16')}</Template>
            </AssignVariable>
            <!-- 6 -->
            <AssignVariable>
              <Name>SigningKey</Name>
              <Template>{hmacSha256(DateRegionServiceKey,'aws4_request','base16','base16')}</Template>
            </AssignVariable>
            <!-- 7 -->
            <AssignVariable>
              <Name>aws4_hmac_value</Name>
              <Template>{hmacSha256(SigningKey,stringToSign,'base16','base16')}</Template>
            </AssignVariable>
          </AssignMessage>

          অন্যান্য ফাংশন

          Create UUID function

          Generates and returns a UUID.

          সিনট্যাক্স

          createUuid()

          যুক্তি

          কোনোটিই নয়।

          উদাহরণ

          { createUuid()}

          নমুনা ফলাফল:

          ec3ca9be-d1e1-4ef4-aee4-4a58f3130db8

          Random Long Generator function

          Returns a random long integer.

          সিনট্যাক্স

          randomLong(args)

          যুক্তি

          • If no arguments are specified, the function returns a random long integer, as computed by the Java SecureRandom class.
          • If one argument is present, it is treated as the minimum value of the computation.
          • If a second argument is present, it is treated as the maximum value of the computation.

          উদাহরণ

          {random()}

          results in something like this:

          5211338197474042880

          Regex text generator

          Generate a text string that matches a given regular expression.

          সিনট্যাক্স

          xeger(regex)

          যুক্তি

          regex - A regular expression.

          উদাহরণ

          This example generates a seven digit string with no zeros:

          xeger('[1-9]{7}')

          উদাহরণ ফলাফল:

          9857253

          Null-coalescing function

          The firstnonnull() function returns the value of the left-most, non-null argument.

          সিনট্যাক্স

          firstnonnull(var1,varn)

          যুক্তি

          var1 - A context variable.

          var n - One or more context variables. You can set the right-most argument to a string to provide a fallback value (a value that will be set if none of the left-hand arguments are set).

          উদাহরণ

          The following table illustrates how to use the function:

          টেমপ্লেট Var1 Var2 Var3 ফলাফল
          {firstnonnull(var1,var2)} সেট করা হয়নি foo N/A foo
          {firstnonnull(var1,var2)} foo bar N/A foo
          {firstnonnull(var1,var2)} foo সেট করা হয়নি N/A foo
          {firstnonnull(var1,var2,var3)} foo bar baz foo
          {firstnonnull(var1,var2,var3)} সেট করা হয়নি bar baz bar
          {firstnonnull(var1,var2,var3)} সেট করা হয়নি সেট করা হয়নি baz baz
          {firstnonnull(var1,var2,var3)} সেট করা হয়নি সেট করা হয়নি সেট করা হয়নি null
          {firstnonnull(var1)} সেট করা হয়নি N/A N/A null
          {firstnonnull(var1)} foo N/A N/A foo
          {firstnonnull(var1,var2)} "" bar N/A ""
          {firstnonnull(var1,var2,'fallback value')} null null fallback value fallback value

          XPath function

          Applies an XPath expression to an XML variable.

          সিনট্যাক্স

          xpath(xpath_expression,xml_string,[datatype])

          যুক্তি

          xpath_expression - An XPath expression.

          xml_string - A flow variable or string containing XML.

          datatype - (Optional) Specifies the desired return type of the query. It can be nodeset, node, number, boolean, string. It defaults to nodeset. The default is usually the right choice.

          উদাহরণ 1

          Suppose these context variables define an XML string and an XPath expression:

          xml = "<tag><tagid>250397</tagid><readerid>1</readerid><rssi>74</rssi><date>2019/06/15</date></tag>"
          xpath = "/tag/tagid"

          And the xpath() function is used in an AssignMessage policy, as follows:

          <AssignMessage>
            <AssignVariable>
              <Name>extracted_tag</Name>
              <Template>{xpath(xpath,xml)}</Template>
            </AssignVariable>
          </AssignMessage><

          The function returns the value <tagid>250397</tagid> . This value is placed in the context variable called extracted_tag .

          উদাহরণ 2

          If you only want the value of the node, use the text() function, as follows:

          <AssignMessage>
            <AssignVariable>
              <Name>extracted_tag</Name>
              <Template>{xpath('/tag/tagid/text()',xml)}</Template>
            </AssignVariable>
          </AssignMessage>

          As a result of this operation, the context variable extracted_tag is set to 250397

          If multiple nodes are selected, then the result of xpath() is all of the values of the selection, concatenated with a comma.

          Example 3: XML namespaces

          To specify a namespace, append additional parameters, each one a string that looks like prefix:namespaceuri . For example, an xpath() function that selects the child element of a SOAP body might be like this:

          <AssignMessage>
            <AssignVariable>
              <Name>soapns</Name>
              <Value>soap:http://schemas.xmlsoap.org/soap/envelope/</Value>
            </AssignVariable>
            <AssignVariable>
              <Name>xpathexpression</Name>
              <Value>/soap:Envelope/soap:Body/*</Value>
            </AssignVariable>
            <AssignVariable>
              <Name>extracted_element</Name>
              <Template>{xpath(xpathexpression,xml,soapns)}</Template>
            </AssignVariable>
          </AssignMessage>

          For additional namespaces, you can add up to 10 additional parameters to the xpath() function.

          You can specify a simple XPath expression as a string surrounded by single quotes:

          {xpath('/tag/tagid/text()',xml)}

          If the XPath expression includes namespace prefixes (and colons) then you need to assign that XPath expression to a variable and specify the variable name rather than the expression directly.

          {xpath(xpathexpression,xml,ns1)}

          Example 4: Specifying a desired return type

          The optional third parameter passed to the xpath() function specifies the desired return type of the query.

          Some XPath queries can return numeric or boolean values. For example the count() function returns a number. This is a valid XPath query:

          count(//Record/Fields/Pair)

          This valid query returns a boolean:

          count(//Record/Fields/Pair)>0

          In those cases invoke the xpath() function with a third parameter specifying that type:

          {xpath(expression,xml,'number')}
          {xpath(expression,xml,'boolean')}

          If the third parameter contains a colon, then it is interpreted as a namespace argument. If not, then it is treated as the desired return type. In this case, if the third parameter is not one of the valid values (ignoring case), the xpath() function defaults to returning a nodeset.

          JSON Path function

          Applies a JSON Path expression to a JSON variable.

          সিনট্যাক্স

          jsonPath(json-path,json-var,want-array)

          যুক্তি

          • (Required) json-path : (String) A JSON Path expression.
          • (Required) json-var : (String) A flow variable or string containing JSON.
          • (Optional) want-array : (String) If this parameter is set to 'true' and if the result set is an array, then all array elements are returned. If set to any other value or if this parameter is omitted, then only the zeroth element of a result set array is returned. If the result set is not an array, then this third parameter, if present, is ignored.

          উদাহরণ 1

          If this is the message template:

          The address is {jsonPath($.results[?(@.name == 'Mae West')].address.line1,the_json_variable)}

          and the_json_variable contains:

          {
            "results" : [
              {
                "address" : {
                  "line1" : "18250 142ND AV NE",
                  "city" : "Woodinville",
                  "state" : "Washington",
                  "zip" : "98072"
                },
                "name" : "Fred Meyer"
              },
              {
                "address" : {
                  "line1" : "1060 West Addison Street",
                  "city" : "Chicago",
                  "state" : "Illinois",
                  "zip" : "60613"
                },
                "name" : "Mae West"
              }
            ]
          } 

          The result of the function is:

          The address is 1060 West Addison Street

          Note that in this case, the result set is a single element (not an array of elements). If the result set were an array, then only the zeroth element of the array would be returned. To return the full array, call the function with 'true' as the third parameter, as shown in the next example.

          উদাহরণ 2

          If this is the message template:

          {jsonPath($.config.quota[?(@.operation=='ManageOrder')].appname,the_json_variable,'true')}

          and the_json_variable contains:

          {
            "results" : [
               {
                "config": {
                  "quota": [
                    {
                      "appname": "A",
                      "operation": "ManageOrder",
                      "value": "900"
                    },
                    {
                      "appname": "B",
                      "operation": "ManageOrder",
                      "value": "1000"
                    },
                    {
                      "appname": "B",
                      "operation": "SubmitOrder",
                      "value": "800"
                    }
                  ]
                }
              }
            ]
          } 

          The result of the function is:

          ['A','B']