Sie lesen gerade die Dokumentation zu Apigee Edge.
Zur Dokumentation zu
Apigee X. info
In diesem Thema erfahren Sie, wie Sie mit der Richtlinienkomposition ein Mashup erstellen. Die Richtlinienkomposition ist ein Apigee-Proxy-Muster, mit dem Sie mithilfe von Richtlinien Ergebnisse aus mehreren Back-End Zielen in einer einzigen Antwort kombinieren können.
Eine allgemeine Übersicht über die Richtlinienkomposition finden Sie unter "Das Muster der Richtlinienkomposition" in API-Proxy-Cookbook Muster.
Beispielcode herunterladen und ausprobieren
Informationen zu diesem Cookbook-Beispiel
Dieses Cookbook-Beispiel veranschaulicht ein API-Proxy-Muster namens Richtlinienkomposition. Dieses Muster bietet eine Möglichkeit (es gibt auch andere), Daten aus mehreren Back-End-Quellen zu kombinieren. Allgemeiner gesagt zeigt dieses Thema, wie Richtlinien kombiniert und miteinander verknüpft werden können, um ein gewünschtes Ergebnis zu erzielen. Eine allgemeine Übersicht über dieses und andere verwandte Muster finden Sie unter API-Proxy-Cookbook Muster.
Im hier besprochenen Beispiel werden Daten aus diesen beiden separaten öffentlichen APIs mithilfe der Richtlinienkomposition kombiniert:
- Google Geocoding API: Diese API konvertiert Adressen wie „1600 Amphitheatre Parkway, Mountain View, CA, USA“ in geografische Koordinaten (Breitengrad 37.423021 und Längengrad -122.083739).
- Google Elevation API: Diese API bietet eine einfache Schnittstelle, über die Höhendaten für Standorte auf der Erde abgefragt werden können. In diesem Beispiel werden die von der Geocoding API zurückgegebenen Koordinaten als Eingabe für diese API verwendet.

