คุณกําลังดูเอกสารประกอบของ Apigee Edge
ไปที่เอกสารประกอบของ Apigee X info
หัวข้อนี้จะกล่าวถึงวิธีใช้เทมเพลตข้อความในพร็อกซี API และแสดงข้อมูลอ้างอิงฟังก์ชัน
เทมเพลตข้อความคืออะไร
เทมเพลตข้อความช่วยให้คุณทำการเปลี่ยนค่าสตริงแบบตัวแปรในองค์ประกอบนโยบายและ TargetEndpoint บางรายการได้ ฟีเจอร์นี้ (หากรองรับ) ช่วยให้คุณป้อนสตริงแบบไดนามิกเมื่อพร็อกซีทำงาน
คุณสามารถใส่การอ้างอิงตัวแปรของโฟลว์และข้อความที่เป็นตัวอักษรล้วนผสมกันในเทมเพลตข้อความได้ ชื่อตัวแปรของโฟลว์ต้องอยู่ในวงเล็บปีกกา ส่วนข้อความที่ไม่ได้อยู่ในวงเล็บปีกกาจะแสดงเป็นข้อความตัวอักษร
โปรดดูหัวข้อใช้เทมเพลตข้อความได้ที่ไหนบ้าง
ตัวอย่าง
ตัวอย่างเช่น นโยบายกำหนดข้อความให้คุณใช้เทมเพลตข้อความภายในองค์ประกอบ <Payload>
ได้ดังนี้
<AssignMessage name="set-dynamic-content<"> AssignTo createNew="false<" type=&<quot;resp<onse">/AssignTo> Set> Payload contentType="application/json"> {"name":"<Alert",< "m<essage":"You entered <an invalid username: {user.n<ame}"} /Payload> /Set> IgnoreUnresolvedVariables>false/IgnoreUnresolvedVariables> /AssignMessage>
ในตัวอย่างข้างต้น ระบบจะประเมินค่าของตัวแปรโฟลว์ user.name
(ในวงเล็บปีกกา) และแทนที่ลงในสตริงเพย์โหลดที่รันไทม์ ตัวอย่างเช่น หาก user.name=jdoe
เอาต์พุตข้อความที่ได้ในเพย์โหลดจะเป็น You entered an invalid username: jdoe
หากไม่สามารถแก้ไขตัวแปรได้ ระบบจะแสดงสตริงว่าง
ตัวอย่าง
เมื่อใช้โควต้าเกิน ขอแนะนําให้แสดงข้อความที่สื่อความหมายต่อผู้โทร รูปแบบนี้มักใช้กับ "กฎข้อบกพร่อง" เพื่อแสดงผลลัพธ์เพื่อแจ้งข้อมูลการละเมิดโควต้าแก่ผู้เรียก ในนโยบายการกําหนดข้อความต่อไปนี้ ระบบจะใช้เทมเพลตข้อความเพื่อป้อนข้อมูลโควต้าแบบไดนามิกในองค์ประกอบ XML หลายรายการ
<AssignMessage name='AM-QuotaViolationMessage&<#39;> Description>message for <quota exceeded/D<escription> IgnoreUnresolv<edVariables>false/IgnoreUnr<esolvedVa<riables> S<et> Headers> Header name='X-Quota-Reset<'>{ratel<imit.Quota-1.expiry.time}/Header> Header name='X-Q<uota-Allowed<9;>{ratelimit.Quota-1.allowed.count}/Header> Header nam<e='X-Quot<a-Available<9;>{ratelimit.Quota-1.available.count}/Header> /Headers> Payload contentType='application/json'>{ "error" : { "<message" <: "you ha<ve exceeded your <quota", "clie<ntId" : &quo<t;{req<uest.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&quo<t;> … HTTPTargetCon<nection> S<SLInfo> Enabled&g<t;{myvars.ssl.enab<led}/Enabled> ClientAuthEnabled>{myv<ars.ssl.client.auth.enabled}</ClientAuthEnabled> < KeyStore>{myvar<s.ssl.keystore}/KeyStore> < KeyAlias><{myvars.ssl.keyAlias}/KeyAlias>< TrustSto<re>{myvars<.ssl.trustStore}/TrustStore<> /SSLInfo> /HTTPTargetConnection> … /TargetEndpoint>
คุณใช้เทมเพลตข้อความได้ที่ไหนบ้าง
เทมเพลตข้อความใช้ได้กับนโยบายหลายรายการ รวมถึงองค์ประกอบบางอย่างที่ใช้ในการกำหนดค่าปลายทาง
นโยบายที่ยอมรับเทมเพลตข้อความ
นโยบาย | องค์ประกอบและองค์ประกอบย่อยที่รองรับเทมเพลตข้อความ |
---|---|
นโยบายการควบคุมการเข้าถึง | <SourceAddress> สำหรับแอตทริบิวต์ mask และที่อยู่ IP |
นโยบาย AssignMessage | องค์ประกอบย่อย <Set> : Payload, ContentType, Verb, Version, Path, StatusCode, ReasonPhrase, Headers, QueryParams, FormParams
องค์ประกอบย่อย
องค์ประกอบย่อย |
นโยบาย ExtensionCallout |
<Input> |
นโยบาย ExtractVariables | <JsonPath>
|
นโยบาย GenerateJWS นโยบาย VerifyJWS |
<Payload> (นโยบาย GenerateJWS เท่านั้น)
* องค์ประกอบเหล่านี้รองรับเทมเพลตข้อความเฉพาะเมื่อ type=map |
นโยบาย GenerateJWT นโยบาย VerifyJWT |
<AdditionalClaims><Claim>
* องค์ประกอบเหล่านี้รองรับเทมเพลตข้อความเฉพาะเมื่อ type=map |
นโยบาย LDAP | <SearchQuery> |
นโยบายการบันทึกข้อความ | <Syslog><Message>
|
นโยบาย OASValidation | องค์ประกอบ
|
นโยบาย RaiseFault | <Set> elements: Payload, ContentType, Verb, Version, Path, StatusCode, ReasonPhrase, Headers, QueryParams, FormParams
|
นโยบาย SAMLAssertion | <Template>
* เฉพาะเมื่อลายเซ็นนโยบายคือ |
นโยบาย ServiceCallout | <Set> elements: Payload, ContentType, Verb, Version, Path, StatusCode, ReasonPhrase, /Headers, QueryParams, FormParams
|
องค์ประกอบ TargetEndpoint ที่ยอมรับเทมเพลตข้อความ
องค์ประกอบ HTTPTargetConnection | องค์ประกอบย่อยที่รองรับเทมเพลตข้อความ |
---|---|
SSLInfo | Enabled, KeyAlias, KeyStore, TrustStore, ClientAuthEnabled, CLRStore |
LocalTargetConnection | ApiProxy, ProxyEndpoint |
เส้นทาง | เมื่อใช้องค์ประกอบ LoadBalancer องค์ประกอบ Path จะทำงานอยู่และยอมรับเทมเพลตข้อความ |
ไวยากรณ์เทมเพลตข้อความ
ส่วนนี้จะอธิบายกฎที่คุณต้องทำตามเพื่อใช้เทมเพลตข้อความ
ใช้วงเล็บปีกกาเพื่อระบุตัวแปร
ใส่ชื่อตัวแปรในวงเล็บปีกกา { } หากไม่มีตัวแปร ระบบจะแสดงสตริงว่างเปล่าในเอาต์พุต แต่คุณระบุค่าเริ่มต้นในเทมเพลตข้อความได้ (ค่าที่จะแทนที่หากระบบไม่สามารถแก้ไขตัวแปรได้) ดูการตั้งค่าเริ่มต้นในเทมเพลตข้อความ
โปรดทราบว่าคุณใส่เครื่องหมายคำพูดล้อมรอบสตริงเทมเพลตข้อความทั้งหมดได้ แต่ไม่บังคับ ตัวอย่างเช่น เทมเพลตข้อความ 2 รายการต่อไปนี้มีความหมายเหมือนกัน
<Set> < Headers> < Header name="x-h1"><"Hello {user<.name}"/Header> Head<er name="<;x-h1"<;>Hello {user.name}/Header> /Headers> /Set>
การตั้งค่าค่าเริ่มต้นในเทมเพลตข้อความ
หากไม่สามารถแก้ไขตัวแปรเทมเพลตได้ Edge จะแทนที่ด้วยสตริงว่าง แต่คุณระบุค่าเริ่มต้นได้ดังนี้
<Header name=">x-h1"Test message. id = {request.header.i<d:Unkno>wn}/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 เวอร์ชันก่อนรุ่น 16.08.17 ของ Cloud คุณไม่สามารถใช้วงเล็บปีกกาเพื่อระบุการอ้างอิงตัวแปรภายในเพย์โหลด JSON ในเวอร์ชันเก่าๆ เหล่านั้น คุณต้องใช้แอตทริบิวต์ variablePrefix
และ variableSuffix
เพื่อระบุอักขระคั่น และนำไปใช้ตัดชื่อตัวแปร ดังนี้
<Set> <Payload contentType="application/json" variablePrefix="@">; variableSuffix="#" {"name&q<uot;:&qu>o<t;fo>o", "type":"@variable_name#"} /Payload /Set
แม้ว่า Apigee จะแนะนำให้คุณใช้ไวยากรณ์วงเล็บปีกกาแบบใหม่ แต่ไวยากรณ์แบบเก่าก็ยังคงใช้งานได้
การใช้ฟังก์ชันเทมเพลตข้อความ
Edge มีชุดฟังก์ชันที่คุณใช้ในเทมเพลตข้อความเพื่อหลีก เข้ารหัส แฮช และจัดรูปแบบตัวแปรสตริงได้
ฟังก์ชันของเทมเพลตข้อความมีคำอธิบายโดยละเอียดในข้อมูลอ้างอิงฟังก์ชันเทมเพลตข้อความ
ตัวอย่าง: toLowerCase()
ใช้ฟังก์ชัน toLowerCase()
ในตัวเพื่อเปลี่ยนรูปแบบตัวแปรสตริงเป็นตัวพิมพ์เล็ก
<AssignMessage name="AM-Set-Custom-Response&q<uot;> AssignTo createNew="false"< type="response"/><; IgnoreUnresolvedVariables&<gt;true/Ignor<eUnresolvedVariables&<gt; Set> Headers> Header nam<e="x-h1"<;>Test head<er: {t<oLowerCase(foo.bar:FOO)}/Header> /Headers> /Set> /AssignMessage>
หากตัวแปรการไหล foo.bar
ได้รับการแก้ไข อักขระของตัวแปรจะเป็นตัวพิมพ์เล็กทั้งหมด
หาก foo.bar
ไม่สามารถแก้ไขได้ ระบบจะใช้ค่าเริ่มต้น FOO
แทนและแปลงเป็นอักขระตัวพิมพ์เล็ก เช่น
Test header: foo
ตัวอย่าง: escapeJSON()
ต่อไปนี้คือ Use Case ที่น่าสนใจ สมมติว่าแอปแบ็กเอนด์แสดงผลลัพธ์ JSON ที่มีอักขระหลีกที่ถูกต้อง เช่น
{ "code": "INVALID", "user_message": "Invalid value for \"logonId\" check your input." }
จากนั้นสมมติว่าคุณต้องการส่งข้อความนี้กลับไปยังผู้เรียกใช้ไคลเอ็นต์ในเพย์โหลดที่กำหนดเอง วิธีปกติในการทำเช่นนี้คือการดึงข้อความจากเพย์โหลดการตอบกลับเป้าหมาย และใช้ "กำหนดข้อความ" เพื่อเพิ่มลงในคำตอบพร็อกซีที่กำหนดเอง (กล่าวคือ ส่งกลับไปยังไคลเอ็นต์)
นโยบายการดึงข้อมูลตัวแปรที่ดึงข้อมูล user_message
ไปยังตัวแปรชื่อ standard.systemMessage
มีดังนี้
<ExtractVariables name="EV-BackendErrorResponse&q<uot;> DisplayName>EV-Back<endErrorResponse/D<isplayName> JS<ONPayload> Variable name="standard.s<ystemMessage"> < JSONPat<h>$.user_mes<sage/JSONPath&<gt; /Variable> /JSONPayload> /ExtractVariables>
ต่อไปนี้คือนโยบาย Assign Message ที่ถูกต้องสมบูรณ์ซึ่งเพิ่มตัวแปรที่ดึงมาลงในเพย์โหลดการตอบกลับ (การตอบกลับของพร็อกซี)
<AssignMessage name="AM-SetStandardFaultResponse&q<uot;> DisplayName>AM-SetStand<ardFaultResponse/D<isplayName><; Set> Payload contentType="application/json"> { "systemMessage": &qu<ot;{standard.s<ystemMessa<ge}" } < /Payload> /Set> I<gnoreUnresolvedVariables>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&q<uot;> DisplayName>AM-SetStand<ardFaultResponse/D<isplayName><; Set> Payload contentType="application/json"> { "systemMessage": "{escapeJS<ON(standard.sy<stemMessag<e)}" } < /Payload> /Set> I<gnoreUnresolvedVariables>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&q<uot;> AssignTo createNew="false"< type="response"/><; IgnoreUnresolvedVariables&<gt;true/Igno<reUnresolvedVariab<les> Set> Headers> Header name=&qu<ot;x-h1"><;Test header: <{Hello<, toLowerCase(user.name)}/Header> /Headers> /Set> /AssignMessage>
หัวข้อนี้จะอธิบายฟังก์ชันของเทมเพลตข้อความ อาร์กิวเมนต์ และเอาต์พุต หัวข้อนี้ถือว่าคุณคุ้นเคยกับเทมเพลตข้อความและบริบทการใช้งาน
ฟังก์ชันแฮช
คํานวณค่าแฮชและแสดงผลสตริงที่แสดงแฮชนั้น
ฟังก์ชันแฮชฐานสิบหก
คํานวณค่าแฮชและแสดงผลสตริงที่แสดงแฮชนั้นเป็นตัวเลขฐาน 16
ไวยากรณ์
การทำงาน | คำอธิบาย |
---|---|
md5Hex(string)
|
คํานวณแฮช MD5 ที่แสดงเป็นตัวเลขฐานสิบหก |
sha1Hex(string)
|
คํานวณแฮช SHA1 ที่แสดงเป็นตัวเลขฐาน 16 |
sha256Hex(string)
|
คํานวณแฮช SHA256 ที่แสดงเป็นตัวเลขฐาน 16 |
sha384Hex(string)
|
คํานวณแฮช SHA384 ที่แสดงเป็นตัวเลขฐาน 16 |
sha512Hex(string)
|
คํานวณแฮช SHA512 ที่แสดงเป็นตัวเลขฐาน 16 |
อาร์กิวเมนต์
สตริง - ฟังก์ชันแฮชใช้อาร์กิวเมนต์สตริงเดียวเพื่อคํานวณอัลกอริทึมแฮช อาร์กิวเมนต์อาจเป็นสตริงตัวอักษรหรือตัวแปรสตริงของโฟลว์ก็ได้
ตัวอย่าง
การเรียกใช้ฟังก์ชัน
sha256Hex('abc')
ผลลัพธ์:
ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad
การเรียกใช้ฟังก์ชัน
var str = 'abc'; sha256Hex(str)
ผลลัพธ์:
ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad
ฟังก์ชันแฮช Base64
คํานวณค่าแฮชและแสดงผลสตริงที่แสดงแฮชนั้นเป็นค่าที่เข้ารหัส Base64
ไวยากรณ์
การทำงาน | คำอธิบาย |
---|---|
md5Base64(string)
|
คํานวณแฮช MD5 ที่แสดงเป็นค่าที่เข้ารหัส Base64 |
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
|
อาร์กิวเมนต์
string - สตริงที่จะเข้ารหัสหรือถอดรหัส อาจเป็นสตริงตามตัวอักษรหรือตัวแปรสตริงของโฟลว์
ตัวอย่าง
<AssignMessage name="AM-Set-Custom-Response&q<uot;> AssignTo createNew="false"< type="response"/><; IgnoreUnresolvedVariables&<gt;true/Igno<reUnresolvedVariab<les> Set> Headers> Head<er name="x-<h1">He<llo, {<decodeBase64('d29ybGQK')}/Header> /Headers> /Set> /AssignMessage>
ฟังก์ชันการเปลี่ยนตัวพิมพ์เล็กและตัวพิมพ์ใหญ่
แปลงสตริงเป็นตัวพิมพ์ใหญ่ทั้งหมดหรือตัวพิมพ์เล็กทั้งหมด
ไวยากรณ์
การทำงาน | คำอธิบาย |
---|---|
toUpperCase(string)
|
แปลงสตริงเป็นตัวพิมพ์ใหญ่ |
toLowerCase(string)
|
แปลงสตริงเป็นตัวพิมพ์เล็ก |
อาร์กิวเมนต์
string - สตริงที่จะแปลง อาจเป็นสตริงตามตัวอักษรหรือตัวแปรสตริงของโฟลว์
ตัวอย่าง
<AssignMessage name="AM-Set-Custom-Response&q<uot;> AssignTo createNew="false"< type="response"/><; IgnoreUnresolvedVariables&<gt;true/Igno<reUnresolvedVariab<les> Set> Headers> He<ader name="<x-h1"><Hello,< {toLowerCase(user.name)}/Header> /Headers> /Set> /AssignMessage>
ฟังก์ชันสตริงย่อย
แสดงผลอักขระระหว่างดัชนีเริ่มต้นและดัชนีสิ้นสุดของสตริงที่ระบุ
ไวยากรณ์
substring(str,start_index,end_index)
อาร์กิวเมนต์
- str - สตริงตามตัวอักษรหรือตัวแปรสตริงของโฟลว์
- start_index - ดัชนีเริ่มต้นในสตริง
- end_index - (ไม่บังคับ) ดัชนีสิ้นสุดของสตริง หากไม่ได้ระบุ ดัชนีสิ้นสุดจะเป็นจุดสิ้นสุดของสตริง
ตัวอย่าง
สมมติว่าตัวอย่างต่อไปนี้มีตัวแปรการไหลเหล่านี้
ชื่อตัวแปร | ค่า |
---|---|
alpha
|
กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรลวศษสหฬอฮ |
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
|
แทนที่ฟังก์ชัน 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 - สตริงที่จะหลีก อาจเป็นสตริงตามตัวอักษรหรือตัวแปรสตริงของโฟลว์
หมายเหตุการใช้งาน
XML 1.1 สามารถแสดงตัวอักขระควบคุมบางตัวได้ แต่จะแสดงไบต์ว่างหรือโค้ดจุดแทน Unicode ที่ไม่จับคู่กันไม่ได้ แม้ว่าจะมีการหลีกก็ตาม ฟังก์ชัน 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 |
อาร์กิวเมนต์
- format - สตริงรูปแบบวันที่/เวลา อาจเป็นสตริงตัวอักษรหรือตัวแปรสตริงก็ได้
- str - สตริงหรือตัวแปรการไหลของสตริงที่มีค่าเวลา ค่าอาจเป็นวินาทีนับจากจุดเริ่มต้นหรือมิลลิวินาทีนับจากจุดเริ่มต้นสำหรับ timeFormatMs
ตัวอย่าง
สมมติว่าค่าต่อไปนี้และเขตเวลาท้องถิ่นคือแปซิฟิก
epoch_time_ms = 1494390266000
epoch_time = 1494390266
fmt1 = yyyy-MM-dd
fmt2 = yyyy-MM-dd HH-mm-ss
fmt3 = yyyyMMddHHmmss
ฟังก์ชันจะแสดงผลลัพธ์ต่อไปนี้
- key - (ต้องระบุ) ระบุคีย์ลับที่เข้ารหัสเป็นสตริงซึ่งใช้ในการคํานวณ HMAC
- valueToSign - (ต้องระบุ) ระบุข้อความที่จะเซ็น โดยต้องเป็นสตริง
- keyencoding - (ไม่บังคับ) ระบบจะถอดรหัสสตริงคีย์ลับตามการเข้ารหัสที่ระบุนี้ ค่าที่ถูกต้อง:
hex
,base16
,base64
,utf-8
ค่าเริ่มต้น:utf-8
- outputencoding - (ไม่บังคับ) ระบุอัลกอริทึมการเข้ารหัสที่จะใช้กับเอาต์พุต
ค่าที่ถูกต้อง:
hex
,base16
,base64
ค่าต่างๆ ไม่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ โดยhex
และbase16
เป็นคำพ้องความหมาย ค่าเริ่มต้น:base64
- หากไม่ได้ระบุอาร์กิวเมนต์ ฟังก์ชันจะแสดงผลลัพธ์แบบจำนวนเต็มแบบยาวแบบสุ่มตามที่คลาส Java SecureRandom คำนวณ
- หากมีอาร์กิวเมนต์เดียว ระบบจะถือว่าอาร์กิวเมนต์นั้นเป็นค่าต่ำสุดของการคํานวณ
- หากมีอาร์กิวเมนต์ที่ 2 ระบบจะถือว่าอาร์กิวเมนต์นั้นเป็นค่าสูงสุดของการคำนวณ
- (ต้องระบุ)
json-path
: (สตริง) นิพจน์เส้นทาง JSON - (ต้องระบุ)
json-var
: (สตริง) ตัวแปรหรือสตริงของโฟลว์ที่มี JSON - (ไม่บังคับ)
want-array
: (สตริง) หากตั้งค่าพารามิเตอร์นี้เป็น'true'
และชุดผลลัพธ์เป็นอาร์เรย์ ระบบจะแสดงผลองค์ประกอบอาร์เรย์ทั้งหมด หากตั้งค่าเป็นค่าอื่นหรือหากละเว้นพารามิเตอร์นี้ ระบบจะแสดงเฉพาะองค์ประกอบที่ 0 ของอาร์เรย์ชุดผลลัพธ์ หากชุดผลลัพธ์ไม่ใช่อาร์เรย์ ระบบจะไม่สนใจพารามิเตอร์ที่ 3 นี้ (หากมี)
ฟังก์ชัน | เอาต์พุต |
---|---|
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 แบบ Cascade เช่น เมื่อใช้เอาต์พุตของ HMAC รายการหนึ่งเป็นคีย์สําหรับ HMAC รายการที่ 2
ไวยากรณ์
การทำงาน | คำอธิบาย |
---|---|
hmacSha224(key,valueToSign[,keyencoding[,outputencoding]])
|
ประมวลผล HMAC ด้วยฟังก์ชันแฮช SHA-224 |
hmacSha256(key,valueToSign[,keyencoding[,outputencoding]])
|
เข้ารหัส HMAC ด้วยฟังก์ชันแฮช SHA-256 |
hmacSha384(key,valueToSign[,keyencoding[,outputencoding]])
|
เข้ารหัส HMAC ด้วยฟังก์ชันแฮช SHA-384 |
hmacSha512(key,valueToSign[,keyencoding[,outputencoding]])
|
เข้ารหัส HMAC ด้วยฟังก์ชันแฮช SHA-512 |
hmacMd5(key,valueToSign[,keyencoding[,outputencoding]])
|
เข้ารหัส HMAC ด้วยฟังก์ชันแฮช MD5 |
hmacSha1(key, valueToSign [,keyencoding[,outputencoding]])
|
เข้ารหัส HMAC ด้วยอัลกอริทึมการเข้ารหัส SHA-1 |
อาร์กิวเมนต์
ตัวอย่าง
ตัวอย่างนี้ใช้นโยบาย AssignMessage เพื่อคํานวณ HMAC-256 และกำหนดให้กับตัวแปรการไหล
<AssignMessage name='AM-HMA>C-1<' Assign>Varia<ble > Nameval<ueToS>ign/N<ame >Template{request.header.apikey}.{request.head<er.date}/>Tem<plate /Assign>Var<iable Assign>Varia<ble > Namehm<ac_va>lue/N<ame >Template{hmacSha256(private.secretkey,value<ToSign)}/>Tem<plate /Assign>V<ariable /Assig>nMessage
ตัวอย่างนี้แสดงวิธีสร้าง HMAC แบบตามลำดับชั้นซึ่งสามารถใช้กับขั้นตอนการลงนาม AWS Signature v4 ตัวอย่างนี้ใช้นโยบาย AssignMessage เพื่อสร้าง HMAC แบบเรียงซ้อน 5 ระดับที่ใช้คำนวณลายเซ็นสำหรับ AWS Signature v4
<AssignMessage name='AM-HMAC-AW>S-1<' >!--< 1 -- Assign>Varia<ble<>/span> NameD<ateVa>lue/N<ame >Template{timeFormatUTCMs('yyyyMMdd',sy<stem.time>sta<mp)}/Template > /A<ssignVar>iab<le !-- 2 -- > Ass<ignV>ariable < N>ameFi<rstKey/N>ame TemplateAWS4{private.secret<_aws_acce>ss_<key}/Template > /A<ssignVar>iab<le !-- 3 -- > Ass<ignV>ariable< >NameD<ateKey/N>ame Template{hmacSha256(FirstKey,DateValue,<39;utf-8&>#39<;,'base16>39;<)}/Templ>ate< /AssignVari>able < !->- 4 -- Assi<gnVar>iable< Nam>eDateRegionKey/Name Template{hmacSha256(DateKe<y,aws_reg>ion<,'base16>9;,<'bas>e16<')}/Templa>te </Ass>ignVariable !-- 5 <-- >Assig<nVariabl>e NameDateRegionServiceKey/Name Template{hmacSha2<56(DateRe>gio<nKey,aws_servic>e,&<#39;base>16&<#39;,'base>16<9;)}>/Template < /As>signV<ariable<>/span> !-- 6 -- AssignVariable NameSigningKey/Name Template{hm<acSha256(>Dat<eRegionServiceK>ey,<'aws>4_r<equest',>39;ba<se16>','base<16>9;)}/<Template> /AssignVariable !-- 7 -- AssignVariable Name<aws4_hmac>_va<lue/Name Te>m<plate{hmacSha2>56(SigningKey,stringToSign,'base16','base16')}/Template /AssignVariable /AssignMessage
ฟังก์ชันอื่นๆ
สร้างฟังก์ชัน UUID
สร้างและแสดงผล UUID
ไวยากรณ์
createUuid()
อาร์กิวเมนต์
ไม่มี
ตัวอย่าง
{createUuid()}
ตัวอย่างผลลัพธ์
ec3ca9be-d1e1-4ef4-aee4-4a58f3130db8
ฟังก์ชัน Random Long Generator
แสดงผลจำนวนเต็มแบบยาวแบบสุ่ม
ไวยากรณ์
randomLong(args)
อาร์กิวเมนต์
ตัวอย่าง
{random()}
ผลลัพธ์ที่ได้จะมีลักษณะดังนี้
5211338197474042880
เครื่องมือสร้างข้อความนิพจน์ทั่วไป
สร้างสตริงข้อความที่ตรงกับนิพจน์ทั่วไปที่ระบุ
ไวยากรณ์
xeger(regex)
อาร์กิวเมนต์
regex - นิพจน์ทั่วไป
ตัวอย่าง
ตัวอย่างนี้จะสร้างสตริง 7 หลักที่ไม่มี 0
xeger('[1-9]{7}')
ตัวอย่างผลลัพธ์
9857253
ฟังก์ชัน Null Coalescing
ฟังก์ชัน firstnonnull()
จะแสดงผลค่าของอาร์กิวเมนต์ด้านซ้ายสุดที่ไม่ใช่ค่า Null
ไวยากรณ์
firstnonnull(var1,varn)
อาร์กิวเมนต์
var1 - ตัวแปรบริบท
varn - ตัวแปรบริบทอย่างน้อย 1 รายการ คุณสามารถตั้งค่าอาร์กิวเมนต์ด้านขวาสุดเป็นสตริงเพื่อให้ค่าสำรอง (ค่าที่จะตั้งค่าหากไม่มีการตั้งค่าอาร์กิวเมนต์ด้านซ้าย)
ตัวอย่าง
ตารางต่อไปนี้แสดงวิธีใช้ฟังก์ชัน
เทมเพลต | 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
ใช้นิพจน์ XPath กับตัวแปร XML
ไวยากรณ์
xpath(xpath_expression,xml_string,[datatype])
อาร์กิวเมนต์
xpath_expression - นิพจน์ XPath
xml_string - ตัวแปรหรือสตริงของโฟลว์ที่มี XML
datatype - (ไม่บังคับ) ระบุประเภทผลลัพธ์ที่ต้องการของการค้นหา โดยอาจเป็นชุดโหนด โหนด ตัวเลข บูลีน สตริง โดยค่าเริ่มต้นจะเป็น nodeset โดยปกติแล้วค่าเริ่มต้นจะเป็นตัวเลือกที่เหมาะสม
ตัวอย่างที่ 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()<9;,xml)}/>Tem<plate /Assign>V<ariable /Assig>nMessage
การดำเนินการนี้ทำให้ระบบตั้งค่าตัวแปรบริบท 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>
สําหรับเนมสเปซเพิ่มเติม คุณสามารถเพิ่มพารามิเตอร์ได้สูงสุด 10 รายการลงในฟังก์ชัน xpath()
คุณสามารถระบุนิพจน์ XPath ง่ายๆ เป็นสตริงที่ล้อมรอบด้วยเครื่องหมายคำพูดเดี่ยวได้ ดังนี้
{xpath('/tag/tagid/text()',xml)}
หากนิพจน์ XPath มีคำนำหน้าเนมสเปซ (และโคลอน) คุณจะต้องกำหนดนิพจน์ XPath นั้นให้กับตัวแปรและระบุชื่อตัวแปรแทนนิพจน์โดยตรง
{xpath(xpathexpression,xml,ns1)}
ตัวอย่างที่ 4: การระบุประเภทผลลัพธ์ที่ต้องการ
พารามิเตอร์ที่ 3 (ไม่บังคับ) ที่ส่งไปยังฟังก์ชัน xpath()
จะระบุประเภทผลลัพธ์ที่ต้องการของคําค้นหา
การค้นหา XPath บางรายการจะแสดงผลค่าตัวเลขหรือบูลีนได้ เช่น ฟังก์ชัน count()
จะแสดงผลตัวเลข คําค้นหา XPath ที่ถูกต้อง
count(//Record/Fields/Pair)
การค้นหาที่ถูกต้องนี้จะแสดงผลลัพธ์เป็นบูลีน
count(//Record/Fields/Pair)>0
ในกรณีดังกล่าว ให้เรียกใช้ฟังก์ชัน xpath()
ด้วยพารามิเตอร์ที่ 3 ที่ระบุประเภทนั้น
{xpath(expression,xml,'number')} {xpath(expression,xml,'boolean')}
หากพารามิเตอร์ที่ 3 มีเครื่องหมายโคลอน ระบบจะตีความว่าเป็นอาร์กิวเมนต์เนมสเปซ
หากไม่ ระบบจะถือว่าการดำเนินการนั้นเป็นประเภทผลลัพธ์ที่ต้องการ ในกรณีนี้ หากพารามิเตอร์ที่ 3 ไม่ใช่ค่าที่ถูกต้อง (ไม่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่) ฟังก์ชัน xpath()
จะแสดงผลเป็นชุดโหนดโดยค่าเริ่มต้น
ฟังก์ชันเส้นทาง JSON
ใช้นิพจน์เส้นทาง JSON กับตัวแปร JSON
ไวยากรณ์
jsonPath(json-path,json-var,want-array)
อาร์กิวเมนต์
ตัวอย่างที่ 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
โปรดทราบว่าในกรณีนี้ ชุดผลลัพธ์คือองค์ประกอบเดียว (ไม่ใช่อาร์เรย์ขององค์ประกอบ) หากชุดผลลัพธ์เป็นอาร์เรย์ ระบบจะแสดงเฉพาะองค์ประกอบที่ 0 ของอาร์เรย์ หากต้องการแสดงผลอาร์เรย์แบบเต็ม ให้เรียกใช้ฟังก์ชันโดยให้ 'true'
เป็นพารามิเตอร์ที่ 3 ดังที่แสดงในตัวอย่างถัดไป
ตัวอย่างที่ 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']