Richtlinienzusammensetzung verwenden

<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 ein Mashup mit der Erstellung von Richtlinien erstellen. Die Richtlinienzusammensetzung ist ein Apigee-Proxy-Muster, mit dem Sie Ergebnisse aus mehreren Back-Ends kombinieren können mithilfe von Richtlinien in einer einzigen Antwort zusammenfassen.

Einen allgemeinen Überblick über die Richtlinienzusammensetzung finden Sie unter „Das Zusammensetzungsmuster der Richtlinien“. im API-Proxy-Rezept Muster.

Beispielcode herunterladen und ausprobieren

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

Informationen zu diesem Kochbuch-Beispiel

Dieses Cookbook-Beispiel veranschaulicht ein API-Proxy-Muster namens Richtlinienzusammensetzung. Dieses Muster bietet eine Möglichkeit (es gibt noch andere), um Daten aus mehreren Back-End-Quellen zu vermischen. Im Allgemeinen zeigt dieses Thema, wie Richtlinien kombiniert und verkettet werden können, um zu einem gewünschten Ergebnis führen. Einen allgemeinen Überblick über dieses und ähnliche Muster finden Sie unter Anleitung zum API-Proxy Muster.

In dem hier beschriebenen Beispiel wird die Richtlinienzusammensetzung verwendet, um Daten aus diesen beiden separaten öffentlichen APIs:

  • Mit der Geocodierung von Google API: Diese API konvertiert Adressen (z. B. „1600 Amphitheatre Parkway, Mountain View, CA“). in geografische Koordinaten wie den Breitengrad 37.423021 und den Längengrad -122.083739 ein.
  • Die Google Elevation-Funktion API Diese API bietet eine einfache Oberfläche zur Abfrage von Höhenprofilen für Standorte auf der Erde. Daten. In diesem Beispiel werden die von der Geocoding API zurückgegebenen Koordinaten als Eingabe verwendet. in diese API ein.

App-Entwickler rufen diesen API-Proxy mit zwei Suchparametern auf: einer Postleitzahl und einem Land 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 der Mittelpunkt des angegebenen Postleitzahlenbereichs kombiniert mit der Höhe an der geocodierten Standort.

{  
   "ElevationResponse":{  
      "status":"OK",
      "result":{  
         "location":{  
            "lat":"39.7500713",
            "lng":"-74.1357407"
         },
         "elevation":"0.5045232",
         "resolution":"76.3516159"
      }
   }
}

Hinweis

Eine kurze Übersicht über das Zusammensetzungsmuster der Richtlinien findest du unter "Die Richtlinie Zusammensetzungsmuster im API-Proxy-Rezept Muster.

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 API-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 zum Ablauf des API-Proxys hinzugefügt werden.
  • Die Organisation eines API-Proxy-Projekts in Ihrem Dateisystem, wie unter Referenz zur API-Proxy-Konfiguration Dieses Cookbook-Thema veranschaulicht die lokale Entwicklung (Datei). systembasiert) und nicht in der Cloud. Hier können Sie über die Verwaltungsbenutzeroberfläche API-Proxy zu entwickeln.
  • Verwendung der Validierung von API-Schlüsseln. Das ist die einfachste Form der anwendungsbasierten Sicherheit, die Sie für eine API konfigurieren möchten. Weitere Informationen finden Sie unter API Schlüssel. Sie können auch den Abschnitt Secure eine API durch das Anfordern von API-Schlüsseln erstellen.
  • Sie verfügen über XML-Kenntnisse. In diesem Beispiel erstellen wir den API-Proxy mit XML-Dateien, die sich im Dateisystem befinden.

Wenn Sie den Beispielcode heruntergeladen haben, finden Sie alle in diesem Artikel Thema im Beispielordner mashup-policy-cookbook. Die folgenden Abschnitte besprechen wir den Beispielcode.

Immer im Flow

Bevor wir zu den Richtlinien übergehen, sehen wir uns den Hauptablauf unseres Beispiels an. API-Proxy. Die unten abgebildete Fluss-XML-Datei enthält Informationen über diesen Proxy, die Richtlinien, und wo diese Richtlinien aufgerufen werden.

