API-Proxys mit JavaScript programmieren

<ph type="x-smartling-placeholder"></ph> Sie sehen die Dokumentation zu Apigee Edge.
Gehen Sie zur Apigee X-Dokumentation.
Weitere Informationen

In diesem Thema erfahren Sie, wie Sie mithilfe von JavaScript HTTP-Header und wie Sie eine JSON-Antwort parsen und eine Teilmenge ihrer Eigenschaften an die der anfragenden App.

Beispielcode herunterladen und ausprobieren

<ph type="x-smartling-placeholder">

Informationen zu diesem Kochbuch-Beispiel

Dieses Cookbook-Beispiel zeigt ein API-Proxy-Muster, bei dem Sie das API-Verhalten in JavaScript Die JavaScript-Beispiele sollen Ihnen die Arbeit mit einfachen Variablen zeigen. und Nachrichteninhalt. In einem Beispiel wird gezeigt, wie Variablen get und set werden. Die zweite Beispiel für das Parsen von JSON und das Erstellen einer Nachricht aus dem Ergebnis.

Im API-Proxy befinden sich zwei JavaScript-Beispiele:

  • setHeaders.js: Dieser JavaScript-Code ruft die Werte einiger Variablen ab, die werden festgelegt, wenn ein API-Proxy aufgerufen wird. Der JavaScript-Code fügt diese Variablen der Antwort hinzu. , damit Sie die Werte für jede Ihrer Anfragen sehen können.
  • minimize.js: Dieser JavaScript-Code zeigt Ihnen, wie Sie mit Messages arbeiten. Inhalte. Die Idee hinter diesem Beispiel ist, dass ein Dienst häufig mehr Daten zurückgibt als notwendig ist. Also parst der JavaScript-Code die Antwortnachricht, extrahiert einige interessante und verwendet 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 in JavaScript über das Kontextobjekt auf Flussvariablen zugreifen. Dieses Objekt ist Teil von Edge JavaScript-Objektmodells erstellt. Weitere Informationen zum Objektmodell finden Sie unter JavaScript-Objektmodell.

Hinweis

Bevor Sie sich dieses Kochbuch-Beispiel ansehen, sollten Sie auch mit diesen grundlegenden Konzepten:

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

Wenn Sie den Beispielcode heruntergeladen haben, finden Sie alle in diesem Artikel im Beispielordner javascript-cookbook. In den folgenden Abschnitten wird den Beispielcode genauer ansehen.

Informationen zum Proxy-Ablauf

Damit JavaScript in einem API-Proxy ausgeführt wird, müssen Sie es mithilfe einer Richtlinie an einen Ablauf anhängen Anhang namens „Schritt“ bezeichnet. Eine Richtlinie vom Typ JavaScript (Großschreibung von Hinweisen) enthält einfach ein Verweis auf den Namen einer JavaScript-Datei Sie verweisen die Richtlinie mithilfe der Methode ResourceURL-Element.

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

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

Sie können diese Richtlinie wie jeden anderen Richtlinientyp an einen API-Proxy-Ablauf anhängen. Von Wenn Sie die Richtlinie an den API-Proxy-Ablauf anhängen, geben Sie an, wo das JavaScript ausgeführt werden soll. So können Sie JavaScript ausführen, das mit Anfrage- oder Antwortnachrichten interagiert da diese Nachrichten über den API-Proxy. In diesem Beispiel werden beide JavaScripts in der Methode da die Richtlinien zwei Dinge tun: HTTP-Header in der Antwortnachricht festlegen und „minimize“ (minimieren) Die Antwortnachricht, die Apigee Edge an die anfragende App zurückgibt.

Wenn Sie diese Ablaufkonfiguration in der Verwaltungsbenutzeroberfläche öffnen, sehen Sie die Konfiguration des Ablaufs. unten.

Wählen Sie Proxy-Endpunkte > Standard > PostFlow im Navigator .

Die entsprechende XML-Konfiguration für den ProxyEndpoint mit dem Namen "default" wird angezeigt unten.