App-Entwickler rufen diesen API-Proxy mit zwei Abfrageparametern auf: einer Postleitzahl und einer Länder ID:
$ curl "http://{myorg}-test.apigee.net/policy-mashup-cookbook?country=us&postalcode=08008"
Die Antwort ist ein JSON-Objekt, das den geocodierten Standort (Breiten-/Längengrad) für das Zentrum des angegebenen Postleitzahlbereichs in Kombination mit der Höhe an diesem geocodierten Standort enthält.
{
"ElevationResponse":{
"status":"OK",
"result":{
"location":{
"lat":"39.7500713",
"lng":"-74.1357407"
},
"elevation":"0.5045232",
"resolution":"76.3516159"
}
}
}Hinweis
Eine kurze Übersicht über das Muster der Richtlinienkomposition finden Sie unter „Das Muster der Richtlinien komposition“ in API-Proxy-Cookbook Muster.
Bevor Sie sich dieses Cookbook-Beispiel ansehen, sollten Sie auch mit den folgenden grundlegenden Konzepten vertraut sein:
- Was Richtlinien sind und wie Sie sie an Proxys anhängen. Eine gute Einführung in Richtlinien finden Sie unter Was sind Richtlinien?.
- Die Struktur eines API-Proxy-Ablaufs, 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 dem Ablauf des API-Proxys hinzugefügt.
- Wie ein API-Proxy-Projekt in Ihrem Dateisystem organisiert ist, wie unter Referenz zur API-Proxy-Konfiguration erläutert. In diesem Cookbook-Thema wird die lokale Entwicklung (dateisystembasiert) im Gegensatz zur cloudbasierten Entwicklung beschrieben, bei der Sie die Management-UI verwenden könnten, um den API-Proxy zu entwickeln.
- Verwendung der API-Schlüsselvalidierung. Dies ist die einfachste Form der anwendungsbasierten Sicherheit, die Sie konfigurieren können. Weitere Informationen finden Sie unter API Schlüssel. Sie können auch die Anleitung API durch Anfordern von API-Schlüsseln sichern durcharbeiten.
- Grundkenntnisse in XML. In diesem Beispiel erstellen wir 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 besprochenen Dateien im mashup-policy-cookbook Beispielordner. In den folgenden Abschnitten wird der Beispielcode im Detail erläutert.
Mit dem Strom schwimmend
Bevor wir uns den Richtlinien zuwenden, sehen wir uns den Hauptablauf unseres Beispiel API-Proxys an. Die unten gezeigte XML-Datei für den Ablauf enthält viele Informationen zu diesem Proxy, den verwendeten Richtlinien und den Stellen, an denen diese Richtlinien aufgerufen werden.
In der Beispiel-Download finden Sie diese XML-Datei unter
doc-samples/policy-mashup-cookbook/apiproxy/proxies/default.xml.
<ProxyEndpoint name="default"> <Flows> <Flow name="default"> <Request> <!-- Generate request message for the Google Geocoding API --> <Step><Name>GenerateGeocodingRequest</Name></Step> <!-- Call the Google Geocoding API --> <Step><Name>ExecuteGeocodingRequest</Name></Step> <!-- Parse the response and set variables --> <Step><Name>ParseGeocodingResponse</Name></Step> <!-- Generate request message for the Google Elevation API --> <Step><Name>AssignElevationParameters</Name></Step> </Request> <Response> <!-- Parse the response message from the Elevation API --> <Step><Name>ParseElevationResponse</Name></Step> <!-- Generate the final JSON-formatted response with JavaScript --> <Step><Name>GenerateResponse</Name></Step> </Response> </Flow> </Flows> <HTTPProxyConnection> <!-- Add a base path to the ProxyEndpoint for URI pattern matching--> <BasePath>/policy-mashup-cookbook</BasePath> <!-- Listen on both HTTP and HTTPS endpoints --> <VirtualHost>default</VirtualHost> <VirtualHost>secure</VirtualHost> </HTTPProxyConnection> <RouteRule name="default"> <!-- Connect ProxyEndpoint to named TargetEndpoint under /targets --> <TargetEndpoint>default</TargetEndpoint> </RouteRule> </ProxyEndpoint>
Hier ist eine Zusammenfassung der Elemente des Ablaufs.
- <Request> : Das Element <Request> besteht aus mehreren <Step>-Elementen. In jedem Schritt wird eine der Richtlinien aufgerufen, die wir im Rest dieses Themas erstellen. Diese Richtlinien dienen zum Erstellen einer Anfragenachricht, zum Senden und zum Parsen der Antwort. Am Ende dieses Themas werden Sie die Rolle jeder dieser Richtlinien verstehen.
- <Response> – Das Element <Response> enthält auch <Steps>. In diesen Schritten werden auch Richtlinien aufgerufen, die für die Verarbeitung der endgültigen Antwort vom Zielendpunkt (der Google Elevation API) zuständig sind.
- <HttpProxyConnection> : Dieses Element enthält Details dazu, wie Anwendungen eine Verbindung zu diesem API-Proxy herstellen, einschließlich <BasePath>, das angibt, wie diese API aufgerufen wird.
- <RouteRule> : Dieses Element gibt an, was unmittelbar nach der Verarbeitung der eingehenden Anfragenachrichten geschieht. In diesem Fall wird der TargetEndpoint aufgerufen. Wir werden diesen wichtigen Schritt später in diesem Thema genauer erläutern.
Richtlinien erstellen
In den folgenden Abschnitten werden die einzelnen Richtlinien beschrieben, aus denen dieses Beispiel für die Richtlinienkomposition besteht.
Erste AssignMessage Richtlinie erstellen
Die erste AssignMessage-Richtlinie, die unten aufgeführt ist, erstellt eine Anfragenachricht, die an den Google Geocoding -Dienst gesendet wird.

Beginnen wir mit dem Richtliniencode und erläutern dann die Elemente genauer. In der
Beispiel-Download finden Sie diese XML-Datei unter
doc-samples/policy-mashup-cookbook/apiproxy/policies/GenerateGeocodingRequest.xml.
<AssignMessage name="GenerateGeocodingRequest"> <AssignTo createNew="true" type="request">GeocodingRequest</AssignTo> <Set> <QueryParams> <QueryParam name="address">{request.queryparam.postalcode}</QueryParam> <QueryParam name="region">{request.queryparam.country}</QueryParam> <QueryParam name="sensor">false</QueryParam> </QueryParams> <Verb>GET</Verb> </Set> <!-- Set variables for use in the final response --> <AssignVariable> <Name>PostalCode</Name> <Ref>request.queryparam.postalcode</Ref> </AssignVariable> <AssignVariable> <Name>Country</Name> <Ref>request.queryparam.country</Ref> </AssignVariable> </AssignMessage>
Hier ist eine kurze Beschreibung der Elemente in dieser Richtlinie. Weitere Informationen zu dieser Richtlinie finden Sie unter Assign Message policy.
- <AssignMessage name> : Gibt dieser Richtlinie einen Namen. Der Name wird verwendet, wenn in einem Ablauf auf die Richtlinie verwiesen wird.
- <AssignTo> : Erstellt eine benannte Variable namens „GeocodingRequest“. Diese Variable kapselt das Anfrageobjekt, das von der ServiceCallout-Richtlinie an das Back-End gesendet wird.
- <QueryParams> : Legt die Abfrageparameter fest, die für den
Back-End-API-Aufruf erforderlich sind. In diesem Fall muss die Geocoding API den Standort kennen, der mit einer Postleitzahl und einer Länder-ID angegeben wird. Der App-Nutzer gibt diese Informationen an und
wir extrahieren sie hier einfach. Der
sensorParameter ist für die API erforderlich und ist entweder „true“ oder „false“. Wir codieren ihn hier einfach als „false“. - <Verb> : In diesem Fall senden wir eine einfache GET-Anfrage an die API.
- <AssignVariable> : In diesen Variablen werden die Werte gespeichert, die wir an die API übergeben. In diesem Beispiel werden die Variablen später in der Antwort verwendet, die an den Client zurückgegeben wird.
Anfrage mit ServiceCallout senden
Der nächste Schritt in der Richtlinienkompositionssequenz ist das Erstellen einer ServiceCallout-Richtlinie. Die unten aufgeführte ServiceCallout-Richtlinie sendet das Anfrageobjekt, das wir in der vorherigen AssignMessage-Richtlinie erstellt haben, an den Google Geocoding-Dienst und speichert das Ergebnis in einer Variablen namens „GeocodingResponse“.