Im Beispieldownload finden Sie diesen XML-Code in der Datei 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 Ablaufelemente.

  • &lt;Request&gt;: <Request> besteht aus mehreren &lt;Step&gt; Elemente. Mit jedem Schritt wird eine der Richtlinien aufgerufen, die wir anhand der restlichen zu diesem Thema. Diese Richtlinien betreffen das Erstellen, Senden und beim Parsen der Antwort. Am Ende dieses Themas wissen Sie, Richtlinien.
  • &lt;Response&gt; – <Response> enthält auch <Schritte>. Diese Schritte rufen auch Richtlinien auf, die für die Verarbeitung der vom Zielendpunkt (Google Elevation API) zurückgegeben.
  • &lt;HttpProxyConnection&gt; – Dieses Element gibt Details über wie Apps eine Verbindung zu diesem API-Proxy herstellen, einschließlich des <BasePath>, der angibt, wird diese API aufgerufen.
  • &lt;RouteRule&gt;: Dieses Element gibt an, was sofort geschieht. nachdem die eingehenden Anfragenachrichten verarbeitet wurden. In diesem Fall wird der TargetEndpoint aufgerufen. Wir werden diesen wichtigen Schritt später in diesem Thema ausführlicher besprechen.

Richtlinien erstellen

In den folgenden Abschnitten werden die einzelnen Richtlinien erläutert, aus denen diese Richtlinienzusammensetzung besteht. Beispiel.

Die ersteAssignMessage erstellen Richtlinie

Die erste AssignMessage-Richtlinie, erstellt, eine Anfragenachricht, die an die Google Geocoding API Service.

Beginnen wir mit dem Richtliniencode und gehen dann näher auf die einzelnen Elemente ein. Im Beispieldownload finden Sie diesen XML-Code in der Datei 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>

Nachfolgend finden Sie eine kurze Beschreibung der Elemente dieser Richtlinie. Weitere Informationen zu diesem Thema in Nachrichtenrichtlinie:

  • <AssignMessage name> – gibt dieser Richtlinie einen Namen. Der Name lautet wird verwendet, wenn in einem Ablauf auf die Richtlinie verwiesen wird.
  • &lt;AssignTo&gt;: Erstellt eine benannte Variable namens „GeocodingRequest“. Diese Variable schließt das Anfrageobjekt ein, das vom ServiceCallout-Richtlinie.
  • &lt;QueryParams&gt;: Legt die Abfrageparameter fest, die von den Back-End-API-Aufrufs. In diesem Fall muss das Geocoding API den Standort kennen, also mit einer Postleitzahl und einer Länder-ID. Der App-Nutzer stellt diese Informationen bereit extrahieren wir sie hier. Der Parameter sensor ist für die API erforderlich und „true“ oder „false“ verwenden, und wir haben es nur mit „false“ hartcodiert.
  • &lt;Verb&gt;: In diesem Fall stellen wir eine einfache GET-Anfrage an die der API erstellen.
  • &lt;AssignVariable&gt; - Diese Variablen speichern die Werte, die wir verwenden. die an die API übergeben werden. In diesem Beispiel wird später in der Antwort auf die Variablen zugegriffen. an den Client zurückgegeben.

Anfrage mit ServiceCallout senden

Im nächsten Schritt der Reihenfolge der Richtlinienzusammensetzung erstellen Sie eine ServiceCallout-Richtlinie. Die Die unten aufgeführte ServiceCallout-Richtlinie sendet das Anfrageobjekt, das wir im an den Google Geocoding-Dienst an und speichert das Ergebnis in einem GeocodingResponse aufgerufen werden.

Wie zuvor schauen wir uns zuerst den Code an. Es folgt eine detaillierte Erklärung. Sie können Folgendes lesen: Weitere Informationen zu dieser Richtlinie finden Sie unter Service Callout. . Im Beispieldownload finden Sie diesen XML-Code in der Datei 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>

Nachfolgend finden Sie eine kurze Beschreibung der Elemente dieser Richtlinie.

  • &lt;ServiceCallout&gt; – Wie die vorherige Richtlinie hat diese Richtlinie Namen.
  • <Anfragevariable> – Variable, die in der Richtlinie „AssignMessage“ zugewiesen. Er kapselt die Anfrage, die an die Back-End-API geht.
  • &lt;Response&gt; - Dieses Element gibt eine Variable an, in der die Antwort gespeichert ist. Wie Sie sehen werden, greift ExtractVariables später auf diese Variable zu. .
  • &lt;HTTPTargetConnection&gt; – Gibt die Ziel-URL des Back-Ends an der API erstellen. In diesem Fall geben wir an, dass die API eine JSON-Antwort zurückgibt.

Jetzt gibt es zwei Richtlinien: In der einen sind die Informationen angegeben, die für die Nutzung des Back-End-API (Geocoding API von Google) und das zweite, das die Anfrage tatsächlich an die Back-End-API. Als Nächstes bearbeiten wir die Antwort.

