คุณกําลังดูเอกสารประกอบของ Apigee Edge
ไปที่เอกสารประกอบของ Apigee X info
หัวข้อนี้จะกล่าวถึงวิธีใช้เทมเพลตข้อความในพร็อกซี 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
- 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>
คุณใช้เทมเพลตข้อความได้ที่ไหนบ้าง
เทมเพลตข้อความใช้ได้กับนโยบายหลายรายการ รวมถึงองค์ประกอบบางอย่างที่ใช้ในการกำหนดค่าปลายทาง
นโยบายที่ยอมรับเทมเพลตข้อความ
นโยบาย | องค์ประกอบและองค์ประกอบย่อยที่รองรับเทมเพลตข้อความ |
---|---|
นโยบายการควบคุมการเข้าถึง | <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> <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 เวอร์ชันก่อนรุ่น 16.08.17 ของ Cloud คุณไม่สามารถใช้วงเล็บปีกกาเพื่อระบุการอ้างอิงตัวแปรภายในเพย์โหลด 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()
ต่อไปนี้คือ Use Case ที่น่าสนใจ สมมติว่าแอปแบ็กเอนด์แสดงผลลัพธ์ 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>
ต่อไปนี้คือนโยบาย Assign Message ที่ถูกต้องสมบูรณ์ซึ่งเพิ่มตัวแปรที่ดึงมาลงในเพย์โหลดการตอบกลับ (การตอบกลับของพร็อกซี)
<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>
หัวข้อนี้จะอธิบายฟังก์ชันของเทมเพลตข้อความ อาร์กิวเมนต์ และเอาต์พุต หัวข้อนี้ถือว่าคุณคุ้นเคยกับเทมเพลตข้อความและบริบทการใช้งาน
ฟังก์ชันแฮช
คํานวณค่าแฮชและแสดงผลสตริงที่แสดงแฮชนั้น
ฟังก์ชันแฮชฐานสิบหก
คํานวณค่าแฮชและแสดงผลสตริงที่แสดงแฮชนั้นเป็นตัวเลขฐาน 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"> <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
|
กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรลวศษสหฬอฮ |
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-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 ตัวอย่างนี้ใช้นโยบาย AssignMessage เพื่อสร้าง HMAC แบบเรียงซ้อน 5 ระดับที่ใช้คำนวณลายเซ็นสำหรับ 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>
ฟังก์ชันอื่นๆ
สร้างฟังก์ชัน 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()',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>
สําหรับเนมสเปซเพิ่มเติม คุณสามารถเพิ่มพารามิเตอร์ได้สูงสุด 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']