API-Proxys mit JavaScript programmieren

Sie sehen die Dokumentation zu Apigee Edge.
Zur Apigee X-Dokumentation
weitere Informationen

In diesem Thema erfahren Sie, wie Sie mit JavaScript HTTP-Header dynamisch zu einer Antwortnachricht hinzufügen, wie Sie eine JSON-Antwort parsen und einen Teil ihrer Attribute an die anfragende Anwendung zurückgeben.

Beispielcode herunterladen und ausprobieren

Über dieses Kochbuchbeispiel

Dieses Kochbuchbeispiel veranschaulicht ein API-Proxy-Muster, in dem Sie das API-Verhalten in JavaScript implementieren. Die JavaScript-Beispiele sollen Ihnen zeigen, wie Sie mit einfachen Variablen und Nachrichteninhalten arbeiten. Ein Beispiel zeigt, wie Sie mit get und set Variablen abrufen. Das zweite Beispiel zeigt, wie Sie JSON parsen und eine Nachricht aus dem Ergebnis erstellen.

Im API-Proxy befinden sich zwei JavaScript-Beispiele:

  • setHeaders.js: Mit diesem JavaScript-Code werden die Werte einiger Variablen abgerufen, die beim Aufrufen eines API-Proxys festgelegt werden. Im JavaScript werden diese Variablen der Antwortnachricht hinzugefügt, sodass Sie ihre Werte für jede von Ihnen gesendete Anfrage sehen können.
  • minimize.js: Dieser JavaScript-Code zeigt Ihnen, wie Sie mit Nachrichteninhalten arbeiten. Die Idee hinter diesem Beispiel ist, dass ein Dienst oft mehr Daten zurückgibt, als erforderlich sind. Der JavaScript-Code parst also die Antwortnachricht, extrahiert einige interessante Eigenschaften und erstellt sie dann, um den Inhalt der Antwortnachricht zu erstellen.

Der Code für setHeader.js:

context.setVariable("response.header.X-Apigee-Target", context.getVariable("target.name"));
context.setVariable("response.header.X-Apigee-ApiProxyName", context.getVariable("apiproxy.name"));
context.setVariable("response.header.X-Apigee-ProxyName", context.getVariable("proxy.name"));
context.setVariable("response.header.X-Apigee-ProxyBasePath", context.getVariable("proxy.basepath"));
context.setVariable("response.header.X-Apigee-ProxyPathSuffix", context.getVariable("proxy.pathsuffix"));
context.setVariable("response.header.X-Apigee-ProxyUrl", context.getVariable("proxy.url"));

Der Code für minimize.js:

// Parse the respose from the target.
var res = JSON.parse(context.proxyResponse.content);

// Pull out only the information we want to see in the response.
var minimizedResponse = { city: res.root.city,
                          state: res.root.state };
          
// Set the response variable. 
context.proxyResponse.content = JSON.stringify(minimizedResponse);

Sie können über das Kontextobjekt in JavaScript auf Flussvariablen zugreifen. Dieses Objekt ist Teil des Edge JavaScript-Objektmodells. Weitere Informationen zum Objektmodell finden Sie unter JavaScript-Objektmodell.

Hinweis

Bevor Sie sich dieses Kochbuchbeispiel ansehen, sollten Sie auch mit den folgenden grundlegenden Konzepten vertraut sein:

  • Was sind Richtlinien und wie werden sie an Proxys angehängt? Eine gute Einführung in Richtlinien finden Sie unter Was ist eine Richtlinie?.
  • Die Struktur eines Proxyablaufs, wie unter Abläufe konfigurieren erläutert. Mit Abläufen können Sie die Reihenfolge angeben, in der Richtlinien von einem API-Proxy ausgeführt werden. In diesem Beispiel werden mehrere Richtlinien erstellt und einem API-Proxy-Ablauf hinzugefügt.
  • Wie ein API-Proxy-Projekt in Ihrem Dateisystem strukturiert ist, wie in der Referenz zur API-Proxy-Konfiguration erläutert
  • Grundkenntnisse in XML, JSON und JavaScript In diesem Beispiel erstellen Sie den API-Proxy und seine Richtlinien mit XML-Dateien, die sich im Dateisystem befinden.

Wenn Sie den Beispielcode heruntergeladen haben, finden Sie alle in diesem Thema beschriebenen Dateien im Beispielordner javascript-cookbook. In den folgenden Abschnitten wird der Beispielcode ausführlich behandelt.

