মেসেজ টেমপ্লেট

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

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

মেসেজ টেমপ্লেট কী?

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

আপনি মেসেজ টেমপ্লেটে ফ্লো ভেরিয়েবল রেফারেন্স ও লিটেরাল টেক্সটের যেকোনও কম্বিনেশন যোগ করতে পারেন। ফ্লো ভেরিয়েবলের নাম কার্লি ব্রেসেস দিয়ে ঘেরা থাকতে হবে, কার্লি ব্রেসেসের মধ্যে না থাকা যেকোনও টেক্সট আক্ষরিক টেক্সট হিসেবে আউটপুট হয়।

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

উদাহরণ

যেমন, Assign Message নীতি আপনাকে <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. ভেরিয়েবল সমাধান করা না গেলে, খালি স্ট্রিং আউটপুট হিসেবে দেখানো হয়।

উদাহরণ

কোটা অতিক্রম করা হলে, কলারকে একটি অর্থপূর্ণ মেসেজ ফেরত পাঠানো ভাল। এই প্যাটার্নটি সাধারণত "ফল্ট রুল"-এর সাথে ব্যবহার করা হয় যাতে কোটা লঙ্ঘন সম্পর্কে কলকারীকে তথ্য প্রদান করা যায়। নিম্নলিখিত Assign Message নীতিতে, একাধিক 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
  • FormParam
  • PayLoad
  • ভার্সন
  • ক্রিয়াপদ
  • পথ
  • StatusCode
  • ReasonPhrase

আবারও মনে রাখবেন, মেসেজ টেমপ্লেটে ফ্লো ভেরিয়েবল অবশ্যই কার্লি ব্রেসেসের মধ্যে রাখতে হবে।

এই নীতি প্রয়োগ করা হলে:

  • হেডার এলিমেন্ট, নির্দিষ্ট ফ্লো ভেরিয়েবলের ভ্যালু পায়।
  • পেলোডে আক্ষরিক টেক্সট ও ভেরিয়েবল (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>

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

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

মেসেজ টেমপ্লেট গ্রহণ করে এমন নীতি

নীতি মেসেজ টেমপ্লেট কাজ করে এমন এলিমেন্ট ও চাইল্ড-এলিমেন্ট
AccessControl নীতি <SourceAddress>, mask অ্যাট্রিবিউট এবং IP অ্যাড্রেসের জন্য।
AssignMessage নীতি <Set> চাইল্ড এলিমেন্ট: পেলোড, ContentType, Verb, Version, Path, StatusCode, ReasonPhrase, Headers, QueryParams, FormParams

<Add> চাইল্ড এলিমেন্ট: Headers, QueryParams, FormParams

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

এক্সটেনশন কলআউট নীতি <Input>
ExtractVariables নীতি <JsonPath>
GenerateJWS নীতি
VerifyJWS নীতি
<Payload> (শুধুমাত্র GenerateJWS নীতি)

<AdditionalHeaders><Claim>

* type=map হলে তবেই এইসব এলিমেন্ট মেসেজ টেমপ্লেট সাপোর্ট করে।

GenerateJWT নীতি
VerifyJWT নীতি
<AdditionalClaims><Claim>

<AdditionalHeaders><Claim>

* type=map হলে তবেই এইসব এলিমেন্ট মেসেজ টেমপ্লেট সাপোর্ট করে।

LDAP নীতি <SearchQuery>
MessageLogging নীতি <Syslog><Message>

<File><Message>

OASValidation নীতি <OASResource> এলিমেন্ট
RaiseFault নীতি <Set> এলিমেন্ট: পেলোড, ContentType, Verb, Version, Path, StatusCode, ReasonPhrase, Headers, QueryParams, FormParams

<Add> এলিমেন্ট: হেডার, QueryParams, FormParams

SAMLAssertion নীতি <Template>

* শুধুমাত্র নীতিতে স্বাক্ষর <GenerateSAMLAssertion> হলে

ServiceCallout নীতি <Set> এলিমেন্ট: পেলোড, ContentType, Verb, Version, Path, StatusCode, ReasonPhrase, /Headers, QueryParams, FormParams

<Add> এলিমেন্ট: হেডার, QueryParams, FormParams

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

মেসেজ টেমপ্লেট গ্রহণ করে এমন TargetEndpoint এলিমেন্ট

HTTPTargetConnection এলিমেন্ট মেসেজ টেমপ্লেট কাজ করে এমন চাইল্ড-এলিমেন্ট
SSLInfo চালু করা, KeyAlias, KeyStore, TrustStore, ClientAuthEnabled, CLRStore
LocalTargetConnection ApiProxy, ProxyEndpoint
পথ LoadBalancer এলিমেন্ট ব্যবহার করার সময়, Path এলিমেন্ট অ্যাক্টিভ থাকে এবং মেসেজ টেমপ্লেট গ্রহণ করে।

মেসেজ টেমপ্লেট সিনট্যাক্স

মেসেজ টেমপ্লেট ব্যবহার করার জন্য আপনাকে যেসব নিয়ম মেনে চলতে হবে, এই বিভাগে তা ব্যাখ্যা করা হয়েছে।

ভেরিয়েবল বোঝাতে কার্লি ব্রেসেস ব্যবহার করুন

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

মনে রাখবেন, পুরো মেসেজ টেমপ্লেট স্ট্রিং কোটেশনের মধ্যে রাখা যায়, তবে এটি ঐচ্ছিক। যেমন, নিম্নলিখিত দুটি মেসেজ টেমপ্লেট একই ধরনের:

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

মেসেজ টেমপ্লেটে ডিফল্ট ভ্যালু সেট করা

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

<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 পেলোডের জন্য লিগ্যাসি সিনট্যাক্স

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

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

যদিও Apigee সাজেস্ট করে যে আপনি নতুন কার্লি-ব্রেস সিনট্যাক্স ব্যবহার করুন, তবে পুরনো সিনট্যাক্স এখনও কাজ করে।

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

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

মেসেজ টেমপ্লেট ফাংশন রেফারেন্স লিঙ্কে মেসেজ টেমপ্লেট ফাংশন সম্পর্কে বিস্তারিত বিবরণ দেওয়া আছে।

উদাহরণ: 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."
}

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

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>


