আপনি Apigee Edge-এর ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশন .info- তে যান।
এই টপিকে এপিআই প্রক্সিতে মেসেজ টেমপ্লেট ব্যবহারের পদ্ধতি আলোচনা করা হয়েছে এবং একটি ফাংশন রেফারেন্স প্রদান করা হয়েছে।
মেসেজ টেমপ্লেট বলতে কী বোঝায়?
একটি মেসেজ টেমপ্লেট আপনাকে নির্দিষ্ট পলিসি এবং টার্গেটএন্ডপয়েন্ট এলিমেন্টগুলিতে পরিবর্তনশীল স্ট্রিং প্রতিস্থাপন করার অনুমতি দেয়। এই বৈশিষ্ট্যটি, যেখানে সমর্থিত, একটি প্রক্সি কার্যকর হওয়ার সময় আপনাকে গতিশীলভাবে স্ট্রিংগুলি পূরণ করতে দেয়।
আপনি একটি মেসেজ টেমপ্লেটে ফ্লো ভেরিয়েবল রেফারেন্স এবং আক্ষরিক টেক্সটের যেকোনো সংমিশ্রণ অন্তর্ভুক্ত করতে পারেন। ফ্লো ভেরিয়েবলের নাম অবশ্যই কার্লি ব্র্যাকেটের মধ্যে থাকতে হবে, অন্যদিকে কার্লি ব্র্যাকেটের বাইরে থাকা যেকোনো টেক্সট আক্ষরিক টেক্সট হিসেবে আউটপুট হয়।
আরও দেখুন: আপনি মেসেজ টেমপ্লেট কোথায় ব্যবহার করতে পারেন?
উদাহরণ
উদাহরণস্বরূপ, অ্যাসাইন মেসেজ পলিসি আপনাকে <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> এলিমেন্টের নিম্নলিখিত উপাদানগুলো মেসেজ টেমপ্লেটিং সমর্থন করে:
- হেডার
- কোয়েরিপ্যারাম
- ফর্মপরাম
- পেলোড
- সংস্করণ
- ক্রিয়া
- পথ
- স্ট্যাটাসকোড
- কারণ বাক্যাংশ
আবার মনে রাখবেন যে, মেসেজ টেমপ্লেটের ফ্লো ভেরিয়েবল অবশ্যই কার্লি ব্র্যাকেটের মধ্যে রাখতে হবে ।
যখন এই নীতি কার্যকর হয়:
- হেডার এলিমেন্টগুলো নির্দিষ্ট ফ্লো ভেরিয়েবলগুলোর মান গ্রহণ করে।
- পেলোডে আক্ষরিক টেক্সট এবং ভেরিয়েবলের মিশ্রণ থাকে (
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>
মেসেজ টেমপ্লেটগুলো কোথায় ব্যবহার করা যায়?
মেসেজ টেমপ্লেটগুলো বেশ কয়েকটি পলিসিতে এবং সেইসাথে টার্গেটএন্ডপয়েন্ট কনফিগারেশনে ব্যবহৃত নির্দিষ্ট কিছু উপাদানে সমর্থিত।
যে নীতিগুলি বার্তা টেমপ্লেট গ্রহণ করে
| নীতি | মেসেজ টেমপ্লেট সমর্থনকারী এলিমেন্ট এবং চাইল্ড-এলিমেন্ট |
|---|---|
| অ্যাক্সেস কন্ট্রোল নীতি | <SourceAddress> , mask অ্যাট্রিবিউট এবং আইপি অ্যাড্রেসের জন্য। |
| বার্তা নীতি নির্ধারণ করুন | <Set> চাইল্ড এলিমেন্টসমূহ: Payload, ContentType, Verb, Version, Path, StatusCode, ReasonPhrase, Headers, QueryParams, FormParams |
| এক্সটেনশনকলআউট নীতি | <Input> |
| ভেরিয়েবল নিষ্কাশন নীতি | <JsonPath> |
| GenerateJWS নীতি VerifyJWS নীতি | <Payload> (শুধুমাত্র GenerateJWS পলিসির জন্য ) এই উপাদানগুলো শুধুমাত্র type=map হলেই মেসেজ টেমপ্লেট সমর্থন করে। |
| GenerateJWT নীতি VerifyJWT নীতি | <AdditionalClaims><Claim> এই উপাদানগুলো শুধুমাত্র type=map হলেই মেসেজ টেমপ্লেট সমর্থন করে। |
| এলডিএপি নীতি | <SearchQuery> |
| বার্তা লগিং নীতি | <Syslog><Message> |
| OAS বৈধতা নীতি | উপাদান |
| RaiseFault নীতি | <Set> উপাদানসমূহ: পেলোড, কন্টেন্টটাইপ, ভার্ব, ভার্সন, পাথ, স্ট্যাটাসকোড, রিজনফ্রেজ, হেডার, কোয়েরিপ্যারামস, ফর্মপ্যারামস |
| SAMLAssertion নীতি | <Template> শুধুমাত্র যখন পলিসি সিগনেচারটি |
| সার্ভিসকলআউট নীতি | <Set> উপাদানসমূহ: পেলোড, কন্টেন্টটাইপ, ভার্ব, ভার্সন, পাথ, স্ট্যাটাসকোড, রিজনফ্রেজ, /হেডার্স, কোয়েরিপ্যারামস, ফর্মপ্যারামস |
TargetEndpoint এলিমেন্ট যা মেসেজ টেমপ্লেট গ্রহণ করে
| HTTPTargetConnection উপাদান | চাইল্ড-এলিমেন্ট যা মেসেজ টেমপ্লেট সমর্থন করে |
|---|---|
| এসএসএলইনফো | সক্ষম, KeyAlias, KeyStore, TrustStore, ClientAuthEnabled, CLRStore |
| লোকালটার্গেটকানেকশন | এপিআইপ্রক্সি, প্রক্সিএন্ডপয়েন্ট |
| পথ | 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 পেলোডের জন্য পুরোনো সিনট্যাক্স
ক্লাউড রিলিজ 16.08.17-এর আগের Edge সংস্করণগুলিতে, 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."
}এরপর, ধরা যাক আপনি এই বার্তাটি একটি কাস্টম পেলোডে ক্লায়েন্ট কলারের কাছে ফেরত পাঠাতে চান। এটি করার প্রচলিত উপায় হলো টার্গেট রেসপন্স পেলোড থেকে বার্তাটি বের করে নেওয়া এবং 'অ্যাসাইন মেসেজ' ব্যবহার করে এটিকে একটি কাস্টম প্রক্সি রেসপন্সে যুক্ত করা (অর্থাৎ, ক্লায়েন্টের কাছে ফেরত পাঠানো)।
এখানে এক্সট্র্যাক্ট ভ্যারিয়েবলস পলিসিটি রয়েছে যা 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.",
}মেসেজ টেমপ্লেট হলো একটি ডাইনামিক স্ট্রিং সাবস্টিটিউশন ফিচার যা আপনি নির্দিষ্ট পলিসি এবং টার্গেটএন্ডপয়েন্ট ডেফিনিশনে ব্যবহার করতে পারেন। মেসেজ টেমপ্লেট ফাংশনগুলো আপনাকে একটি মেসেজ টেমপ্লেটের মধ্যেই হ্যাশিং, স্ট্রিং ম্যানিপুলেশন, ক্যারেক্টার এস্কেপিং এবং অন্যান্য দরকারি অপারেশন সম্পাদন করতে দেয়।
উদাহরণস্বরূপ, নিম্নলিখিত 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) | একটি SHA1 হ্যাশ গণনা করে যা Base64 এনকোডেড মান হিসাবে প্রকাশিত হয়। |
sha256Base64(string) | একটি SHA256 হ্যাশ গণনা করে যা Base64 এনকোডেড মান হিসাবে প্রকাশ করা হয়। |
sha384Base64(string) | একটি SHA384 হ্যাশ গণনা করে যা Base64 এনকোডেড মান হিসাবে প্রকাশিত হয়। |
sha512Base64(string) | একটি SHA512 হ্যাশ গণনা করে যা Base64 এনকোডেড মান হিসাবে প্রকাশ করা হয়। |
যুক্তি
স্ট্রিং - হ্যাশ ফাংশনগুলো একটিমাত্র স্ট্রিং আর্গুমেন্ট গ্রহণ করে, যার উপর হ্যাশ অ্যালগরিদমটি গণনা করা হয়। আর্গুমেন্টটি একটি লিটারেল স্ট্রিং অথবা একটি স্ট্রিং ফ্লো ভ্যারিয়েবল হতে পারে।
উদাহরণ
ফাংশন কল:
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 স্ট্রিংটি রিটার্ন করে। |
যুক্তি
স্ট্রিং - যে স্ট্রিংটি এনকোড বা ডিকোড করতে হবে। এটি একটি লিটারাল স্ট্রিং বা স্ট্রিং ফ্লো ভেরিয়েবল হতে পারে।
উদাহরণ
<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 - যে স্ট্রিংটিকে রূপান্তর করতে হবে। এটি একটি আক্ষরিক স্ট্রিং বা একটি স্ট্রিং ফ্লো ভেরিয়েবল হতে পারে।
উদাহরণ
<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 | ৭ |
এই ভেরিয়েবলগুলো ব্যবহার করে করা ফাংশন কলগুলোর ফলাফল নিচে দেওয়া হলো:
| বার্তা টেমপ্লেট এক্সপ্রেশন | ফলাফল |
|---|---|
{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 - একটি রেগুলার এক্সপ্রেশন।
- value - স্ট্রিংটির মধ্যে রেজেক্স ম্যাচগুলোকে প্রতিস্থাপন করার জন্য মানটি।
অক্ষর এস্কেপ এবং এনকোডিং ফাংশন
স্ট্রিং-এর বিশেষ অক্ষরগুলোকে এস্কেপ বা এনকোড করার ফাংশন।
সিনট্যাক্স
| ফাংশন | বর্ণনা |
|---|---|
| escapeJSON(string) | ব্যাকস্ল্যাশ ডাবল-কোটকে এস্কেপ করে। |
| escapeXML(string) | অ্যাঙ্গেল ব্র্যাকেট, অ্যাপস্ট্রফি, ডাবল-কোট এবং অ্যামপারস্যান্ডকে সংশ্লিষ্ট XML এনটিটি দ্বারা প্রতিস্থাপন করে। XML 1.0 ডকুমেন্টের জন্য ব্যবহার করুন। |
| escapeXML11(স্ট্রিং) | এটি escapeXML-এর মতোই কাজ করে, তবে XML v1.1 এনটিটিগুলোর জন্য। নিচে ব্যবহারবিধি দেখুন। |
| এনকোডএইচটিএমএল(স্ট্রিং) | অ্যাপস্ট্রফি, অ্যাঙ্গেল ব্র্যাকেট এবং অ্যামপারস্যান্ড এনকোড করে। |
যুক্তি
string - যে স্ট্রিংটিকে এস্কেপ করতে হবে। এটি একটি লিটারেল স্ট্রিং বা স্ট্রিং ফ্লো ভেরিয়েবল হতে পারে।
ব্যবহারের নির্দেশাবলী
এক্সএমএল ১.১ কিছু নির্দিষ্ট কন্ট্রোল ক্যারেক্টার উপস্থাপন করতে পারে, কিন্তু এস্কেপ করার পরেও এটি নাল বাইট বা জোড়াবিহীন ইউনিকোড সারোগেট কোডপয়েন্ট উপস্থাপন করতে পারে না। escapeXML11() ফাংশনটি সেইসব ক্যারেক্টার সরিয়ে দেয় যেগুলো নিম্নলিখিত পরিসরের মধ্যে পড়ে না:
[#x1-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]
escapeXML11() ফাংশনটি নিম্নলিখিত পরিসরের অক্ষরগুলিকে এস্কেপ করে:
[#x1-#x8] | [#xB-#xC] | [#xE-#x1F] | [#x7F-#x84] | [#x86-#x9F]
উদাহরণ
ধরা যাক, food নামে একটি ফ্লো ভ্যারিয়েবল আছে যার মান হলো: "bread" & "butter" । তাহলে, ফাংশনটি হলো:
{escapeHTML(food)}এর ফলে:
"bread" & "butter"সময় বিন্যাস ফাংশন
সময়টির একটি স্ট্রিং রূপ ফেরত দিন, যা স্থানীয় সময় অঞ্চল বা UTC-তে ফরম্যাট করা থাকবে।
সিনট্যাক্স
| ফাংশন | বর্ণনা |
|---|---|
timeFormat(format,str) | স্থানীয় সময় অঞ্চল অনুযায়ী তারিখটি ফেরত দেয়। |
timeFormatMs(format,str) | স্থানীয় সময় অঞ্চল অনুযায়ী তারিখটি ফেরত দেয়। |
timeFormatUTC(format,str) | UTC ফরম্যাটে তারিখটি ফেরত দেয়। |
timeFormatUTCMs(format,str) | UTC ফরম্যাটে তারিখটি ফেরত দেয়। |
যুক্তি
- ফরম্যাট - একটি তারিখ/সময় ফরম্যাট স্ট্রিং। এটি একটি আক্ষরিক স্ট্রিং বা একটি স্ট্রিং ভেরিয়েবল হতে পারে।
- str - একটি স্ট্রিং বা স্ট্রিং ফ্লো ভেরিয়েবল যা একটি সময়ের মান ধারণ করে। timeFormatMs-এর জন্য মানটি seconds-since-epoch অথবা milliseconds-since-epoch এককে হতে পারে।
উদাহরণ
নিম্নলিখিত মানগুলি ধরে নিন এবং স্থানীয় সময় অঞ্চলটি প্যাসিফিক বলে ধরে নিন:
-
epoch_time_ms = 1494390266000 -
epoch_time = 1494390266 -
fmt1 = yyyy-MM-dd -
fmt2 = yyyy-MM-dd HH-mm-ss -
fmt3 = yyyyMMddHHmmss
ফাংশনগুলো নিম্নলিখিত ফলাফলগুলো প্রদান করে:
- key - (আবশ্যক) HMAC গণনা করতে ব্যবহৃত গোপন কী-টি একটি স্ট্রিং হিসাবে এনকোড করে নির্দিষ্ট করে।
- valueToSign - (আবশ্যক) স্বাক্ষর করার জন্য বার্তাটি নির্দিষ্ট করে। এটি একটি স্ট্রিং হতে হবে।
- কী এনকোডিং - (ঐচ্ছিক) গোপন কী স্ট্রিংটি এই নির্দিষ্ট এনকোডিং অনুযায়ী ডিকোড করা হবে। বৈধ মান:
hex,base16,base64,utf-8। ডিফল্ট:utf-8 - আউটপুট এনকোডিং - (ঐচ্ছিক) আউটপুটের জন্য ব্যবহৃত এনকোডিং অ্যালগরিদম নির্দিষ্ট করে। বৈধ মান:
hex,base16,base64। মানগুলো কেস-ইনসেনসিটিভ;hexএবংbase16সমার্থক শব্দ। ডিফল্ট:base64 - কোনো আর্গুমেন্ট নির্দিষ্ট না করা হলে, ফাংশনটি জাভার SecureRandom ক্লাস দ্বারা গণনাকৃত একটি র্যান্ডম লং ইন্টিজার রিটার্ন করে।
- যদি একটি আর্গুমেন্ট থাকে, তবে সেটিকে গণনার সর্বনিম্ন মান হিসেবে গণ্য করা হয়।
- যদি দ্বিতীয় কোনো আর্গুমেন্ট থাকে, তবে সেটিকে গণনার সর্বোচ্চ মান হিসেবে গণ্য করা হয়।
- (আবশ্যক)
json-path: (স্ট্রিং) একটি JSON পাথ এক্সপ্রেশন। - (আবশ্যক)
json-var: (স্ট্রিং) একটি ফ্লো ভেরিয়েবল বা স্ট্রিং যা JSON ধারণ করে। - (ঐচ্ছিক)
want-array: (স্ট্রিং) যদি এই প্যারামিটারটি'true'তে সেট করা থাকে এবং ফলাফল সেটটি একটি অ্যারে হয়, তাহলে অ্যারের সমস্ত উপাদান ফেরত দেওয়া হবে। যদি অন্য কোনো মান সেট করা হয় বা এই প্যারামিটারটি বাদ দেওয়া হয়, তাহলে ফলাফল সেট অ্যারের শুধুমাত্র শূন্যতম উপাদানটি ফেরত দেওয়া হবে। যদি ফলাফল সেটটি একটি অ্যারে না হয়, তাহলে এই তৃতীয় প্যারামিটারটি, যদি থাকে, উপেক্ষা করা হবে।
| ফাংশন | আউটপুট |
|---|---|
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-এর কী (key) হিসেবে ব্যবহৃত হয়।
সিনট্যাক্স
| ফাংশন | বর্ণনা |
|---|---|
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-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
র্যান্ডম লং জেনারেটর ফাংশন
একটি র্যান্ডম লং ইন্টিজার রিটার্ন করে।
সিনট্যাক্স
randomLong(args)
যুক্তি
উদাহরণ
{random()}এর ফলে ব্যাপারটা অনেকটা এইরকম হয়:
5211338197474042880রেজেক্স টেক্সট জেনারেটর
প্রদত্ত রেগুলার এক্সপ্রেশনের সাথে মেলে এমন একটি টেক্সট স্ট্রিং তৈরি করুন।
সিনট্যাক্স
xeger(regex)
যুক্তি
regex - একটি রেগুলার এক্সপ্রেশন।
উদাহরণ
এই উদাহরণটি কোনো শূন্য ছাড়া একটি সাত অঙ্কের স্ট্রিং তৈরি করে:
xeger('[1-9]{7}')উদাহরণ ফলাফল:
9857253নাল-কোয়ালেসিং ফাংশন
firstnonnull() ফাংশনটি সর্ববামের নন-নাল আর্গুমেন্টের মান রিটার্ন করে।
সিনট্যাক্স
firstnonnull(var1,varnn>)
যুক্তি
var1 - একটি কনটেক্সট ভেরিয়েবল।
var n - এক বা একাধিক কনটেক্সট ভেরিয়েবল। আপনি ডানদিকের আর্গুমেন্টটিকে একটি স্ট্রিং-এ সেট করে একটি ফলব্যাক ভ্যালু প্রদান করতে পারেন (এমন একটি ভ্যালু যা বামদিকের কোনো আর্গুমেন্ট সেট করা না থাকলে সেট হবে)।
উদাহরণ
নিচের সারণিতে ফাংশনটি কীভাবে ব্যবহার করতে হয় তা দেখানো হয়েছে:
| টেমপ্লেট | ভ্যার১ | ভ্যার২ | ভ্যার৩ | ফলাফল |
|---|---|---|---|---|
{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 - একটি এক্সপাথ এক্সপ্রেশন।
xml_string - একটি ফ্লো ভেরিয়েবল বা স্ট্রিং যা XML ধারণ করে।
ডেটাটাইপ - (ঐচ্ছিক) কোয়েরির কাঙ্ক্ষিত রিটার্ন টাইপ নির্দিষ্ট করে। এটি নোডসেট, নোড, নাম্বার, বুলিয়ান বা স্ট্রিং হতে পারে। এর ডিফল্ট মান হলো নোডসেট। ডিফল্টটিই সাধারণত সঠিক পছন্দ।
উদাহরণ ১
ধরা যাক, এই কনটেক্সট ভেরিয়েবলগুলো একটি 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 নামক কনটেক্সট ভেরিয়েবলে রাখা হয়।
উদাহরণ ২
যদি আপনি শুধু নোডটির মান চান, তাহলে নিম্নলিখিতভাবে text() ফাংশনটি ব্যবহার করুন:
<AssignMessage>
<AssignVariable>
<Name>extracted_tag</Name>
<Template>{xpath('/tag/tagid/text()',xml)}</Template>
</AssignVariable>
</AssignMessage>এই অপারেশনের ফলে, extracted_tag কনটেক্সট ভেরিয়েবলটির মান 250397 সেট করা হয়।
যদি একাধিক নোড নির্বাচন করা হয়, তাহলে xpath() এর ফলাফল হবে নির্বাচিত নোডগুলোর সমস্ত মান, যা একটি কমা দিয়ে সংযুক্ত থাকবে।
উদাহরণ ৩: এক্সএমএল নেমস্পেস
একটি নেমস্পেস নির্দিষ্ট করতে, অতিরিক্ত প্যারামিটার যুক্ত করুন, যার প্রতিটি হবে 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 পাথ ফাংশন
একটি JSON ভেরিয়েবলে JSON পাথ এক্সপ্রেশন প্রয়োগ করে।
সিনট্যাক্স
jsonPath(json-path,json-var,want-array)
যুক্তি
উদাহরণ ১
যদি এটি বার্তা টেমপ্লেট হয়:
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']