คุณกำลังดูเอกสารประกอบ Apigee Edge
ไปที่
เอกสารประกอบเกี่ยวกับ Apigee X. ข้อมูล
Edge มียูทิลิตีประสิทธิภาพสูงที่เรียกว่า "API การจัดการ" ซึ่งให้บริการต่างๆ เช่น
- การทำให้ใช้งานได้หรือยกเลิกการทำให้พร็อกซี API ใช้งานได้
- การกำหนดค่าโฮสต์เสมือน คีย์สโตร์ และ Truststores ฯลฯ
- การสร้าง การลบ และ/หรืออัปเดตเอนทิตี เช่น KeyValueMaps, ผลิตภัณฑ์ API, นักพัฒนาซอฟต์แวร์ แอป นักพัฒนาซอฟต์แวร์ คีย์ผู้บริโภค ฯลฯ
- การดึงข้อมูลเกี่ยวกับเอนทิตีเหล่านี้
บริการเหล่านี้สามารถเข้าถึงได้ผ่านคอมโพเนนต์ที่เรียกว่าเซิร์ฟเวอร์การจัดการใน แพลตฟอร์ม Apigee Edge คุณสามารถเรียกใช้บริการเหล่านี้ได้ง่ายๆ ด้วยความช่วยเหลือของ API การจัดการอย่างง่าย
บางครั้งเราอาจต้องใช้บริการเหล่านี้อย่างน้อย 1 รายการจากพร็อกซี API ระหว่างรันไทม์ นี่คือ เพราะเอนทิตีต่างๆ เช่น KeyValueMaps, โทเค็นการเข้าถึง OAuth, ผลิตภัณฑ์ API, แอปของนักพัฒนาซอฟต์แวร์ นักพัฒนาซอฟต์แวร์ คีย์ผู้บริโภค ฯลฯ มีข้อมูลที่เป็นประโยชน์ในรูปแบบคู่คีย์-ค่า หรือเป็นส่วนหนึ่งของโปรไฟล์
ตัวอย่างเช่น คุณสามารถจัดเก็บข้อมูลต่อไปนี้ใน KeyValueMap เพื่อทำให้มีความปลอดภัยมากขึ้น เข้าถึงได้ขณะรันไทม์:
- URL เป้าหมายแบ็กเอนด์
- พร็อพเพอร์ตี้ของสภาพแวดล้อม
- ข้อมูลเข้าสู่ระบบด้านความปลอดภัยของระบบแบ็กเอนด์หรือระบบของบุคคลที่สาม
ในทำนองเดียวกัน คุณอาจต้องการรายการผลิตภัณฑ์ API หรืออีเมลของนักพัฒนาแอปในระหว่างรันไทม์ ข้อมูลนี้จะมีให้ใช้งานโดยเป็นส่วนหนึ่งของโปรไฟล์แอปนักพัฒนาแอป
ระบบสามารถใช้ข้อมูลทั้งหมดนี้ได้อย่างมีประสิทธิภาพขณะรันไทม์เพื่อเปิดใช้ลักษณะการทำงานแบบไดนามิกในนโยบาย หรือโค้ดที่กำหนดเองภายใน Apigee Edge
ลาย Antipattern
แนะนำให้ใช้ API การจัดการและมีประโยชน์สำหรับงานธุรการ และไม่ควรใช้สำหรับ ดำเนินการตรรกะรันไทม์ในขั้นตอนพร็อกซี API เพราะสาเหตุต่อไปนี้
- การใช้ API การจัดการเพื่อเข้าถึงข้อมูลเกี่ยวกับเอนทิตี เช่น KeyValueMaps, OAuth โทเค็นการเข้าถึงหรือเพื่อวัตถุประสงค์อื่นจากพร็อกซี API จะนำไปสู่ทรัพยากร Dependency ที่เกี่ยวกับการจัดการ เซิร์ฟเวอร์
- เซิร์ฟเวอร์การจัดการไม่ได้เป็นส่วนหนึ่งของคอมโพเนนต์รันไทม์ Edge ดังนั้นจึงอาจไม่ใช่ ความพร้อมใช้งานสูง
- เซิร์ฟเวอร์การจัดการอาจไม่ได้รับการจัดสรรภายในเครือข่ายหรือศูนย์ข้อมูลเดียวกัน และอาจ ดังนั้นจึงจะทำให้เกิดเวลาในการตอบสนองของเครือข่ายในระหว่างรันไทม์
- รายการในเซิร์ฟเวอร์การจัดการจะถูกแคชไว้เป็นเวลานาน ดังนั้นเราอาจไม่ สามารถดูข้อมูลล่าสุดได้ทันทีในพร็อกซี API หากเราเขียนและอ่านใน ระยะเวลาสั้นๆ
- เพิ่มจำนวนการรับส่งเครือข่ายขณะรันไทม์
ในตัวอย่างโค้ดด้านล่าง การเรียก API การจัดการจะดำเนินการผ่านโค้ด JavaScript ที่กำหนดเองเพื่อ ดึงข้อมูลจาก KeyValueMap:
var response = httpClient.send('https://api.enterprise.apigee.com/v1/o/org_name/e/env_name/keyvaluemaps/kvm_name')
หากเซิร์ฟเวอร์การจัดการไม่พร้อมทำงาน โค้ด JavaScript จะเรียกใช้ API การจัดการ การโทรไม่สำเร็จ ซึ่งจะทำให้คำขอ API ล้มเหลวในภายหลัง
ผลกระทบ
- เพิ่มทรัพยากร Dependency เพิ่มเติมในเซิร์ฟเวอร์การจัดการระหว่างรันไทม์ ความล้มเหลวใดๆ ใน เซิร์ฟเวอร์การจัดการจะส่งผลต่อการเรียก API
- ต้องจัดเก็บข้อมูลเข้าสู่ระบบของผู้ใช้สำหรับ API การจัดการไว้ในเครื่องหรือใน Store ที่ปลอดภัยบางแห่ง เช่น KVM ที่เข้ารหัส
- ผลกระทบด้านประสิทธิภาพที่เกิดจากการเรียกใช้บริการการจัดการผ่านเครือข่าย
- อาจไม่เห็นค่าที่อัปเดตทันทีเนื่องจากแคชหมดอายุในการจัดการนานขึ้น เซิร์ฟเวอร์
แนวทางปฏิบัติแนะนำ
มีวิธีที่มีประสิทธิภาพมากกว่าในการดึงข้อมูลจากเอนทิตี เช่น KeyValueMaps, API ผลิตภัณฑ์, DeveloperApps, Developers, Consumer Keys ฯลฯ ขณะรันไทม์ ลองดูตัวอย่างต่อไปนี้
- ใช้นโยบาย KeyValueMapOperations เพื่อเข้าถึงข้อมูลจาก KeyValueMaps โค้ดตัวอย่าง
ที่แสดงวิธีดึงข้อมูลจาก KeyValueMap ดังนี้
<!-- /antipatterns/examples/2-6.xml --> <KeyValueMapOperations mapIdentifier="urlMap" async="false" continueOnError="false" e>nab<led="t>rue"< name=">Get<URLKVM" D>ispla<yNameGetURLKVM/Di>spl<ayNam>e ExpiryT<imeInS>ecs<86400/ExpiryTimeInSecs Scopeenv>ironm<ent>/Scope < Get ass>ignTo=&qu<ot;urlHost>i&quo<t; i>nde<x=&q>u<ot;2" Key > ParameterurlHost_1/Parameter /Key /Get /KeyValueMapOperations
- เพื่อเข้าถึงข้อมูลเกี่ยวกับผลิตภัณฑ์ API, แอปของนักพัฒนาซอฟต์แวร์, นักพัฒนาซอฟต์แวร์, คีย์ผู้บริโภค ฯลฯ
ในพร็อกซี API คุณสามารถทำอย่างใดอย่างหนึ่งต่อไปนี้
- หากขั้นตอนของพร็อกซี API มี VerifyAPIKey policy คุณก็จะเข้าถึงข้อมูลนั้นได้
โดยใช้ตัวแปรโฟลว์ที่ป้อนข้อมูลเป็นส่วนหนึ่งของนโยบายนี้ นี่คือโค้ดตัวอย่างที่แสดง
วิธีดึงข้อมูลชื่อและข้อมูล create_by ของแอปนักพัฒนาซอฟต์แวร์โดยใช้ JavaScript:
<!-- /antipatterns/examples/2-7.xml --> print("Application Name ", context.getVariable(""verifyapikey. VerifyAPIKey.app.name")); print("Created by:", context.getVariable("verifyapikey. VerifyAPIKey.app.created_by"));
- หากขั้นตอนของพร็อกซี API ไม่มีนโยบาย VerifyAPIKey คุณจะเข้าถึง
โปรไฟล์ของผลิตภัณฑ์ API แอปของนักพัฒนาซอฟต์แวร์ ฯลฯ โดยใช้เอนทิตีการเข้าถึงและตัวแปรการดึงข้อมูล
นโยบาย:
- ดึงข้อมูลโปรไฟล์ของ DeveloperApp ด้วยนโยบาย AccessEntity โดยทำดังนี้
<!-- /antipatterns/examples/2-8.xml --> <?xml version="1.0" encoding="UTF-8&quo>t<; standalone="yes"? AccessEntity async="false" continueOnError=">;fa<lse" e>nabled="tr<ue" nam>e=&<quot;GetDeveloperApp&q><uot; Disp>lay<NameGetDeveloperApp/DisplayName EntityType value=">app<"/EntityType EntityIdentifier ref="developer.a>p<p.name" >type="appname"/ SecondaryIdentifier ref="developer.id" type="developerid"/ /AccessEntity
- ดึงข้อมูล
appIdจาก DeveloperApp โดยใช้นโยบาย ExtractVariable ดังนี้<!-- /antipatterns/examples/2-9.xml --> <ExtractVariables name="Extract-Developer App->Inf<o" !-- The source element points to the variable populated by AccessEntity policy. The <format is p>o<licy-type.p>olicy-name In this case, the variable contains the whole developer pro>fil<e. ->- SourceAccessEntity.GetDev<eloperA>pp&<quot;/Source > VariablePre<fixdeveloperapp>/Va<riablePref>ix <XMLPayload Variable name=">appld&q<uot; type="string" !-- You parse elements from th>e devel<oper >profile us<ing XP>ath. <-- >XPa<th/App/AppI>d</XPath /Varia>ble /XMLPayload /ExtractVariables
- ดึงข้อมูลโปรไฟล์ของ DeveloperApp ด้วยนโยบาย AccessEntity โดยทำดังนี้
- หากขั้นตอนของพร็อกซี API มี VerifyAPIKey policy คุณก็จะเข้าถึงข้อมูลนั้นได้
โดยใช้ตัวแปรโฟลว์ที่ป้อนข้อมูลเป็นส่วนหนึ่งของนโยบายนี้ นี่คือโค้ดตัวอย่างที่แสดง
วิธีดึงข้อมูลชื่อและข้อมูล create_by ของแอปนักพัฒนาซอฟต์แวร์โดยใช้ JavaScript: