המרת התשובה לאותיות רישיות באמצעות הסבר של Java

אתם צופים במסמכי התיעוד של Apigee Edge.
כדאי לעיין במסמכי התיעוד של Apigee X.
מידע

אם אתם מנסים להשתמש ב-Java callout בפעם הראשונה, מומלץ להתחיל עם המאמר איך ליצור Java callout.

בדוגמה הזו של Cookbook אפשר לראות איך ליצור מדיניות JavaCallout פשוטה שמבצעת קוד Java בהתאמה אישית בהקשר של זרימת proxy.

מה עושה הקוד לדוגמה?

ה-API Proxy בדוגמה הזו קורא לשירות יעד שמחזיר תגובת JSON פשוטה. המדיניות Java Callout ממוקמת בזרימת התגובה של היעד. קוד ה-Java ממיר את הכותרות ואת התוכן של התגובה לאותיות רישיות. זו דוגמה פשוטה, אבל היא ממחישה איך אפשר להפעיל קוד Java מותאם אישית בהקשר של proxy ל-API ב-Edge.

ניסיון הדוגמה

הורדת הפרויקט

כדי לפשט את התהליך, אפשר להוריד את הפרויקט הזה ממאגר api-platform-samples של Apigee ב-GitHub.

  1. מורידים או משכפלים את api-platform-samples למערכת.
  2. במסוף או בכלי לעריכת קוד לפי בחירתכם, עוברים לפרויקט api-platform-samples/doc-samples/java-cookbook.

קומפילציה של הקוד באמצעות Maven

הפרויקט מוגדר כך שאפשר לבצע קומפילציה באמצעות Maven. אם רוצים להשתמש ב-javac, נצרף גם דוגמה אחרי הדוגמה של Maven.

  1. מוודאים ש-Maven מותקן:
    mvn -version
  2. מריצים את הסקריפט java-cookbook/buildsetup.sh. הסקריפט הזה מתקין את יחסי התלות הנדרשים ב-JAR במאגר Maven המקומי.
  3. משתמשים בפקודה cd כדי לעבור לספרייה java-cookbool/callout.
  4. מריצים את Maven:
    mvn clean package
  5. אם רוצים, אפשר לוודא שקובץ ה-JAR‏ edge-custom-policy-java-cookbook.jar הועתק אל java-cookbook/apiproxy/resources/java. זה המיקום הנדרש לקובצי JAR שרוצים לפרוס באמצעות שרת proxy.

הידור באמצעות javac

אם רוצים להשתמש ב-javac כדי לקמפל את הקוד, אפשר לעשות משהו דומה למה שמופיע בהמשך (מתוך הספרייה java-cookbook). קובצי ה-JAR הנדרשים מסופקים לכם בספרייה java-cookbook/lib.

  1. ‫cd אל api-platform-samples/doc-samples/java-cookbook.
  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/ResponseUppercase.java
  4. מעתיקים את קובץ ה-JAR לספרייה apiproxy/resources/java. זה המיקום הנדרש לקובצי JAR שרוצים לפרוס באמצעות שרת proxy.

    cp com/apigeesample/ResponseUppercase.class apiproxy/resources/java

פריסה של ה-proxy והתקשרות אליו

סקריפט פריסה מסופק בספרייה ./java-cookbook. אבל לפני שמריצים אותו, צריך לבצע הגדרה מהירה.

  1. ‫cd אל api-platform-samples/doc-samples/java-cookbook
  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-cookbook/json

התגובה אמורה להיראות כך:

< HTTP/1.1 200 OK
< Date: Tue, 09 May 2017 20:31:08 GMT
< Content-Type: APPLICATION/JSON; CHARSET=UTF-8
< Content-Length: 68
< Connection: keep-alive
< Access-Control-Allow-Origin: *
< ETag: W/"44-RA5ERT/MMLIK54NVBWBSZG"
< X-Powered-By: APIGEE
< Server: Apigee Router
<
* Curl_http_done: called premature == 0
* Connection #0 to host willwitman-test.apigee.net left intact
{"FIRSTNAME":"JOHN","LASTNAME":"DOE","CITY":"SAN JOSE","STATE":"CA"}

תהליך שרת proxy

זו תמונה של כלי המעקב שמציגה את זרימת הנתונים של ה-proxy:

מבנה ה-Proxy

זה המבנה של ה-proxy. שימו לב: הוא כולל קובץ JAR בספרייה apiproxy/resources/java. חובה להשתמש ב-JAR. אנחנו מספקים אותו לדוגמה, אבל אם אתם מבצעים עבודה בהתאמה אישית, אתם צריכים ליצור אותו בעצמכם ולהעתיק אותו למיקום הזה. הוראות להרכבה ולפריסה של יתרון מרכזי ב-Java מפורטות במאמר איך יוצרים יתרון מרכזי ב-Java.

java-cookbook

    apiproxy
        java-cookbook.xml
    policies
        responseUppercase.xml
    proxies
        default.xml
    resources
        java
            ResponseUppercase.jar
    targets
        default.xml

מידע על קוד Java

מדיניות Java Callout מריצה את קוד ה-Java הבא, שממיר את כותרות התגובה ואת גוף התגובה לאותיות רישיות. שימו לב שהתוכנית משתמשת בחבילות ספציפיות ל-Apigee. החבילות האלה מספקות אובייקטים ושיטות שאפשר להשתמש בהם כדי ליצור אינטראקציה ישירה עם זרימת ה-proxy. יש שיטות שמאפשרות לקבל ולהגדיר משתני זרימה, כותרות, תוכן הודעה ועוד.

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;

import java.util.Set; 

public class ResponseUppercase implements Execution{
    public ExecutionResult execute(MessageContext messageContext, ExecutionContext executionContext) {
        try {
            Set headers = messageContext.getMessage().getHeaderNames();
            for (String header : headers) {
                String h = messageContext.getMessage().getHeader(header).toUpperCase();
                messageContext.getMessage().setHeader(header, h);
            }
            String content = messageContext.getMessage().getContent();
            messageContext.getMessage().setContent(content.toUpperCase());
            return ExecutionResult.SUCCESS;
        } catch (Exception e) {
                return ExecutionResult.ABORT;
        }
    }
}

בדיקת ה-proxy לדוגמה

אתם צריכים לפתוח את ה-proxy ולבדוק את הקבצים. זוהי מדיניות Java Callout. שימו לב לאופן שבו הוא מפנה למחלקה שההפניה החיצונית מבצעת ולקובץ ה-JAR. כל כללי המדיניות של Java Callout פועלים לפי התבנית הזו. כדאי לעיין גם במדיניות בנושא Java Callout.

<JavaCallout name="responseUppercase">         
    <ClassName>com.apigeesample.ResponseUppercase</ClassName>         
    <ResourceURL>java://ResponseUppercase.jar</ResourceURL> 
</JavaCallout>