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

คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่เอกสารประกอบของ Apigee X
ข้อมูล

ข้อความเสริมของ Java คืออะไร

Apigee Edge มีนโยบายที่หลากหลายซึ่งสอดคล้องกับข้อกำหนดการจัดการ API ทั่วไป เช่น ความปลอดภัย การเปลี่ยนรูปแบบข้อมูล การจัดการการรับส่งข้อมูล และอื่นๆ

อย่างไรก็ตาม มีบางกรณีที่ API ของคุณต้องใช้ลักษณะการทำงานที่กำหนดเองซึ่งไม่ได้นำไปใช้ในนโยบายมาตรฐาน ในกรณีเหล่านี้ Apigee จะมีตัวเลือกมากมายที่ช่วยให้คุณเขียนสคริปต์หรือเขียนโค้ดลักษณะการทำงานของ API ที่กำหนดเองได้ แนวทางหนึ่งคือการนำลักษณะการทำงานที่ต้องการไปใช้ใน Java

ดูเวอร์ชันที่รองรับของ Java ได้ที่ซอฟต์แวร์ที่รองรับและเวอร์ชันที่รองรับ

ฉันจะใช้รหัส Java ในพร็อกซีได้อย่างไร

นโยบายไฮไลต์ของ Java ช่วยให้คุณเรียกใช้โค้ด Java จากภายในโฟลว์พร็อกซีที่กำลังดำเนินการอยู่ โค้ด Java ต้องใช้อินเทอร์เฟซ Java เฉพาะ Edge บางรายการที่อนุญาตให้โค้ดโต้ตอบกับพร็อกซีที่ดำเนินการได้ เช่น เมธอดของ Java มีไว้สำหรับการรับและตั้งค่าส่วนหัว พารามิเตอร์การค้นหา ตัวแปรโฟลว์ และเอนทิตีอื่นๆ ภายในบริบทโฟลว์ปัจจุบันของพร็อกซี

ฉันควรใช้ไฮไลต์ Java เมื่อใด

มาดูสถานการณ์ที่ข้อความเสริมของ Java มีประโยชน์และสถานการณ์ที่คุณควรพิจารณาวิธีอื่นๆ กัน

ก่อนอื่นให้ลองพิจารณาวิธีอื่นๆ

ก่อนใช้ไฮไลต์ Java โปรดทราบว่าอาจมีวิธีอื่นๆ ที่คุณใช้แทนได้ เช่น

  • สำหรับการดำเนินการขนาดเล็ก เช่น การเรียก HTTP API ไปยังบริการระยะไกล ให้ลองใช้นโยบาย ServiceAPI ดูนโยบายคำขอราคาเสนอบริการ
  • คุณสามารถใช้ภาษา JavaScript หรือ Python สำหรับการโต้ตอบที่ค่อนข้างเรียบง่ายกับเนื้อหาข้อความ เช่น การแก้ไขหรือการแยกส่วนหัว พารามิเตอร์ หรือเนื้อหาของข้อความ HTTP

สิ่งที่คุณทำได้ในโค้ด Java

ไฮไลต์ของ Java รองรับการดำเนินการพื้นฐานต่อไปนี้

  • การตรวจสอบหรือการควบคุมข้อความคำขอหรือข้อความตอบกลับ
  • การรับและการตั้งค่าตัวแปรโฟลว์ คุณใช้เมธอดของ Java เพื่อเข้าถึงตัวแปรโฟลว์ Edge ได้ หากต้องการเข้าถึงข้อมูลแมปค่าคีย์ (KVM) ให้ใช้นโยบาย KVM กำหนดค่า KVM ให้กับตัวแปรโฟลว์ จากนั้นคุณจะเข้าถึงตัวแปรโฟลว์จากภายในคำขอราคาเสนอ Java ได้
  • การเรียกใช้บริการภายนอก
  • การเพิ่มข้อผิดพลาด
  • การจัดการข้อความแสดงข้อผิดพลาดและรหัสสถานะ

