สํารวจนโยบายการจัดการ API
ใน Azure API Management นโยบายอนุญาตให้ผู้เผยแพร่เปลี่ยนลักษณะการทํางานของ API ผ่านการกําหนดค่า นโยบายคือคอลเลกชันของคําสั่งที่ดําเนินการตามลําดับคําขอหรือการตอบสนองของ API
มีการใช้นโยบายภายในเกตเวย์ที่อยู่ระหว่างผู้บริโภค API และ API ที่มีการจัดการ เกตเวย์ได้รับคําขอทั้งหมดและมักจะส่งต่อไปยัง API ต้นแบบ อย่างไรก็ตาม นโยบายสามารถใช้การเปลี่ยนแปลงกับทั้งคําขอขาเข้าและการตอบสนองขาออก นิพจน์นโยบายสามารถใช้เป็นค่าแอตทริบิวต์หรือค่าข้อความในนโยบายการจัดการ API ใด ๆ เว้นแต่ว่านโยบายจะระบุเป็นอย่างอื่น
ทําความเข้าใจเกี่ยวกับการกําหนดค่านโยบาย
ข้อกําหนดของนโยบายเป็นเอกสาร XML อย่างง่ายที่อธิบายลําดับของคําสั่งขาเข้าและขาออก คุณสามารถแก้ไข XML ได้โดยตรงในหน้าต่างข้อกําหนด
โครงแบบจะแบ่งออกเป็น inbound, backend, outbound, และ on-error ชุดคําสั่งนโยบายที่ระบุจะดําเนินการตามลําดับคําขอและการตอบสนอง
<policies>
<inbound>
<!-- statements to be applied to the request go here -->
</inbound>
<backend>
<!-- statements to be applied before the request is forwarded to
the backend service go here -->
</backend>
<outbound>
<!-- statements to be applied to the response go here -->
</outbound>
<on-error>
<!-- statements to be applied if there is an error condition go here -->
</on-error>
</policies>
ถ้ามีข้อผิดพลาดในระหว่างการประมวลผลคําขอ ขั้นตอนใด ๆ ที่เหลือใน inboundbackendหรือส่วน outbound จะถูกข้ามไป และการดําเนินการข้ามไปยังคําสั่งในส่วน on-error โดยการวางคําสั่งนโยบายในส่วน on-error คุณสามารถตรวจสอบข้อผิดพลาดโดยใช้คุณสมบัติ context.LastError ตรวจสอบและกําหนดค่าการตอบสนองข้อผิดพลาดโดยใช้นโยบาย set-body และกําหนดค่าสิ่งที่เกิดขึ้นถ้าเกิดข้อผิดพลาด
นิพจน์นโยบาย
เว้นแต่ว่านโยบายจะระบุเป็นอย่างอื่น นิพจน์นโยบายสามารถใช้เป็นค่าแอตทริบิวต์หรือค่าข้อความในนโยบายการจัดการ API ได้ นิพจน์นโยบายคือ:
- คําสั่ง C# เดียวที่ล้อมรอบด้วย
@(expression)หรือ - บล็อกรหัส C# หลายคําสั่ง ซึ่งอยู่ใน
@{expression}ซึ่งส่งกลับค่า
แต่ละนิพจน์มีสิทธิ์เข้าถึงตัวแปร context ที่ระบุโดยนัยและชุดย่อยที่ได้รับอนุญาตของ .NET Framework ชนิด
นิพจน์นโยบาย เป็นวิธีที่ซับซ้อนในการควบคุมปริมาณการใช้งานและปรับเปลี่ยนลักษณะการทํางานของ API โดยที่คุณไม่จําเป็นต้องเขียนรหัสพิเศษหรือปรับเปลี่ยนบริการ Backend
ตัวอย่างต่อไปนี้ใช้นิพจน์นโยบายและนโยบายชุดส่วนหัวเพื่อเพิ่มข้อมูลผู้ใช้ไปยังคําขอขาเข้า ส่วนหัวที่เพิ่มจะประกอบด้วย ID ผู้ใช้ที่เชื่อมโยงกับคีย์การสมัครใช้งานในคําขอ และภูมิภาคที่การประมวลผลเกตเวย์เป็นโฮสต์
<policies>
<inbound>
<base />
<set-header name="x-request-context-data" exists-action="override">
<value>@(context.User.Id)</value>
<value>@(context.Deployment.Region)</value>
</set-header>
</inbound>
</policies>
ใช้นโยบายที่ระบุในขอบเขตที่ต่างกัน
ถ้าคุณมีนโยบายในระดับส่วนกลางและนโยบายที่กําหนดค่าสําหรับ API แล้ว เมื่อใดก็ตามที่มีการใช้ API เฉพาะทั้งสองนโยบาย การจัดการ API ช่วยให้สามารถจัดลําดับคําสั่งนโยบายแบบรวมผ่านองค์ประกอบพื้นฐานได้
<policies>
<inbound>
<cross-domain />
<base />
<find-and-replace from="xyz" to="abc" />
</inbound>
</policies>
ในข้อกําหนดนโยบายตัวอย่างก่อนหน้า คําสั่ง cross-domain จะดําเนินการก่อน นโยบาย find-and-replace จะดําเนินการหลังจากนโยบายใดๆ ก็ตามในขอบเขตที่กว้างขึ้น
กรองเนื้อหาการตอบสนอง
นโยบายที่กําหนดไว้ในตัวอย่างต่อไปนี้สาธิตวิธีการกรององค์ประกอบข้อมูลจากส่วนข้อมูลการตอบสนองตามผลิตภัณฑ์ที่เกี่ยวข้องกับคําขอ
ส่วนย่อยสันนิษฐานว่าเนื้อหาคําตอบถูกจัดรูปแบบเป็น JSON และมีคุณสมบัติระดับรากที่ชื่อว่า รายนาทีรายชั่วโมงรายวัน และ ธง
<policies>
<inbound>
<base />
</inbound>
<backend>
<base />
</backend>
<outbound>
<base />
<choose>
<when condition="@(context.Response.StatusCode == 200 && context.Product.Name.Equals("Starter"))">
<!-- NOTE that we are not using preserveContent=true when deserializing response body stream into a JSON object since we don't intend to access it again. See details on /azure/api-management/api-management-transformation-policies#SetBody -->
<set-body>
@{
var response = context.Response.Body.As<JObject>();
foreach (var key in new [] {"minutely", "hourly", "daily", "flags"}) {
response.Property (key).Remove ();
}
return response.ToString();
}
</set-body>
</when>
</choose>
</outbound>
<on-error>
<base />
</on-error>
</policies>