คุณกำลังดูเอกสารประกอบของ 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>
คุณใช้เทมเพลตข้อความได้ที่ไหนบ้าง
เทมเพลตข้อความรองรับในนโยบายหลายรายการ รวมถึงองค์ประกอบบางอย่างที่ใช้ในการกำหนดค่า TargetEndpoint
นโยบายที่ยอมรับเทมเพลตข้อความ
| นโยบาย | องค์ประกอบและองค์ประกอบย่อยที่รองรับเทมเพลตข้อความ |
|---|---|
| นโยบาย AccessControl | <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> |
| นโยบาย MessageLogging | <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 เวอร์ชันก่อน 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 เพื่อเพิ่มข้อความลงในการตอบกลับของพร็อกซีที่กำหนดเอง (นั่นคือส่งกลับไปยังไคลเอ็นต์)
ต่อไปนี้คือนโยบาย Extract Variables ที่ดึงข้อมูล 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>
ขออภัย เกิดปัญหาขึ้น นโยบาย 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)
|
คำนวณแฮช 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
|
ฟังก์ชัน Replace First
แทนที่เฉพาะการเกิดครั้งแรกของการจับคู่นิพจน์ทั่วไปที่ระบุในสตริง
ไวยากรณ์
replaceFirst(string,regex,value)
อาร์กิวเมนต์
- string - สตริงตามตัวอักษรหรือตัวแปรโฟลว์สตริงที่จะใช้แทนที่
- regex - นิพจน์ทั่วไป
- value - ค่าที่จะแทนที่การจับคู่นิพจน์ทั่วไปภายในสตริง
ฟังก์ชันการหลีกและการเข้ารหัสอักขระ
ฟังก์ชันที่หลีกเลี่ยงหรือเข้ารหัสอักขระพิเศษในสตริง
ไวยากรณ์
| การทำงาน | คำอธิบาย |
|---|---|
| escapeJSON(string) | ใช้แบ็กสแลชเพื่อหลีกเครื่องหมายคำพูดคู่ |
| escapeXML(string) | แทนที่เครื่องหมายวงเล็บปีกกา เครื่องหมายอัญประกาศเดี่ยว เครื่องหมายอัญประกาศคู่ และเครื่องหมาย & ด้วยเอนทิตี XML ที่เกี่ยวข้อง ใช้สำหรับเอกสาร XML 1.0
|
| escapeXML11(สตริง) | ทำงานในลักษณะเดียวกับ escapeXML แต่ใช้กับเอนทิตี XML v1.1 ดูหมายเหตุการใช้งานด้านล่าง |
| encodeHTML(string) | เข้ารหัสเครื่องหมายอัญประกาศเดี่ยว วงเล็บมุม และเครื่องหมายและ |
อาร์กิวเมนต์
string - สตริงที่จะหลีกเลี่ยง อาจเป็นสตริงตามตัวอักษรหรือตัวแปรโฟลว์สตริง
หมายเหตุการใช้งาน
XML 1.1 สามารถแสดงอักขระควบคุมบางตัวได้ แต่ไม่สามารถแสดงไบต์ Null หรือจุดรหัส Unicode Surrogate ที่ไม่จับคู่ แม้ว่าจะมีการหลีกเลี่ยงแล้วก็ตาม ฟังก์ชัน 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 - ตัวแปรสตริงหรือโฟลว์สตริงที่มีค่าเวลา ค่าอาจเป็นวินาทีตั้งแต่ Epoch หรือมิลลิวินาทีตั้งแต่ Epoch สำหรับ timeFormatMs
ตัวอย่าง
สมมติว่ามีค่าต่อไปนี้และเขตเวลาท้องถิ่นคือแปซิฟิก
epoch_time_ms = 1494390266000epoch_time = 1494390266fmt1 = yyyy-MM-ddfmt2 = yyyy-MM-dd HH-mm-ssfmt3 = yyyyMMddHHmmss
ฟังก์ชันจะแสดงผลลัพธ์ต่อไปนี้
- คีย์ - (ต้องระบุ) ระบุคีย์ลับที่เข้ารหัสเป็นสตริงซึ่งใช้ในการคำนวณ HMAC
- valueToSign - (ต้องระบุ) ระบุข้อความที่จะลงนาม ควรเป็นสตริง
- keyencoding - (ไม่บังคับ) ระบบจะถอดรหัสสตริงคีย์ลับตามการเข้ารหัสที่ระบุนี้
ค่าที่ถูกต้อง:
hex,base16,base64,utf-8ค่าเริ่มต้น:utf-8 - outputencoding - (ไม่บังคับ) ระบุอัลกอริทึมการเข้ารหัสที่จะใช้สำหรับเอาต์พุต
ค่าที่ถูกต้อง:
hex,base16,base64ค่าต่างๆ ไม่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ โดยhexและbase16เป็นคำพ้องความหมาย ค่าเริ่มต้น:base64 - หากไม่ได้ระบุอาร์กิวเมนต์ ฟังก์ชันจะแสดงผลจำนวนเต็มแบบยาวแบบสุ่มตามที่คลาส SecureRandom ของ Java คำนวณ
- หากมีอาร์กิวเมนต์ 1 รายการ ระบบจะถือว่าอาร์กิวเมนต์นั้นเป็นค่าต่ำสุดของการคำนวณ
- หากมีอาร์กิวเมนต์ที่ 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 แบบเรียงซ้อน เช่น เมื่อใช้เอาต์พุตของ HMAC หนึ่งเป็นคีย์สำหรับ HMAC ที่สอง
ไวยากรณ์
| การทำงาน | คำอธิบาย |
|---|---|
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 v4 ได้ ตัวอย่างนี้ใช้นโยบาย AssignMessage เพื่อสร้าง HMAC แบบเรียงซ้อน 5 ระดับที่ใช้ ในการคำนวณลายเซ็นสำหรับลายเซ็น AWS 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
ฟังก์ชัน firstnonnull() จะแสดงผลค่าของอาร์กิวเมนต์ซ้ายสุดที่ไม่ใช่ค่าว่าง
ไวยากรณ์
firstnonnull(var1,varnn>)
อาร์กิวเมนต์
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 Path กับตัวแปร 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']