Informationen zum Proxyablauf

Damit JavaScript in einem API-Proxy ausgeführt werden kann, müssen Sie es über einen Richtlinienanhang, der als „Schritt“ bezeichnet wird, an einen Ablauf anhängen. Eine Richtlinie vom Typ JavaScript (Groß-/Kleinschreibung von Notizen) enthält lediglich einen Verweis auf den Namen einer JavaScript-Datei. Verweisen Sie die Richtlinie mithilfe des Elements „ResourceURL“ auf eine JavaScript-Datei.

Die folgende Richtlinie verweist beispielsweise auf die JavaScript-Datei setHeader.js.

<Javascript name='setHeaders' timeLimit='200'>
    <ResourceURL>setHeaders.js</ResourceURL>
</Javascript>

Sie können diese Richtlinie wie jeden anderen Richtlinientyp an einen API-Proxyablauf anhängen. Durch das Anhängen der Richtlinie an den API-Proxyablauf geben Sie an, wo das JavaScript ausgeführt werden soll. So können Sie JavaScript ausführen, das mit Anfrage- oder Antwortnachrichten interagiert, während diese Nachrichten durch den API-Proxy fließen. In diesem Beispiel werden beide JavaScripts im Antwortablauf ausgeführt, da die Richtlinien zwei Dinge tun: HTTP-Header für die Antwortnachricht festlegen und die Antwortnachricht minimieren, die Apigee Edge an die anfragende Anwendung zurückgibt.

Wenn Sie diese Ablaufkonfiguration in der Verwaltungs-UI öffnen, wird die Ablaufkonfiguration unten angezeigt.

Wählen Sie im Navigationsbereich Proxyendpunkte > Standard > PostFlow aus.

Die entsprechende XML-Konfiguration für den ProxyEndpoint mit dem Namen „default“ wird unten gezeigt.

<ProxyEndpoint name="default">
  <PostFlow>
    <Response>
      <!-- Steps reference policies under /apiproxy/policies -->
      <!-- First, set a few HTTP headers with variables for this transaction. -->
      <Step><Name>setHeaders</Name></Step>
      <!-- Next, transform the response from XML to JSON for easier parsing with JavaScript -->
      <Step><Name>transform</Name></Step>
      <!-- Finally, use JavaScript to create minimized response with just city and state. -->
      <Step><Name>minimize</Name></Step>
    </Response>
  </PostFlow>
  <HTTPProxyConnection>
        <!-- BasePath defines the network address for this API proxy. See the script 'invoke.sh' to see how the complete URL for this API proxy is constructed.-->
    <BasePath>/javascript-cookbook</BasePath>
     <!-- Set VirtualHost to 'secure' to have this API proxy listen on HTTPS. -->
    <VirtualHost>default</VirtualHost>
  </HTTPProxyConnection>
  <RouteRule name="default">
    <TargetEndpoint>default</TargetEndpoint>
  </RouteRule>
</ProxyEndpoint>

Hier ist eine Zusammenfassung der Ablaufelemente.

  • <Request>: Das <Request>-Element besteht aus mehreren <Step>-Elementen. Mit jedem Schritt wird eine der Richtlinien aufgerufen, die Sie im weiteren Verlauf dieses Themas erstellt haben. Mit diesen Richtlinien wird ein JavaScript-Code an den API-Proxy-Ablauf angehängt. Der Speicherort des Richtlinienanhangs bestimmt, wann das JavaScript ausgeführt wird.
  • <Response>: Das Element <Response> enthält auch <Steps>. Mit diesen Schritten werden auch Richtlinien aufgerufen, die für die Verarbeitung der endgültigen Antwort des Ziels verantwortlich sind. In diesem Beispiel ist dies das simulierte Dienstziel von Apigee. Beachten Sie die Einstellung "HTTPTargetConnection" unter /apiproxy/targets/default.xml.
  • <HTTPProxyConnection> – Gibt den Host und den URI-Pfad an, die die Netzwerkadresse definieren, die Apps zum Nutzen dieser API aufrufen.
  • <RouteRule>: Dieses Element gibt an, welche TargetEndpoint-Konfiguration vom ProxyEndpoint aufgerufen wird.

JavaScript-Code zu einem Proxy hinzufügen