สิ่งที่คุณทำได้ในโค้ด Java

การเรียกระบบส่วนใหญ่ไม่ได้รับอนุญาต คุณไม่สามารถทำสิ่งต่อไปนี้ได้

  • ทำให้ระบบไฟล์ภายในอ่านหรือเขียน ซึ่งหมายความว่าคุณจะใช้แพ็กเกจ Java เพื่ออ่าน/เขียนในระบบไฟล์ภายในไม่ได้ แต่จะเรียกใช้ภายนอกจากระยะไกลได้
  • รับข้อมูลเกี่ยวกับกระบวนการปัจจุบัน รายการกระบวนการ หรือการใช้งาน CPU/หน่วยความจำในเครื่อง
  • เข้าถึงซอร์สโค้ดใน "expressions-1.0.0.jar" และ "message-flow-1.0.0.jar"

แม้ว่าบางการเรียกอาจได้ผล แต่ก็ไม่ได้รับการสนับสนุนและความรับผิดที่จะถูกปิดใช้งานไว้ตลอดเวลา หลีกเลี่ยงการทำการเรียกดังกล่าวในรหัสของคุณ

โปรดอย่าใช้หรืออาศัยไลบรารี Java ที่รวมอยู่ใน Apigee Edge ไลบรารีเหล่านี้มีไว้สําหรับฟังก์ชันการทํางานของผลิตภัณฑ์ Edge เท่านั้น และไม่รับประกันว่าไลบรารีจะพร้อมใช้งานตั้งแต่รุ่นสู่รุ่น หากคุณใช้ไลบรารีดังกล่าว ให้ใช้ไลบรารีดังกล่าวในการสาธิตที่ไม่ได้ใช้งานเท่านั้น

ข้อความไฮไลต์ Hello Java

มาดูกันที่ตัวอย่างข้อความเสริม Hello World แบบพื้นฐาน ในตัวอย่างนี้ เราสร้างพร็อกซีแบบง่ายที่มีข้อความไฮไลต์ Java ที่ตอบกลับเป็น "hello world" พร็อกซีจะแสดงคำตอบที่เป็นไปได้ 1 ใน 2 คำตอบต่อไปนี้

  • หากคุณส่งส่วนหัว "username" ด้วยค่า "name" พร็อกซีจะแสดงผลดังนี้

    Hello, <name>!
    
  • หากคุณไม่ใส่ส่วนหัว พร็อกซีจะแสดงเพียงค่าต่อไปนี้

    "Hello, Guest!"
    

ดาวน์โหลดโปรเจ็กต์เริ่มต้น

เรามีโปรเจ็กต์พื้นฐานที่เตรียมไว้ให้คุณใน GitHub ในที่เก็บ api-platform-samples ของ Apigee เพื่อความสะดวก

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

เขียนโค้ด Java

  1. เปิดไฟล์ซอร์สของ Java: java-hello/callout/src/main/java/HelloJava.java ไฟล์นี้เป็นเวอร์ชันโครงกระดูกของคลาส Java หลักที่เราจะนำมาใช้ ต้องระบุแพ็กเกจที่นำเข้าสำหรับโค้ดไฮไลต์ Edge Java คลาสเหล่านี้มอบเมธอดที่ช่วยให้คุณเข้าถึงบริบทการดำเนินการของพร็อกซีได้ เราจะแนะนำขั้นตอนในการคอมไพล์และทำให้โค้ดนี้ใช้งานได้ในเร็วๆ นี้
    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 สคริปต์นี้จะติดตั้งทรัพยากร Dependency ของ JAR ที่จำเป็นในที่เก็บ Maven ในเครื่อง
  3. cd ลงในไดเรกทอรี java-hello/callout
  4. ดำเนินการ Maven:

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

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

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

  1. cd เป็น 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. cd เป็น 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"
    

    ซึ่งจะแสดงข้อความ "Hey, Will!

    คุณแก้ไขสคริปต์ invoke.sh เพื่อเปลี่ยนชื่อได้ หรือหากเปลี่ยนการเรียก cURL เพื่อนำส่วนหัวออก คำสั่งจะแสดงขึ้นมาว่า "สวัสดี ผู้มาเยือน"