Wie zuvor sehen wir uns zuerst den Code an. Danach folgt eine detaillierte Erklärung. Weitere Informationen zu dieser Richtlinie finden Sie unter Service Callout
policy. In der Beispiel-Download finden Sie diese XML-Datei unter
doc-samples/policy-mashup-cookbook/apiproxy/policies/ExecuteGeocodingRequest.xml.
<ServiceCallout name="ExecuteGeocodingRequest"> <Request variable="GeocodingRequest"/> <Response>GeocodingResponse</Response> <HTTPTargetConnection> <URL>http://maps.googleapis.com/maps/api/geocode/json</URL> </HTTPTargetConnection> </ServiceCallout>
Hier ist eine kurze Beschreibung der Elemente dieser Richtlinie.
- <ServiceCallout> : Wie bei der vorherigen Richtlinie hat auch diese einen Namen.
- <Request variable> : Dies ist die Variable, die in der AssignMessage-Richtlinie erstellt wurde. Sie kapselt die Anfrage an die Back-End-API.
- <Response> : Dieses Element gibt eine Variable an, in der die Antwort gespeichert wird. Wie Sie sehen, wird später von der ExtractVariables Richtlinie auf diese Variable zugegriffen.
- <HTTPTargetConnection> : Gibt die Ziel-URL der Back-End API an. In diesem Fall geben wir an, dass die API eine JSON-Antwort zurückgeben soll.
Jetzt haben wir zwei Richtlinien: eine, die die Anfragedaten angibt, die für die Verwendung der Back-End-API (Google Geocoding API) erforderlich sind, und eine zweite, die die Anfrage tatsächlich an die Back-End-API sendet. Als Nächstes verarbeiten wir die Antwort.
Antwort mit ExtractVariables parsen
Die Richtlinie ExtractVariables bietet einen einfachen Mechanismus zum Parsen von Inhalten aus der Antwortnachricht, die von einer ServiceCallout-Richtlinie abgerufen wurde. ExtractVariables kann zum Parsen von JSON oder XML oder zum Extrahieren von Inhalten aus URI-Pfaden, HTTP-Headern, Abfrage Parametern und Formularparametern verwendet werden.