Parst die Antwort mit ExtractVariables

Die Richtlinie „ExtractVariables“ bietet einen einfachen Mechanismus zum Parsen von Content aus dem Antwortnachricht, die durch eine ServiceCallout-Richtlinie abgerufen wird. ExtractVariables kann verwendet werden, um JSON oder XML oder kann zum Extrahieren von Inhalten aus URI-Pfaden, HTTP-Headern, Abfragen und Formularparametern.

Hier ist eine Liste der ExtractVariables-Richtlinie. Weitere Informationen zu dieser Richtlinie finden Sie unter Variablen extrahieren . Im Beispieldownload finden Sie diesen XML-Code in der Datei 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 Hauptelemente der ExtractVariable-Richtlinie sind:

  • <ExtractVariables name>: Auch hier wird der Richtlinienname dazu verwendet, auf die Richtlinie verweisen, wenn sie in einem Ablauf verwendet wird.
  • &lt;Source&gt;: Gibt die Antwortvariable an, die in erstellt wurde. ServiceCallout-Richtlinie. Dies ist die Variable, aus der diese Richtlinie Daten extrahiert.
  • &lt;VariablePrefix&gt; - Das Variablenpräfix gibt einen Namespace für anderen in dieser Richtlinie erstellten Variablen. Das Präfix kann ein beliebiger Name sein, mit Ausnahme des reservierten Namen definiert durch Edges vordefinierte Variablen.
  • &lt;JSONPayload&gt; – Dieses Element ruft die Antwortdaten ab, die und fügt sie in benannte Variablen ein. Tatsächlich gibt die Geocoding API viel zurück, mehr Informationen als Längen- und Breitengrad. Dies sind jedoch die einzigen Werte, die wir benötigen, für dieses Beispiel. Sie können sich ein vollständiges Rendering des von der Geocoding API zurückgegebenen JSON-Objekts ansehen. in den APIs Dokumentation. Die Werte von Geocoding.location.lat und Neugeometrie.location.lng sind einfach zwei der vielen Felder im zurückgegebenen JSON-Objekt.

Es ist vielleicht nicht offensichtlich, aber es ist wichtig zu sehen, dass ExtractVariables Variablen, deren Namen aus dem Variablenpräfix (georesponse) und dem tatsächlichen Variablennamen, die in der Richtlinie angegeben sind. Diese Variablen werden im API-Proxy verwenden und für andere Richtlinien innerhalb des Proxy-Ablaufs verfügbar sein, wie Sie sehen. Die Variablen sind:

  • geocoderesponse.latitude
  • geocoderesponse.longitude

Der Großteil der Arbeit ist jetzt erledigt. Wir haben drei Richtlinien erstellt, die eine -Anfrage, rufen Sie eine Back-End-API auf und parsen Sie die zurückgegebenen JSON-Daten. In den letzten Schritten Daten aus diesem Teil des Ablaufs in eine andereAssignMessage-Richtlinie übertragen, rufen Sie das zweite Back-End auf API (Google Elevation API) zurück und senden die verpackten Daten an den App-Entwickler.

Die zweite generieren Anfrage mitAssignMessage

Die folgendeAssignMessage-Richtlinie verwendet Variablen, die vom ersten Back-End (Google Geocoding) erstellt und in eine Anfrage für die zweite API (Google Höhe). Wie bereits erwähnt, sind diese Variablen georesponse.latitude und geocoderesponse.longitude.

Im Beispieldownload finden Sie diesen XML-Code in der Datei 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 das Google Elevation API untersuchen, werden Sie feststellen, dass zwei Suchparameter erforderlich sind. Die erste heißt locations und ihr Wert ist der Breiten- und Längengrad. (kommagetrennte Werte). Der andere Parameter ist sensor, der erforderlich ist und entweder wahr oder falsch sein. Das Wichtigste an dieser Stelle ist, dass die Anforderung erstellt wird, ist kein ServiceCallout erforderlich. Wir müssen nicht die zweite API aus einem ServiceCallout heraus, da wir die Back-End API über die Proxy- TargetEndpoint. Wenn Sie darüber nachdenken, verfügen wir über alle Daten, die wir für Google Elevations benötigen. API Die in diesem Schritt generierte Anfragenachricht erfordert kein ServiceCallout, da die -Anfrage generiert, die für die Hauptanfrage-Pipeline generiert wurde, und daher einfach vom ProxyEndpoint zum TargetEndpoint, gemäß der für diesen API-Proxy konfigurierten RouteRule. Der TargetEndpoint verwaltet die Verbindung mit der Remote-API. (Die URL für die Die Elevation API wird in der HTTPConnection für den TargetEndpoint definiert. Elevation API Dokumentation, wenn Sie mehr erfahren möchten. Mit den zuvor gespeicherten QueryParams country und postalcode werden nicht mehr benötigt, daher entfernen wir sie hier.

Kurze Pause: Zurück zum Ablauf

Sie fragen sich jetzt vielleicht, warum wir keine weitere ServiceCallout-Richtlinie erstellen. Nachher haben wir eine weitere Nachricht erstellt. Wie wird diese Nachricht an das Ziel, die Google Elevation API? Die Antwort befindet sich in der <RouteRule> -Element des Ablaufs. &lt;RouteRule&gt; gibt an, was mit allen verbleibenden Anfragenachrichten nach der Anfrage <Request> geschehen soll. Teil von der Ablauf ausgeführt wurde. Der in dieser <RouteRule> angegebene TargetEndpoint teilt dem API-Proxy zum Senden der Nachricht an http://maps.googleapis.com/maps/api/elevation/xml.

Wenn Sie den Beispiel-API-Proxy heruntergeladen haben, finden Sie die TargetProxy-XML in der Datei 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 des Google Elevation APIs verarbeiten fertig.

Konvertieren Sie die Antwort von XML in JSON

In diesem Beispiel wird die Antwort des Google Elevation APIs im XML-Format zurückgegeben. Für „zusätzliche Guthaben“, fügen wir unserem zusammengesetzten Modell eine weitere Richtlinie hinzu, um die Antwort von XML in JSON

In diesem Beispiel wird die JavaScript-Richtlinie „GenerateResponse“ mit einer Ressourcendatei verwendet. der den JavaScript-Code enthält, um die Konvertierung durchzuführen. Unten sehen Sie der GenerateResponse-Richtliniendefinition:

<Javascript name="GenerateResponse" timeout="10000">
  <ResourceURL>jsc://GenerateResponse.js</ResourceURL>
</Javascript>

Die Ressourcendatei GenerateResponse.js enthält den JavaScript-Code, der für die Ausführung der Conversion. Sie sehen diesen Code in der Datei doc-samples/policy-mashup-cookbook/apiproxy/resources/JSC/GenerateResponse.js.

Apigee bietet auch eine vorkonfigurierte Richtlinie, XMLToJSON, zum Konvertieren von XML in JSON. Sie können Bearbeiten Sie den ProxyEndpoint, um die unten gezeigte Richtlinie xmltojson zu verwenden .

<XMLToJSON name="xmltojson">
  <Options>
  </Options>
  <OutputVariable>response</OutputVariable>
  <Source>response</Source>
</XMLToJSON>

Beispiel testen

Laden Sie die Datei herunter, stellen Sie sie bereit und führen Sie sie aus. policy-mashup-cookbook, das Sie im Ordner doc-Beispiele im Beispiel-Repository von Apigee Edge auf GitHub finden. Nur Folgen Sie der Anleitung in der README-Datei im Ordner „policy-mashup-cookbook“. Oder folgen Sie dieser kurzen Anleitung: Mit die Beispiel-API-Proxys.

Zusammenfassend lässt sich die zusammengesetzte API so aufrufen. Ersetzen Sie {myorg} durch Ihren Name der Organisation:

$ curl "http://{myorg}-test.apigee.net/policy-mashup-cookbook?country=us&postalcode=08008"

Die Antwort enthält die geocodierte Position in der Mitte der Postleitzahl, die von den Endnutzer der App, kombiniert mit der Höhe dieses geocodierten Standorts. Die Daten waren die von zwei Back-End-APIs abgerufen und mit Richtlinien verknüpft sind, die an den API-Proxy angehängt sind, und die in einer einzigen Antwort an den Client zurückgegeben werden.

{  
   "country":"us",
   "postalcode":"08008",
   "elevation":{  
      "meters":0.5045232,
      "feet":1.6552599030345978
   },
   "location":{  
      "latitude":39.75007129999999,
      "longitude":-74.1357407
   }
}

Zusammenfassung

In diesem Kochbuch-Thema wurde erklärt, wie du mithilfe des Musters zum Zusammensetzen der Richtlinien ein Mashup erstellen kannst. von Daten aus mehreren Back-End-Quellen. Die Richtlinienzusammensetzung ist ein gängiges Muster in der API. Proxy-Entwicklung zum Hinzufügen von Creative-Funktionen zu Ihrer API.