גישה למשתני זרימה ב-Node.js

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

מבוא

אפשר להשתמש במודול apigee-access כדי לגשת למשתני flow של Apigee Edge באפליקציית Node.js. למודול יש שיטות לקבלת, להגדרת ולמחיקת משתנים. יש לו גם שיטה נוחה להגדרת משתנה מסוג integer.

משתני Flow קיימים בהקשר של Flow של שרת proxy ל-API. חלק מהמשתנים הם 'מובְנים' ב-Edge. חלק מהמשתנים נוצרים כשמפעילים מדיניות, ואפשר גם ליצור משתנים משלכם. בדרך כלל משתמשים במשתני Flow כדי להעביר נתונים ממדיניות אחת למדיניות אחרת, וכדי להגדיר תנאים בזרימות מותנות. מידע על משתני זרימה זמין במאמר משתני זרימה ותנאים.

מידע נוסף על מודול apigee-access ועל התכונות האחרות שלו זמין במאמר שימוש במודול apigee-access.

דוגמה לשימוש

נניח שמדיניות Edge שפועלת בנתיב של זרימת הבקשה מגדירה משתנה בשם AuthenticatedUserId. הקוד הבא ניגש למשתנה הזה ומדפיס אותו ביומן. בנוסף, הקוד הזה מגדיר משתנה. אחר כך אפשר לגשת למשתנה הזה ממדיניות, כמו בדוגמה שבהמשך.

var http = require('http');
var apigee = require('apigee-access');

http.createServer(function (request, response) {
  // The request parameter must be a request object that came from the http module
  var userId = apigee.getVariable(request, 'AuthenticatedUserId');
  apigee.setVariable(request, "custom.foo", "Bar");
  console.log('Authenticated Apigee User ID is %s', userId);
  response.writeHead(200, {'Content-Type': 'text/plain'});
  response.end('Hello World\n');
}).listen(8124);

console.log('Server running at http://127.0.0.1:8124/');

אפשר להעתיק את הקוד הזה לקובץ JavaScript, לפרוס אותו ב-Edge ולנסות אותו. מתקשרים לקובץ server.js. כדי לפרוס אותו, משתמשים בפקודה:

apigeetool deploynodeapp -u username -p password -o myorg -e test -n access -d . -m server.js -b /access

אחרי שפורסים את האפליקציה ב-Edge, מוסיפים מדיניות AssignMessage עם ההגדרה הבאה לזרימת הבקשות של ProxyEndpoint:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage async="false" continueOnError="false" enabled="true" name="AddUserId">
    <DisplayName>AddUserId</DisplayName>
    <FaultRules/>
    <Properties/>  
    <AssignVariable>
        <Name>AuthenticatedUserId</Name>
        <Value>ntesla</Value>
        <Ref/>
    </AssignVariable>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
    <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

לאחר מכן, מצמידים עוד מדיניות AssignMessage ל-preflow של התגובה של TargetEndpoint:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage async="false" continueOnError="false" enabled="true" name="SetHeader">
    <DisplayName>SetHeader</DisplayName>
    <FaultRules/>
    <Properties/>
    <Set>
        <Headers>
            <Header name="MySpecialHeader">{custom.foo}</Header>
        </Headers>
    </Set>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
    <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

אפשר לקרוא לשרת ה-proxy כך:

curl -i http://myorg-test.apigee.net/access

עכשיו עוברים לדף של שרת ה-proxy לגישה בממשק המשתמש לניהול ומציגים את התצוגה פיתוח. לוחצים על Node.js Logs כדי לראות את פלט היומן מה-proxy. אם ה-Proxy מוגדר בצורה נכונה, תראו שהמשתנה userId הוגדר. בנוסף, תראו שהכותרת הוגדרה בפלט של cURL בחלון הטרמינל:

HTTP/1.1 200 OK

Content-Type: text/plain
Date: Tue, 27 05 2014 23:20:52 GMT
MySpecialHeader: Bar
Content-Length: 12
Connection: keep-alive

Methods


getVariable

var result = getVariable(httpRequest, name);

מקבל משתנה עם שם.

פרמטרים:

  • httpRequest: אובייקט הבקשה שמגיע ממודול ה-HTTP.
  • name: (מחרוזת) השם של המשתנה לאחזור.

החזרות:

מחרוזת או מספר, בהתאם לסוג שהוגדר באמצעות setVariable(), כשהמשתנה נוצר על ידכם במקום אחר, או כשמדיניות יצרה אותו. אם אתם ניגשים לאחד ממשתני Edge המוכנים לשימוש, תוכלו למצוא רשימה של סוגים בהפניה למשתנים. לגבי סוגי משתנים שנוצרו על ידי כללי מדיניות, אפשר לעיין בנושא הספציפי של חומר העזר בנושא מדיניות.

לדוגמה:

var apigee = require('apigee-access');
    // "httpRequest" must be a request object that came from the http module
    var val1 = apigee.getVariable(request, 'TestVariable');
    var val2 = apigee.getVariable(request, 'request.client.ip');

setVariable

setVariable(httpRequest, name, value);

הגדרת משתנה. חלק מהמשתנים הם לקריאה בלבד, והשיטה setVariable() דוחה חריג אם מנסים להגדיר אחד מהם. כדי לדעת אילו משתנים הם לקריאה בלבד, אפשר לעיין בהפניה למשתנים.

פרמטרים:

  • httpRequest: אובייקט הבקשה שמגיע ממודול ה-HTTP.
  • name: (מחרוזת) השם של המשתנה לאחזור.
  • value: יכול להיות מספר, מחרוזת, ערך בוליאני, null או undefined.

דוגמה:

var apigee = require('apigee-access');
    apigee.setVariable(request, 'TestVariable', 'bar');
    // This will throw an exception because client.ip is read-only.
    apigee.setVariable(request, 'client.ip');
    

setIntVariable

setIntVariable(httpRequest, name, value);‎

השיטה setIntVariable()‎ היא שיטה נוחה שממירה קודם את פרמטר הערך למספר שלם, ואז מגדירה אותו.

פרמטרים:

  • httpRequest: אובייקט הבקשה שמגיע ממודול ה-HTTP.
  • name: (מחרוזת) השם של המשתנה שרוצים להגדיר.
  • value: פרמטר הערך חייב להיות מחרוזת או מספר.

דוגמה:

var apigee = require('apigee-access');
// Convert "123" to an integer and set it
apigee.setIntVariable(request, 'TestVariable', '123');
// Use something that's already a number
apigee.setIntVariable(request, 'TestVariable2', 42);

deleteVariable

מוחק משתנה עם שם. אי אפשר למחוק משתנה לקריאה בלבד. רשימה מלאה של משתנים לקריאה בלבד זמינה בחומר העזר בנושא משתנים.

deleteVariable(httpRequest, name);

פרמטרים:

  • httpRequest: אובייקט הבקשה שמגיע ממודול ה-HTTP.
  • name: (מחרוזת) השם של המשתנה שרוצים למחוק.

דוגמה:

  apigee.deleteVariable(request, 'TestVariable');
    // This will throw an exception because client.ip is a read-only variable.
    apigee.deleteVariable(request, 'client.ip');