দুর্ভাগ্যবশত, একটি সমস্যা হয়েছে। Extract Variables নীতি মেসেজের অংশবিশেষের চারপাশে থাকা এস্কেপ করা কোটেশন অক্ষর সরিয়ে দিয়েছে। এর অর্থ হল, ক্লায়েন্টকে যে উত্তর পাঠানো হয়েছে সেটি ভুল JSON. আপনি যে এটি চাননি তা স্পষ্ট!

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

এই সমস্যার সমাধান করতে, আপনি Assign Message নীতি পরিবর্তন করে এমন একটি মেসেজ টেমপ্লেট ফাংশন ব্যবহার করতে পারেন যা আপনার জন্য 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

Base64 হ্যাশ ফাংশন

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

সিন্ট্যাক্স

ফাংশন বিবরণ
md5Base64(string) Base64 এনকোড করা মান হিসেবে প্রকাশ করা MD5 হ্যাশ গণনা করে।
sha1Base64(string) Base64 এনকোড করা ভ্যালু হিসেবে 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=

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

মেসেজ টেমপ্লেটের মধ্যে স্ট্রিংয়ে অপারেশন পারফর্ম করা।

Base64 এনকোডিং ফাংশন

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

সিন্ট্যাক্স

ফাংশন বিবরণ
encodeBase64(string) Base64 এনকোডিং ব্যবহার করে স্ট্রিং এনকোড করে। যেমন: encodeBase64(value), যখন value-এ abc থাকে, তখন ফাংশনটি এই স্ট্রিং রিটার্ন করে: YWJj
decodeBase64(string) Base64 এনকোড করা স্ট্রিং ডিকোড করে। যেমন: decodeBase64(value) যখন value-এ aGVsbG8sIHdvcmxk থাকে, তখন ফাংশনটি hello, world স্ট্রিংটি রিটার্ন করে।

আর্গুমেন্ট

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

উদাহরণ

<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) স্ট্রিং ছোট হাতের অক্ষরে পরিবর্তন করুন।


আর্গুমেন্ট

string - The string to convert. এটি আক্ষরিক স্ট্রিং বা স্ট্রিং ফ্লো ভেরিয়েবল হতে পারে।

উদাহরণ

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

আর্গুমেন্ট

  • 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