JavaScript (wie Python-Skripts, Java-JAR-Dateien, XSLT-Dateien usw.) wird als Ressourcen gespeichert. Wenn Sie gerade erst mit JavaScript arbeiten, ist es am einfachsten, Ihre JavaScript-Dateien im API-Proxy zu speichern. Im weiteren Verlauf sollte JavaScript so allgemein und wiederverwendbar wie möglich gestaltet und dann auf der Umgebungs- oder Organisationsebene gespeichert werden. So müssen Sie nicht die gleichen JavaScript-Dateien in mehreren API-Proxys speichern, was schnell unübersichtlich werden kann.

Informationen zum Speichern von Ressourcen auf Organisations- und Umgebungsebene finden Sie unter Ressourcendateien.

Ausprobieren

Eine Anleitung zum Bereitstellen und Aufrufen des Proxys finden Sie in der Readme-Datei für das JavaScript-Cookbook.

API-Proxy importieren und bereitstellen

Nachdem Sie Änderungen vorgenommen haben, können Sie den API-Proxy im API-Proxy-Builder in der Verwaltungs-UI speichern.

Alternativ können Sie den folgenden Befehl im Verzeichnis /api-platform-samples/doc-samples/javascript-cookbook ausführen.

$ sh deploy.sh

JavaScript testen

Führen Sie den folgenden Befehl im Verzeichnis /api-platform-samples/doc-samples/javascript-cookbook aus.

$ sh invoke.sh

Das curl-Flag -v wird im Shell-Skript verwendet, um HTTP-Header der durch JavaScript geänderten Antwortnachricht anzusehen.

So senden Sie eine Anfrage direkt:

$ curl -v http://{org_name}-test.apigee.net/javascript-cookbook 

Wenn das JavaScript korrekt ausgeführt wird, erhalten Sie eine Antwort wie diese:

< X-Apigee-Demo-Target: default
< X-Apigee-Demo-ApiProxyName: simple-javascript
< X-Apigee-Demo-ProxyName: default
< X-Apigee-Demo-ProxyBasePath: /javascript-cookbook
< X-Apigee-Demo-ProxyPathSuffix: /xml
< X-Apigee-Demo-ProxyUrl: http://rrt331ea.us-ea.4.apigee.com/javascript-cookbook/xml
 
{"city":"San Jose","state":"CA"}

Sie können jetzt das JavaScript ändern, um neue Dinge auszuprobieren, den API-Proxy noch einmal bereitzustellen und die Ergebnisse zu prüfen, indem Sie dieselbe Anfrage senden. Stellen Sie immer sicher, dass Sie den API-Proxy mit Ihrem JavaScript-Code bereitstellen, damit Ihre Änderungen wirksam werden.

Skriptfehler

Beim Schreiben von JavaScript treten unweigerlich Fehler auf. Das Format der JavaScript-Fehler, die von einem API-Proxy ausgegeben werden, ist unten dargestellt.

{  
   "fault":{  
      "faultstring":"Execution of rewriteTargetUrl failed with error: Javascript runtime error: \"TypeError: Cannot find function getVariable in object TARGET_REQ_FLOW. (rewriteTargetUrl_js#1). at line 1 \"",
      "detail":{  
         "errorcode":"steps.javascript.ScriptExecutionFailed"
      }
   }
}

Wann sollte JavaScript verwendet werden?

In Apigee Edge gibt es in der Regel mehrere Möglichkeiten, bestimmte Funktionen zu implementieren. Verwende nach Möglichkeit sofort einsatzfähige Richtlinien und vermeide die Versuchung, deine gesamte API-Proxylogik in JavaScript zu codieren. Obwohl Apigee Edge kompiliertes JavaScript zur Verbesserung der Leistung nutzt, ist es unwahrscheinlich, dass JavaScript so gut funktioniert wie Richtlinien. Die Verwaltung und das Debuggen von JavaScript sind möglicherweise schwieriger. Reservieren Sie JavaScript-Code für Funktionen, die Ihren Anforderungen entsprechen.

Wenn die Leistung für benutzerdefinierte Funktionen ein Problem darstellt, sollten Sie nach Möglichkeit Java verwenden.

Zusammenfassung

In diesem Thema des Kochbuchs haben Sie erfahren, wie JavaScript in eine API-Proxy-Konfiguration eingebunden werden kann, um benutzerdefiniertes Verhalten zu implementieren. Das durch die Beispiele implementierte benutzerdefinierte Verhalten zeigt, wie Variablen abgerufen, JSON geparst und benutzerdefinierte Antwortnachrichten erstellt werden.