เกี่ยวกับพร็อกซี

เรามาตรวจสอบนโยบายที่ใช้ในพร็อกซีนี้กัน โปรดคำนึงถึงตำแหน่งของนโยบายในขั้นตอนการทำงานของพร็อกซีและเหตุผล

นโยบายการมอบหมายข้อความ

นโยบาย "กำหนดข้อความ" จะแนบอยู่กับกระบวนการส่งคำขอของ ProxyEndpoint โดยจะคัดลอกส่วนหัวของชื่อผู้ใช้จากคำขอและมอบหมายให้กับการตอบกลับ การดำเนินการนี้ช่วยให้นโยบายการเรียก Java ซึ่งแนบอยู่กับขั้นตอนการตอบสนองสามารถเข้าถึงส่วนหัวของชื่อผู้ใช้และสร้างเนื้อหาการตอบกลับที่กำหนดเองโดยใช้ค่าของส่วนหัวนั้น

<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

นโยบายข้อความเสริมของ Java จะแนบอยู่กับขั้นตอนการตอบกลับ เนื่องจากโค้ด 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

สิ่งสำคัญที่ควรทราบเกี่ยวกับการใช้ข้อความเสริม Java มีดังนี้

  • นำเข้าชั้นเรียนจากแพ็กเกจ com.apigee.flow.execution และ com.apigee.flow.message แพ็กเกจเหล่านี้ต้องรวมอยู่ในไฟล์ JAR ที่มีการทำแพ็กเกจและทำให้ใช้งานได้ คุณจะอัปโหลด Java JAR ผ่านเครื่องมือแก้ไขพร็อกซี UI การจัดการ หรือรวมไว้ในไดเรกทอรี /resources/java ในพร็อกซี API ที่คุณพัฒนาในเครื่องก็ได้
  • ใช้อินเทอร์เฟซการดำเนินการ โค้ด Java ที่ดำเนินการภายในพร็อกซี API ต้องใช้การดำเนินการ
  • นโยบายไฮไลต์ของ Java ไม่มีโค้ดจริง แต่นโยบายคำขอราคาเสนอ Java จะอ้างอิง "ทรัพยากร" ของ Java ซึ่งต้องแพ็กเกจใน JAR
  • ชื่อแพ็กเกจที่ควรหลีกเลี่ยง: อย่าใช้ io.apigee หรือ com.apigee เป็นชื่อแพ็กเกจในข้อความไฮไลต์ของ Java มีการจองและใช้โดยโมดูล Apigee อื่นๆ
  • หากไฮไลต์ของ Java ใช้ไลบรารีของบุคคลที่สามเพิ่มเติมซึ่งจัดแพ็กเกจเป็นไฟล์ JAR อิสระไว้ ให้วางไฟล์ JAR เหล่านั้นในไดเรกทอรี /resources/java ด้วยเพื่อให้แน่ใจว่าไฟล์เหล่านั้นโหลดอย่างถูกต้องที่รันไทม์
  • หากมี JAR หลายรายการ ให้เพิ่ม JAR เหล่านั้นเป็นทรัพยากรเพิ่มเติม คุณไม่จำเป็นต้องแก้ไขการกำหนดค่านโยบายเพื่ออ้างอิงไฟล์ JAR เพิ่มเติม ใส่ชื่อไว้ใน /resources/java ก็เพียงพอแล้ว
  • ดูข้อมูลเพิ่มเติมเกี่ยวกับการอัปโหลด Java JAR ได้ที่ไฟล์ทรัพยากร