วิธีสร้างไฮไลต์ Java

คุณกำลังดูเอกสารประกอบของ 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 โปรดทราบว่าอาจมีวิธีการอื่นๆ ที่คุณใช้แทนได้ เช่น

สิ่งที่คุณทำได้ในโค้ด 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 เพื่อให้การดำเนินการง่ายขึ้น

  1. ดาวน์โหลดหรือโคลน api-platform-samples ลงในระบบ
  2. ในเทอร์มินัลหรือโปรแกรมแก้ไขโค้ดที่คุณเลือก ให้ไปที่ api-platform-samples/doc-samples/java-hello โปรเจ็กต์

เขียนโค้ด Java

  1. เปิดไฟล์ซอร์สโค้ด 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;
                    }
            }
    
    }
  2. แทนที่บรรทัดที่แสดงความคิดเห็น // 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!");
    }
  3. บันทึกไฟล์


คอมไพล์โค้ดด้วย Maven

ระบบได้ตั้งค่าโปรเจ็กต์เพื่อให้คุณคอมไพล์ด้วย Maven ได้ หากต้องการใช้ javac เราจะใส่ตัวอย่างไว้หลังตัวอย่าง Maven

  1. ตรวจสอบว่าคุณได้ติดตั้ง Maven แล้ว

    mvn -version
  2. เรียกใช้สคริปต์ java-hello/buildsetup.sh สคริปต์นี้จะติดตั้งการขึ้นต่อกันของ JAR ที่จำเป็น ในที่เก็บ Maven ในเครื่อง
  3. เปลี่ยนไดเรกทอรีเป็น java-hello/callout
  4. เรียกใช้ Maven

    mvn clean package
  5. หากต้องการ ให้ตรวจสอบว่าไฟล์ JAR edge-custom-policy-java-hello.jar ถูกคัดลอกไปยัง java-hello/apiproxy/resources/java แล้ว ซึ่งเป็นตำแหน่งที่จำเป็นสำหรับ ไฟล์ JAR ที่คุณต้องการติดตั้งใช้งานกับพร็อกซี

คอมไพล์ด้วย javac (ไม่บังคับ)

ในส่วนก่อนหน้า คุณจะสร้างไฟล์ JAR Java ที่จำเป็นโดยอัตโนมัติด้วยคำสั่ง Maven หรือหากต้องการใช้ javac เพื่อคอมไพล์โค้ด คุณสามารถทำ สิ่งที่คล้ายกับตัวอย่างต่อไปนี้ (จากไดเรกทอรี java-hello) เราได้จัดเตรียมไฟล์ JAR ที่จำเป็น ไว้ให้คุณในไดเรกทอรี java-hello/lib

  1. เปลี่ยนไดเรกทอรีเป็น api-platform-samples/doc-samples/java-hello
  2. ตรวจสอบว่าคุณมี javac ในเส้นทาง

    javac -version
  3. เรียกใช้คำสั่ง 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
  4. สร้างไฟล์ JAR ที่มีคลาสที่คอมไพล์แล้วใน apiproxy/resources/java ไดเรกทอรี ซึ่งเป็นตำแหน่งที่จำเป็นสำหรับไฟล์ JAR ที่คุณต้องการติดตั้งใช้งานกับพร็อกซี คุณสามารถทำได้โดยเรียกใช้คำสั่งต่อไปนี้ ในไดเรกทอรี java-hello (อย่าลืมใส่จุดที่ท้ายคำสั่ง)

    jar cvf apiproxy/resources/java/edge-custom-policy-java-hello.jar -C com .
    

ติดตั้งใช้งานและเรียกใช้พร็อกซี

เราได้จัดเตรียมสคริปต์การติดตั้งใช้งานไว้ในไดเรกทอรี ./java-hello แต่ก่อนที่จะดำเนินการ คุณต้องทำการตั้งค่าอย่างรวดเร็ว

  1. เปลี่ยนไดเรกทอรีเป็น api-platform-samples/doc-samples/java-hello
  2. หากยังไม่ได้ดำเนินการ ให้เปิดไฟล์ ../../setup/setenv.sh แล้วแก้ไข ตามที่ระบุด้วยข้อมูลบัญชี Apigee ของคุณ ได้แก่ ชื่อผู้ใช้ (อีเมลที่เชื่อมโยงกับบัญชี) ชื่อองค์กร และโดเมนที่คุณใช้ทำการเรียกใช้การจัดการ API เช่น สำหรับ Edge Cloud โดเมนคือ https://api.enterprise.apigee.com แต่โดเมนของคุณอาจแตกต่างออกไปหากคุณ ใช้ Edge Private Cloud
  3. บันทึกไฟล์ setenv.sh
  4. เรียกใช้สคริปต์การติดตั้งใช้งาน

    ./deploy.sh
  5. หากการติดตั้งใช้งานสำเร็จ ให้เรียกใช้สคริปต์การเรียกใช้

    ./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 ได้ที่ ไฟล์ทรัพยากร