<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.

  • &lt;Request&gt;: <Request> besteht aus mehreren &lt;Step&gt; Elemente. Mit jedem Schritt wird eine der Richtlinien aufgerufen, die Sie mithilfe der zu diesem Thema. Diese Richtlinien hängen JavaScript an den API-Proxy-Ablauf an und die Der Richtlinienanhang bestimmt, wann der JavaScript-Code ausgeführt wird.
  • &lt;Response&gt; – <Response> enthält auch <Schritte>. Diese Schritte rufen auch Richtlinien auf, die für die Verarbeitung der Antwort des Ziels (in diesem Beispiel ist es das simulierte Dienstziel von Apigee – beachten Sie HTTPTargetConnection unter /apiproxy/targets/default.xml eingestellt.)
  • &lt;HTTPProxyConnection&gt; gibt den Host und den URI-Pfad an, definieren Sie die Netzwerkadresse, die Apps aufrufen, um diese API zu nutzen.
  • &lt;RouteRule&gt;: Dieses Element gibt an, welcher TargetEndpoint Konfiguration wird vom ProxyEndpoint aufgerufen.

JavaScript-Code zu einem Proxy hinzufügen

JavaScript (wie Python-Skripte, Java-JAR-Dateien, XSLT-Dateien usw.) werden als Ressourcen Wenn Sie gerade erst mit der Arbeit mit JavaScript beginnen, ist es am einfachsten, Ihre JavaScript-Dateien im API-Proxy. Im weiteren Verlauf sollte JavaScript generisch gestaltet und wiederverwendbar und dann auf Umgebungs- oder Organisationsebene gespeichert werden. So vermeiden Sie, dass Sie dieselben JavaScript-Dateien in mehreren API-Proxys speichern müssen, schnell unübersichtlich werden.

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

Jetzt ausprobieren

Eine Anleitung zum Bereitstellen und Aufrufen des Proxys finden Sie in der JavaScript-Cookbook-README.

Importieren und Bereitstellen der API-Proxy

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

Oder führen Sie den folgenden Befehl im Verzeichnis aus: /api-platform-samples/doc-samples/javascript-cookbook

$ sh deploy.sh

JavaScript testen

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

$ sh invoke.sh

Das curl-Flag -v wird im Shell-Skript verwendet, um HTTP-Header in der Antwort anzusehen durch JavaScript geänderte Nachricht.

So kannst du einen Antrag direkt einreichen:

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

Wenn der JavaScript-Code ordnungsgemäß ausgeführt wird, erhalten Sie eine Antwort wie die folgende:

< 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 nun den JavaScript-Code ändern, um neue Dinge auszuprobieren, den API-Proxy erneut bereitzustellen und die Ergebnisse erhalten, indem Sie denselben Antrag einreichen. Achten Sie immer darauf, dass Sie den API-Proxy bereitstellen, der JavaScript-Code, damit die Änderungen wirksam werden.

Skriptfehler

Beim Schreiben von JavaScript werden zwangsläufig Fehler auftreten. Das Format von JavaScript-Fehlern, die von einem API-Proxy ausgegeben wurde, siehe unten.

{  
   "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?

Unter Apigee Edge gibt es in der Regel mehrere Möglichkeiten, bestimmte Funktionen zu implementieren. Verwenden Sie nach Möglichkeit sofort einsatzbereite Richtlinien und vermeiden Sie die Versuchung, Ihren gesamten API-Proxy zu codieren. in JavaScript verwenden. Obwohl Apigee Edge kompiliertes JavaScript nutzt, ist es unwahrscheinlich, dass JavaScript so gut funktioniert wie Richtlinien. JavaScript kann schwieriger zu warten und zu debuggen. Reservieren Sie JavaScript für Funktionen, die nur in Ihrem Anforderungen.

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

Zusammenfassung

In diesem Cookbook haben Sie erfahren, wie JavaScript in einen API-Proxy eingebunden werden kann. um benutzerdefiniertes Verhalten zu implementieren. Das von den Beispielen implementierte benutzerdefinierte Verhalten zeigen, wie Variablen von abgerufen werden, JSON geparst und eine benutzerdefinierte Antwort erstellt wird. Nachrichten.