คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่
เอกสารประกอบของ Apigee X info
Java Callout คืออะไร
Apigee Edge มีนโยบายที่หลากหลายซึ่งตอบสนองข้อกำหนดทั่วไปในการจัดการ API เช่น ความปลอดภัย การแปลงข้อมูล การจัดการการรับส่งข้อมูล และอื่นๆ
อย่างไรก็ตาม ในบางกรณี API ของคุณอาจต้องมีลักษณะการทำงานที่กำหนดเองซึ่งไม่ได้ติดตั้งใช้งาน ในนโยบายมาตรฐาน ในกรณีเหล่านี้ Apigee มีตัวเลือกมากมายที่ช่วยให้คุณเขียนสคริปต์ หรือโค้ดลักษณะการทำงานของ API ที่กำหนดเองได้ วิธีหนึ่งคือการติดตั้งใช้งานลักษณะการทำงานที่ต้องการใน Java
ดูเวอร์ชันที่รองรับของ Java ได้ที่ ซอฟต์แวร์ และเวอร์ชันที่รองรับ
ฉันจะใช้โค้ด Java ในพร็อกซีได้อย่างไร
นโยบาย Java Callout ช่วยให้คุณเรียกใช้โค้ด Java จากภายในโฟลว์พร็อกซีที่กำลังทำงานได้ โค้ด Java ของคุณต้องติดตั้งใช้งานอินเทอร์เฟซ Java บางอย่างที่เฉพาะเจาะจงกับ Edge ซึ่งช่วยให้โค้ดโต้ตอบ กับพร็อกซีที่กำลังทำงานได้ ตัวอย่างเช่น มีเมธอด Java สำหรับรับและตั้งค่าส่วนหัว พารามิเตอร์การค้นหา ตัวแปรโฟลว์ และเอนทิตีอื่นๆ ภายในบริบทโฟลว์ปัจจุบันของพร็อกซี
ฉันควรใช้ Java Callout เมื่อใด
มาดูสถานการณ์ที่ Java Callout มีประโยชน์และสถานการณ์ที่คุณควร พิจารณาวิธีการอื่นๆ
ก่อนอื่นให้พิจารณา วิธีการอื่นๆ
ก่อนใช้ Java Callout โปรดทราบว่าอาจมีวิธีการอื่นๆ ที่คุณใช้แทนได้ เช่น
- สำหรับการดำเนินการที่มีน้ำหนักเบา เช่น การเรียกใช้ HTTP API ไปยังบริการระยะไกล ให้พิจารณาใช้นโยบาย ServiceCallout ดูนโยบาย Service Callout
- สำหรับการโต้ตอบกับเนื้อหาข้อความที่ค่อนข้างง่าย เช่น การแก้ไขหรือการแยกส่วนหัว พารามิเตอร์ หรือเนื้อหาข้อความ HTTP คุณสามารถใช้ภาษา JavaScript หรือ Python ได้
สิ่งที่คุณทำได้ในโค้ด Java
Java Callout รองรับการดำเนินการพื้นฐานต่อไปนี้
- การตรวจสอบหรือการจัดการข้อความคำขอหรือการตอบกลับ
- การรับและตั้งค่าตัวแปรโฟลว์ คุณสามารถใช้เมธอด Java เพื่อเข้าถึงตัวแปรโฟลว์ของ Edge ได้ หากต้องการเข้าถึงข้อมูล Key Value Map (KVM) ให้ใช้นโยบาย KVM กำหนดค่า KVM ให้กับตัวแปรโฟลว์ แล้วคุณจะเข้าถึงตัวแปรโฟลว์จาก ภายใน Java Callout ได้
- การเรียกใช้บริการภายนอก
- การเพิ่มข้อผิดพลาด
- การจัดการข้อความแสดงข้อผิดพลาดและรหัสสถานะ
สิ่งที่คุณทำไม่ได้ในโค้ด Java
ระบบไม่อนุญาตการเรียกใช้ระบบส่วนใหญ่ คุณไม่สามารถ ทำสิ่งต่อไปนี้:
- อ่านหรือเขียนระบบไฟล์ภายใน ซึ่งหมายความว่าคุณไม่สามารถใช้แพ็กเกจ Java ใดๆ เพื่ออ่าน/เขียนลงในระบบไฟล์ภายในได้ แต่คุณสามารถทำการเรียกใช้ระยะไกลภายนอกได้
- รับข้อมูลเกี่ยวกับกระบวนการปัจจุบัน รายการกระบวนการ หรือการใช้งาน CPU/หน่วยความจำบน เครื่อง
- เข้าถึงซอร์สโค้ดใน `expressions-1.0.0.jar` และ `message-flow-1.0.0.jar`
แม้ว่าการเรียกใช้บางอย่างอาจใช้งานได้ แต่ระบบจะไม่รองรับและอาจปิดใช้การเรียกใช้ดังกล่าวอย่างแข็งขันได้ทุกเมื่อที่ หลีกเลี่ยงการเรียกใช้ดังกล่าวในโค้ด
อย่าใช้หรืออาศัยไลบรารี Java ที่รวมอยู่ใน Apigee Edge ไลบรารีเหล่านั้นมีไว้สำหรับฟังก์ชันการทำงานของผลิตภัณฑ์ Edge เท่านั้น และไม่มีการรับประกันว่าไลบรารีจะพร้อมใช้งานในแต่ละรุ่น หากคุณใช้ไลบรารีดังกล่าว ให้ใช้ในการสาธิตที่ไม่ใช่เวอร์ชันที่ใช้งานจริงเท่านั้น
Java Callout แบบ "Hello World"
มาดูตัวอย่าง Java Callout แบบ "Hello World" กัน ในตัวอย่างนี้ เราจะสร้าง พร็อกซีอย่างง่ายที่มี Java Callout ซึ่งแสดงผลการตอบกลับ "Hello World" พร็อกซีสามารถแสดงผลการตอบกลับที่เป็นไปได้ 2 แบบ ได้แก่
- หากคุณส่งส่วนหัว "username" ที่มีค่า "name" พร็อกซีจะแสดงผลดังนี้
Hello, <name>!
- หากคุณละเว้นส่วนหัว พร็อกซีจะแสดงผลดังนี้
"Hello, Guest!"
ดาวน์โหลดโปรเจ็กต์เริ่มต้น
เราได้เตรียมโปรเจ็กต์พื้นฐานไว้ให้คุณในที่เก็บ Apigee api-platform-samples บน GitHub เพื่อให้การดำเนินการง่ายขึ้น
- ดาวน์โหลดหรือโคลน api-platform-samples ลงในระบบ
- ในเทอร์มินัลหรือโปรแกรมแก้ไขโค้ดที่คุณเลือก ให้ไปที่
api-platform-samples/doc-samples/java-helloโปรเจ็กต์
เขียนโค้ด Java
- เปิดไฟล์ซอร์สโค้ด Java:
java-hello/callout/src/main/java/HelloJava.javaไฟล์นี้เป็นเวอร์ชันโครงร่างของคลาส Java หลักที่เราจะติดตั้งใช้งาน แพ็กเกจที่นำเข้า จำเป็นสำหรับโค้ด Java Callout ของ Edge คลาสเหล่านี้มีเมธอดที่ช่วยให้คุณ เข้าถึงบริบทการดำเนินการของพร็อกซีได้ เราจะอธิบายขั้นตอนการคอมไพล์และติดตั้งใช้งาน โค้ดนี้ในเร็วๆ นี้
package com.apigeesample; import com.apigee.flow.execution.ExecutionContext; import com.apigee.flow.execution.ExecutionResult; import com.apigee.flow.execution.spi.Execution; import com.apigee.flow.message.MessageContext; public class HelloJava implements Execution { public ExecutionResult execute(MessageContext messageContext, ExecutionContext executionContext) { try { // Your code here. return ExecutionResult.SUCCESS; } catch (Exception e) { return ExecutionResult.ABORT; } } }
- แทนที่บรรทัดที่แสดงความคิดเห็น
// Your code hereด้วยโค้ดต่อไปนี้
String name = messageContext.getMessage().getHeader("username"); if (name != null && name.length()>0) { messageContext.getMessage().setContent("Hello, " + name + "!"); messageContext.getMessage().removeHeader("username"); } else { messageContext.getMessage().setContent("Hello, Guest!"); }
- บันทึกไฟล์
คอมไพล์โค้ดด้วย Maven
ระบบได้ตั้งค่าโปรเจ็กต์เพื่อให้คุณคอมไพล์ด้วย Maven ได้ หากต้องการใช้
javac เราจะใส่ตัวอย่างไว้หลังตัวอย่าง Maven
- ตรวจสอบว่าคุณได้ติดตั้ง Maven แล้ว
mvn -version
- เรียกใช้สคริปต์
java-hello/buildsetup.shสคริปต์นี้จะติดตั้งการขึ้นต่อกันของ JAR ที่จำเป็น ในที่เก็บ Maven ในเครื่อง - เปลี่ยนไดเรกทอรีเป็น
java-hello/callout - เรียกใช้ Maven
mvn clean package
- หากต้องการ ให้ตรวจสอบว่าไฟล์ JAR
edge-custom-policy-java-hello.jarถูกคัดลอกไปยังjava-hello/apiproxy/resources/javaแล้ว ซึ่งเป็นตำแหน่งที่จำเป็นสำหรับ ไฟล์ JAR ที่คุณต้องการติดตั้งใช้งานกับพร็อกซี
คอมไพล์ด้วย javac (ไม่บังคับ)
ในส่วนก่อนหน้า คุณจะสร้างไฟล์ JAR Java ที่จำเป็นโดยอัตโนมัติด้วยคำสั่ง Maven
หรือหากต้องการใช้ javac เพื่อคอมไพล์โค้ด คุณสามารถทำ
สิ่งที่คล้ายกับตัวอย่างต่อไปนี้ (จากไดเรกทอรี java-hello) เราได้จัดเตรียมไฟล์ JAR ที่จำเป็น
ไว้ให้คุณในไดเรกทอรี java-hello/lib
- เปลี่ยนไดเรกทอรีเป็น
api-platform-samples/doc-samples/java-hello - ตรวจสอบว่าคุณมี javac ในเส้นทาง
javac -version
- เรียกใช้คำสั่ง javac ต่อไปนี้
ซึ่งจะสร้างjavac -d . -classpath ./lib/expressions-1.0.0.jar:./lib/message-flow-1.0.0.jar:. callout/src/main/java/HelloJava.java
com/apigeesample/HelloJava.class - สร้างไฟล์ JAR ที่มีคลาสที่คอมไพล์แล้วใน
apiproxy/resources/javaไดเรกทอรี ซึ่งเป็นตำแหน่งที่จำเป็นสำหรับไฟล์ JAR ที่คุณต้องการติดตั้งใช้งานกับพร็อกซี คุณสามารถทำได้โดยเรียกใช้คำสั่งต่อไปนี้ ในไดเรกทอรีjava-hello(อย่าลืมใส่จุดที่ท้ายคำสั่ง)
jar cvf apiproxy/resources/java/edge-custom-policy-java-hello.jar -C com .
ติดตั้งใช้งานและเรียกใช้พร็อกซี
เราได้จัดเตรียมสคริปต์การติดตั้งใช้งานไว้ในไดเรกทอรี ./java-hello แต่ก่อนที่จะดำเนินการ
คุณต้องทำการตั้งค่าอย่างรวดเร็ว
- เปลี่ยนไดเรกทอรีเป็น
api-platform-samples/doc-samples/java-hello - หากยังไม่ได้ดำเนินการ ให้เปิดไฟล์
../../setup/setenv.shแล้วแก้ไข ตามที่ระบุด้วยข้อมูลบัญชี Apigee ของคุณ ได้แก่ ชื่อผู้ใช้ (อีเมลที่เชื่อมโยงกับบัญชี) ชื่อองค์กร และโดเมนที่คุณใช้ทำการเรียกใช้การจัดการ API เช่น สำหรับ Edge Cloud โดเมนคือhttps://api.enterprise.apigee.comแต่โดเมนของคุณอาจแตกต่างออกไปหากคุณ ใช้ Edge Private Cloud - บันทึกไฟล์
setenv.sh - เรียกใช้สคริปต์การติดตั้งใช้งาน
./deploy.sh
- หากการติดตั้งใช้งานสำเร็จ ให้เรียกใช้สคริปต์การเรียกใช้
./invoke.sh
สคริปต์การเรียกใช้จะเรียกใช้คำสั่ง cURL ที่มีลักษณะดังนี้
curl http://$org-$env.$api_domain/java-hello -H "username:Will"
ซึ่งจะแสดงผล "Hello, Will!
คุณสามารถแก้ไขสคริปต์
invoke.shเพื่อเปลี่ยนชื่อ หรือหากคุณเปลี่ยนการเรียกใช้ cURL เพื่อนำส่วนหัวออก คำสั่งจะแสดงผล "Hello, Guest!"
เกี่ยวกับพร็อกซี
มาดูนโยบายที่ใช้ในพร็อกซีนี้กันอย่างรวดเร็ว โปรดสังเกตตำแหน่งของนโยบายในโฟลว์พร็อกซีและเหตุผล
นโยบาย Assign Message
นโยบาย Assign Message แนบอยู่กับโฟลว์คำขอ ของ ProxyEndpoint โดยจะคัดลอกส่วนหัวของชื่อผู้ใช้จากคำขอและกำหนดให้กับคำตอบ การดำเนินการนี้ช่วยให้ นโยบาย Java Callout ซึ่งแนบอยู่กับโฟลว์การตอบกลับสามารถเข้าถึงส่วนหัวของชื่อผู้ใช้ และสร้างเนื้อหาการตอบกลับที่กำหนดเองโดยใช้ค่าของส่วนหัวนั้นได้
<AssignMessage async="false" continueOnError="false" enabled="true" name="CopyHeader"> <DisplayName>CopyHeader</DisplayName> <Copy source="request"> <Headers> <Header name="username"/> </Headers> </Copy> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="response"/> </AssignMessage>
นโยบาย Java Callout
นโยบาย Java Callout แนบอยู่กับโฟลว์การตอบกลับ เนื่องจากโค้ด Java ที่กำหนดเองจะทำการเปลี่ยนแปลงส่วนหัวและข้อความการตอบกลับ องค์ประกอบ ClassName
ของนโยบายจะระบุคลาสหลักที่นโยบายดำเนินการ องค์ประกอบ ResourceURL คือ
ชื่อของไฟล์ JAR ที่คุณสร้างและเพิ่มลงในไดเรกทอรี resources/java ของ
พร็อกซี
<JavaCallout name="hello-java"> <ClassName>com.apigeesample.HelloJava</ClassName> <ResourceURL>java://edge-custom-policy-java-hello.jar</ResourceURL> </JavaCallout>
สิ่งที่ต้องทราบเกี่ยวกับ Java Callout
สิ่งสำคัญที่ควรทราบเกี่ยวกับการติดตั้งใช้งาน Java Callout มีดังนี้
- นำเข้าคลาสจาก
com.apigee.flow.executionและcom.apigee.flow.messageแพ็กเกจ คุณต้องรวมแพ็กเกจเหล่านี้ไว้ในไฟล์ JAR ที่แพ็กเกจและติดตั้งใช้งาน คุณสามารถอัปโหลด JAR Java ผ่านโปรแกรมแก้ไขพร็อกซีของ UI การจัดการ หรือรวมไว้ในไดเรกทอรี/resources/javaในพร็อกซี API ที่ คุณพัฒนาในเครื่อง - ติดตั้งใช้งานอินเทอร์เฟซ Execution โค้ด Java ใดๆ ที่ดำเนินการภายในพร็อกซี API ต้อง ติดตั้งใช้งาน Execution
- นโยบาย Java Callout ไม่มีโค้ดจริง แต่นโยบาย Java Callout จะอ้างอิง ทรัพยากร Java ซึ่งคุณต้องแพ็กเกจใน JAR
- ชื่อแพ็กเกจที่ควรหลีกเลี่ยง: อย่าใช้ io.apigee หรือ com.apigee เป็นชื่อแพ็กเกจใน Java Callout เนื่องจากชื่อเหล่านี้สงวนไว้และใช้โดย โมดูล Apigee อื่นๆ
- หาก Java Callout ของคุณต้องใช้ไลบรารีของบุคคลที่สามเพิ่มเติมที่แพ็กเกจเป็นไฟล์ JAR
ไฟล์อิสระ ให้วางไฟล์ JAR เหล่านั้นไว้ในไดเรกทอรี
/resources/javaด้วยเพื่อให้แน่ใจว่าไฟล์จะโหลดอย่างถูกต้องในรันไทม์ - หากมี JAR หลายไฟล์ เพียงเพิ่มไฟล์เหล่านั้นเป็นทรัพยากรเพิ่มเติม คุณไม่จำเป็นต้อง
แก้ไขการกำหนดค่านโยบายเพื่ออ้างอิงไฟล์ JAR เพิ่มเติม เพียงวางไฟล์เหล่านั้นไว้ใน
/resources/javaก็เพียงพอแล้ว - ดูข้อมูลเพิ่มเติมเกี่ยวกับการอัปโหลด JAR Java ได้ที่ ไฟล์ทรัพยากร