Replace First ফাংশন

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

সিন্ট্যাক্স

replaceFirst(string,regex,value)

আর্গুমেন্ট

  • string - একটি আক্ষরিক স্ট্রিং বা স্ট্রিং ফ্লো ভেরিয়েবল যেখানে রিপ্লেসমেন্ট করতে হবে।
  • regex - একটি রেগুলার এক্সপ্রেশন।
  • value - স্ট্রিংয়ের মধ্যে রেজেক্স ম্যাচ রিপ্লেস করার ভ্যালু।

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

ফাংশন যা কোনও স্ট্রিংয়ে বিশেষ অক্ষর এড়িয়ে যায় বা এনকোড করে।

সিন্ট্যাক্স

ফাংশন বিবরণ
escapeJSON(string) ব্যাকস্ল্যাশ ডবল কোটেশন এড়িয়ে যায়।
escapeXML(string) অ্যাঙ্গেল ব্র্যাকেট, অ্যাপোস্ট্রফি, ডবল কোট ও অ্যামপারস্যান্ডের পরিবর্তে সংশ্লিষ্ট XML এন্টিটি ব্যবহার করে। XML 1.0 ডকুমেন্টের জন্য ব্যবহার করুন।

escapeXML11(string) escapeXML-এর মতোই কাজ করে, তবে XML v1.1 এন্টিটির জন্য। নিচে ব্যবহারের নোট দেখুন।
encodeHTML(string) অ্যাপোস্ট্রফি, অ্যাঙ্গেল ব্র্যাকেট ও অ্যাম্পারস্যান্ড এনকোড করে।

আর্গুমেন্ট

string - The string to escape. এটি আক্ষরিক স্ট্রিং বা স্ট্রিং ফ্লো ভেরিয়েবল হতে পারে।

ব্যবহার সংক্রান্ত নোট

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

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

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

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

উদাহরণ

ধরে নিন, food নামের একটি ফ্লো ভেরিয়েবল আছে যার ভ্যালু হল: "bread" & "butter". তারপর, ফাংশন:

{escapeHTML(food)}

ফলাফল:

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

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

স্থানীয় টাইম জোনে বা UTC-তে ফর্ম্যাট করা সময়ের স্ট্রিং রেপ্রেজেন্টেশন রিটার্ন করে।

সিন্ট্যাক্স

ফাংশন বিবরণ
timeFormat(format,str) স্থানীয় টাইম জোনে ফর্ম্যাট করা তারিখ রিটার্ন করে।
timeFormatMs(format,str) স্থানীয় টাইম জোনে ফর্ম্যাট করা তারিখ রিটার্ন করে।
timeFormatUTC(format,str) UTC-তে ফর্ম্যাট করা তারিখ রিটার্ন করে।
timeFormatUTCMs(format,str) UTC-তে ফর্ম্যাট করা তারিখ রিটার্ন করে।

আর্গুমেন্ট

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

উদাহরণ

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

  • 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 এনকোড করে।

    আর্গুমেন্ট

    • key - (প্রয়োজনীয়) HMAC গণনা করার জন্য ব্যবহৃত সিক্রেট কীকে স্ট্রিং হিসেবে এনকোড করে নির্দিষ্ট করে।
    • valueToSign - (প্রয়োজনীয়) স্বাক্ষর করার জন্য মেসেজ নির্দিষ্ট করে। এটি একটি স্ট্রিং হতে হবে।
    • keyencoding - (ঐচ্ছিক) এই নির্দিষ্ট এনকোডিং অনুযায়ী সিক্রেট কী স্ট্রিং ডিকোড করা হবে। সঠিক মান: hex, base16, base64, utf-8. ডিফল্ট: utf-8
    • outputencoding - (ঐচ্ছিক) আউটপুটের জন্য ব্যবহার করার এনকোডিং অ্যালগরিদম নির্দিষ্ট করে। সঠিক মান: 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 Signature v4 সাইনিং প্রসেসের সাথে ব্যবহার করা যেতে পারে। AWS Signature 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

    Random Long Generator ফাংশন

    একটি র‌্যান্ডম বড় পূর্ণসংখ্যা রিটার্ন করে।

    সিন্ট্যাক্স

    randomLong(args)

    আর্গুমেন্ট

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

    উদাহরণ

    {random()}

    এর ফলে এই ধরনের কিছু হয়:

    5211338197474042880

    রেগুলার এক্সপ্রেশন টেক্সট জেনারেটর

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

    সিন্ট্যাক্স

    xeger(regex)

    আর্গুমেন্ট

    regex - একটি রেগুলার এক্সপ্রেশন।

    উদাহরণ

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

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

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

    9857253

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

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

    সিন্ট্যাক্স

    firstnonnull(var1,varnn>)

    আর্গুমেন্ট

    var1 - একটি প্রসঙ্গ সংক্রান্ত ভেরিয়েবল।

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

    উদাহরণ

    নিচের সারণী থেকে ফাংশনটি কীভাবে ব্যবহার করতে হয় তা জানতে পারবেন:

    টেমপ্লেট Var1 Var2 Var3 ফলাফল
    {firstnonnull(var1,var2)} সেট করা নেই foo প্রযোজ্য নয় foo
    {firstnonnull(var1,var2)} foo bar প্রযোজ্য নয় foo
    {firstnonnull(var1,var2)} foo সেট করা নেই প্রযোজ্য নয় 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)} সেট করা নেই প্রযোজ্য নয় প্রযোজ্য নয় null
    {firstnonnull(var1)} foo প্রযোজ্য নয় প্রযোজ্য নয় foo
    {firstnonnull(var1,var2)} "" bar প্রযোজ্য নয় ""
    {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 থাকা ফ্লো ভেরিয়েবল বা স্ট্রিং।

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

    নমুনা ১

    ধরে নিন, এইসব কনটেক্সট ভেরিয়েবল একটি XML স্ট্রিং ও XPath এক্সপ্রেশনকে সংজ্ঞায়িত করে:

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

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

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

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

    নমুনা ২

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

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

    এই অপারেশনের ফলে, কনটেক্সট ভেরিয়েবল extracted_tag-এর মান 250397 হিসেবে সেট করা হয়

    একাধিক নোড বেছে নেওয়া হলে, xpath()-এর ফলাফল হল বেছে নেওয়া সব ভ্যালু যেগুলি কমা দিয়ে কনক্যাটেনেট করা হয়েছে।

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

    নেমস্পেস নির্দিষ্ট করতে, অতিরিক্ত প্যারামিটার যোগ করুন, প্রতিটি প্যারামিটার হল একটি স্ট্রিং যা prefix:namespaceuri-এর মতো দেখতে। যেমন, SOAP বডির চাইল্ড এলিমেন্ট বেছে নেয় এমন 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() ফাংশনে সর্বাধিক ১০টি অতিরিক্ত প্যারামিটার যোগ করতে পারবেন।

    আপনি সিঙ্গেল কোটেশনের মধ্যে স্ট্রিং হিসেবে একটি সাধারণ XPath এক্সপ্রেশন নির্দিষ্ট করতে পারেন:

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

    XPath এক্সপ্রেশনে নেমস্পেস প্রিফিক্স (ও কোলন) থাকলে, আপনাকে সেই XPath এক্সপ্রেশনটি একটি ভেরিয়েবলে অ্যাসাইন করতে হবে এবং সরাসরি এক্সপ্রেশনটি না লিখে ভেরিয়েবলের নাম উল্লেখ করতে হবে।

    {xpath(xpathexpression,xml,ns1)}

    উদাহরণ ৪: কাঙ্ক্ষিত রিটার্ন টাইপ নির্দিষ্ট করা

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

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

    count(//Record/Fields/Pair)

    এই সঠিক কোয়েরি একটি বুলিয়ান রিটার্ন করে:

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

    সেইসব ক্ষেত্রে, সেই ধরনের উল্লেখ করে তৃতীয় প্যারামিটার সহ xpath() ফাংশন ইনভোক করুন:

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

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

    JSON Path ফাংশন

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

    সিন্ট্যাক্স

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

    আর্গুমেন্ট

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

    নমুনা ১

    এটি মেসেজ টেমপ্লেট হলে:

    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' সহ ফাংশনটি কল করুন, যেমনটি পরবর্তী উদাহরণে দেখানো হয়েছে।

    নমুনা ২

    এটি মেসেজ টেমপ্লেট হলে:

    {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']