Hier ist eine Auflistung der ExtractVariables-Richtlinie. Weitere Informationen zu dieser Richtlinie finden Sie unter
Richtlinie zum Extrahieren von Variablen. In der Beispiel-Download finden Sie diese XML-Datei unter
doc-samples/policy-mashup-cookbook/apiproxy/policies/ParseGeocodingResponse.xml.
<ExtractVariables name="ParseGeocodingResponse"> <Source>GeocodingResponse</Source> <VariablePrefix>geocoderesponse</VariablePrefix> <JSONPayload> <Variable name="latitude"> <JSONPath>$.results[0].geometry.location.lat</JSONPath> </Variable> <Variable name="longitude"> <JSONPath>$.results[0].geometry.location.lng</JSONPath> </Variable> </JSONPayload> </ExtractVariables>
Die wichtigsten Elemente der ExtractVariables-Richtlinie sind:
- <ExtractVariables name> : Auch hier wird der Richtlinienname verwendet, um auf die Richtlinie zu verweisen, wenn sie in einem Ablauf verwendet wird.
- <Source> : Gibt die Antwortvariable an, die wir in der ServiceCallout-Richtlinie erstellt haben. Aus dieser Variablen werden Daten von dieser Richtlinie extrahiert.
- <VariablePrefix> : Das Variablenpräfix gibt einen Namespace für andere Variablen an, die in dieser Richtlinie erstellt wurden. Das Präfix kann ein beliebiger Name sein, mit Ausnahme der reservierten Namen, die durch die vordefinierten Variablen von Edge definiert werden.
- <JSONPayload> : Dieses Element ruft die Antwortdaten ab, die für uns von Interesse sind, und fügt sie in benannte Variablen ein. Tatsächlich gibt die Geocoding API viel mehr Informationen als nur Breiten- und Längengrad zurück. Diese Werte sind jedoch die einzigen, die wir für dieses Beispiel benötigen. Eine vollständige Darstellung des von der Geocoding API zurückgegebenen JSON finden Sie in der Dokumentation der API. Die Werte von „geometry.location.lat“ und „geometry.location.lng“ sind einfach zwei der vielen Felder im zurückgegebenen JSON-Objekt.
Es ist vielleicht nicht offensichtlich, aber es ist wichtig zu wissen, dass ExtractVariables zwei Variablen erzeugt, deren Namen aus dem Variablenpräfix (geocoderesponse) und den tatsächlichen Variablennamen bestehen, die in der Richtlinie angegeben sind. Diese Variablen werden im API-Proxy gespeichert und sind für andere Richtlinien im Proxyablauf verfügbar, wie Sie sehen werden. Die Variablen sind:
- geocoderesponse.latitude
- geocoderesponse.longitude
Die meiste Arbeit ist jetzt erledigt. Wir haben eine Komposition aus drei Richtlinien erstellt, die eine Anfrage bilden, eine Back-End-API aufrufen und die zurückgegebenen JSON-Daten parsen. In den letzten Schritten werden wir Daten aus diesem Teil des Ablaufs in eine weitere AssignMessage-Richtlinie einfügen, die zweite Back-End- API (Google Elevation API) aufrufen und unsere kombinierten Daten an den App-Entwickler zurückgeben.
Zweite Anfrage mit AssignMessage generieren
Die folgende AssignMessage-Richtlinie verwendet Variablen, die vom ersten Back-End (Google Geocoding) zurückgegeben und von uns gespeichert wurden, und fügt sie in eine Anfrage ein, die für die zweite API (Google Elevation) bestimmt ist. Wie bereits erwähnt, sind diese Variablen „geocoderesponse.latitude“ und „geocoderesponse.longitude“.
In der Beispiel-Download finden Sie diese XML-Datei unter
doc-samples/policy-mashup-cookbook/apiproxy/policies/AssignElevationParameters.xml.
<AssignMessage name="AssignElevationParameters">
<Remove>
<QueryParams>
<QueryParam name="country"/>
<QueryParam name="postalcode"/>
</QueryParams>
</Remove>
<Set>
<QueryParams>
<QueryParam name="locations">{geocoderesponse.latitude},{geocoderesponse.longitude}</QueryParam>
<QueryParam name="sensor">false</QueryParam>
</QueryParams>
</Set>
</AssignMessage>Wenn Sie sich die Google Elevation API ansehen, werden Sie feststellen, dass sie zwei Abfrageparameter akzeptiert.
Der erste heißt locations und sein Wert ist der Breiten- und Längengrad
(durch Kommas getrennte Werte). Der andere Parameter ist sensor, der erforderlich ist und entweder „true“ oder „false“ sein muss. Das Wichtigste an dieser Stelle ist, dass für die hier erstellte Anfragenachricht
keine ServiceCallout-Richtlinie erforderlich ist. Wir müssen die zweite
API an dieser Stelle nicht über eine ServiceCallout-Richtlinie aufrufen, da wir die Back-End-API über den TargetEndpoint des Proxys
aufrufen können. Wenn Sie darüber nachdenken, haben wir alle Daten, die wir zum Aufrufen der Google Elevation
API benötigen. Für die in diesem Schritt generierte Anfragenachricht ist keine ServiceCallout-Richtlinie erforderlich, da die
Anfrage für die Hauptanfragepipeline generiert wurde und daher einfach vom
ProxyEndpoint an den TargetEndpoint weitergeleitet wird, gemäß der für diesen API-Proxy konfigurierten RouteRule.
Der TargetEndpoint verwaltet die Verbindung mit der Remote API. Die URL für die
Elevation API ist in der HTTPConnection für den TargetEndpoint definiert. Dokumentation zur Elevation API
Die zuvor gespeicherten QueryParams
country und postalcode werden nicht mehr benötigt und daher hier entfernt.
Kurze Pause: Zurück zum Ablauf
An dieser Stelle fragen Sie sich vielleicht, warum wir keine weitere ServiceCallout-Richtlinie erstellen. Wir haben schließlich eine weitere Nachricht erstellt. Wie wird diese Nachricht an das Ziel, die Google
Elevation API, gesendet? Die Antwort finden Sie im Element <RouteRule> des Ablaufs. <RouteRule>
gibt an, was mit allen verbleibenden Anfragenachrichten geschehen soll, nachdem der Teil <Request> von
dem Ablauf ausgeführt wurde. Der von dieser <RouteRule> angegebene TargetEndpoint weist den
API-Proxy an, die Nachricht
an http://maps.googleapis.com/maps/api/elevation/xml zu senden.
Wenn Sie den Beispiel-API-Proxy heruntergeladen haben, finden Sie die TargetProxy-XML-Datei unter
doc-samples/policy-mashup-cookbook/apiproxy/targets/default.xml.
<TargetEndpoint name="default"> <HTTPTargetConnection> <!-- This is where we define the target. For this sample we just use a simple URL. --> <URL>http://maps.googleapis.com/maps/api/elevation/xml</URL> </HTTPTargetConnection> </TargetEndpoint>
Jetzt müssen wir nur noch die Antwort von der Google Elevation API verarbeiten und sind fertig.
Antwort von XML in JSON konvertieren
In diesem Beispiel wird die Antwort von der Google Elevation API als XML zurückgegeben. Für eine zusätzliche Herausforderung fügen wir unserer Komposition eine weitere Richtlinie hinzu, um die Antwort von XML in JSON zu konvertieren.
In diesem Beispiel wird die JavaScript-Richtlinie namens „GenerateResponse“ mit einer Ressourcendatei verwendet, die den JavaScript-Code für die Konvertierung enthält. Unten sehen Sie die Definition der GenerateResponse-Richtlinie:
<Javascript name="GenerateResponse" timeout="10000"> <ResourceURL>jsc://GenerateResponse.js</ResourceURL> </Javascript>
Die Ressourcendatei „GenerateResponse.js“ enthält das JavaScript, das für die
Konvertierung verwendet wird. Sie finden diesen Code in der
Datei doc-samples/policy-mashup-cookbook/apiproxy/resources/JSC/GenerateResponse.js.
Apigee bietet auch eine sofort einsatzbereite Richtlinie, XMLToJSON, zum Konvertieren von XML in JSON. Sie können
den ProxyEndpoint bearbeiten, um stattdessen die unten gezeigte Richtlinie xmltojson zu verwenden.
<XMLToJSON name="xmltojson"> <Options> </Options> <OutputVariable>response</OutputVariable> <Source>response</Source> </XMLToJSON>
Beispiel testen
Wenn Sie es noch nicht getan haben, laden Sie das Beispiel policy-mashup-cookbook herunter, stellen Sie es bereit und führen Sie es aus. Sie finden es im Ordner „doc-samples“ im Apigee Edge-Beispiel-Repository auf GitHub. Folgen Sie einfach der Anleitung in der README-Datei im Ordner „policy-mashup-cookbook“. Oder, folgen Sie der kurzen Anleitung hier: Beispiel-API-Proxys verwenden.
Zusammenfassend lässt sich sagen, dass Sie die zusammengesetzte API so aufrufen können. Ersetzen Sie dabei „{myorg}“ durch den Namen Ihrer Organisation:
$ curl "http://{myorg}-test.apigee.net/policy-mashup-cookbook?country=us&postalcode=08008"
Die Antwort enthält den geocodierten Standort für das Zentrum der vom App-Endnutzer angegebenen Postleitzahl in Kombination mit der Höhe an diesem geocodierten Standort. Die Daten wurden aus zwei Back-End-APIs abgerufen, mit Richtlinien kombiniert, die an den API-Proxy angehängt wurden, und in einer einzigen Antwort an den Client zurückgegeben.
{ "country":"us", "postalcode":"08008", "elevation":{ "meters":0.5045232, "feet":1.6552599030345978 }, "location":{ "latitude":39.75007129999999, "longitude":-74.1357407 } }
Zusammenfassung
In diesem Cookbook-Thema wurde erläutert, wie Sie mit dem Muster der Richtlinienkomposition ein Mashup aus Daten aus mehreren Back-End-Quellen erstellen. Die Richtlinienkomposition ist ein gängiges Muster, das bei der API Proxy-Entwicklung verwendet wird, um Ihrer API kreative Funktionen hinzuzufügen.