Korzystanie z kompozycji zasad

Przeglądasz dokumentację Apigee Edge.
Przejdź do Dokumentacja Apigee X.
informacje.

Z tej części dowiesz się, jak utworzyć mashup za pomocą kompozycji zasad. Tworzenie zasad to wzorzec serwera proxy Apigee, który umożliwia łączenie wyników z wielu backendów są kierowane w pojedynczą odpowiedź za pomocą zasad.

Ogólne omówienie struktury zasad znajdziesz w sekcji „Wzorzec kompozycji zasad” w książce API Proxy Cookbook .

Pobierz i wypróbuj przykładowy kod

Informacje o tej książce kucharskiej

Ten przykład książki kucharskiej pokazuje wzorzec serwera proxy API o nazwie kompozycja zasad. Ten wzorzec zapewnia jeden sposób (są też inne) do łączenia danych z wielu źródeł backendu. Mówiąc ogólniej, ten temat przedstawia, w jaki sposób można łączyć zasady da pożądany efekt. Ogólne omówienie tego i podobnych wzorców znajdziesz w Poradnik korzystania z serwera proxy interfejsu API .

Omówiony tu przykład wykorzystuje strukturę zasad do połączenia danych z tych 2 osobnych publiczne interfejsy API:

  • Geokodowanie w Google API: ten interfejs API konwertuje adresy (np. „1600 Amphitheatre Parkway, Mountain View, CA”). pod kątem współrzędnych geograficznych (np.szerokość geograficzna 37,423021 i długość geograficzna -122.083739).
  • Zalety Google API Ten interfejs API zapewnia prosty interfejs do zapytań o lokalizacje na Ziemi w celu sprawdzenia wysokości n.p.m. i skalowalnych danych. W tym przykładzie jako dane wejściowe zostaną użyte współrzędne zwrócone z interfejsu Geocoding API do tego interfejsu API.

Deweloperzy aplikacji będą wywoływać ten serwer proxy interfejsu API z 2 parametrami zapytania: kodem pocztowym i krajem Identyfikator:

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

Odpowiedź to obiekt JSON zawierający geograficzną lokalizację (szerokość/długość geograficzną) dla środek obszaru o określonym kodzie pocztowym połączony z wysokością obszaru objętego kodem pocztowym, lokalizacji.

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

Zanim zaczniesz

Krótkie omówienie wzorca struktury zasad znajdziesz w sekcji „Zasady wzorca kompozycji w książce API Proxy Cookbook .

Zanim zapoznasz się z przykładem książki kucharskiej, zapoznaj się z podstawowymi koncepcje:

  • Czym są zasady i jak dołączyć je do serwerów proxy. Kilka słów na temat zasad: zapoznaj się z sekcją Co to jest ?
  • Struktura procesu serwera proxy interfejsu API zgodnie z opisem w artykule Konfigurowanie przepływów. Dzięki przepływom określają sekwencję, w jakiej zasady są wykonywane przez serwer proxy interfejsu API. W tym przykładzie kilka zasady są tworzone i dodawane do procesu serwera proxy interfejsu API.
  • Organizacja serwera proxy interfejsu API w systemie plików, zgodnie z opisem na stronie Dokumentacja konfiguracji serwera proxy interfejsu API Ta książka kucharska przedstawia rozwój lokalny (plik na systemowym), a nie w chmurze, gdzie można używać interfejsu zarządzania do zaprojektowanie serwera proxy API.
  • Użycie walidacji klucza interfejsu API. To najprostsza forma zabezpieczeń aplikacji, skonfigurować dla interfejsu API. Więcej informacji można znaleźć w sekcji Interfejs API . Możesz też przejść przez sekcję Bezpieczne API, wymagając kluczy API.
  • Praktyczna znajomość języka XML. W tym przykładzie stworzyliśmy serwer proxy interfejsu API oraz jego zasadami dotyczącymi plików XML znajdujących się w systemie plików.

Jeśli masz pobrany przykładowy kod, możesz znaleźć wszystkie pliki omówione w tej w przykładowym folderze mashup-policy-cookbook. W poniższych sekcjach szczegółowo omówić przykładowy kod.

Płynę z prądem

Zanim przejdziemy do zasad, przyjrzyjmy się głównemu procesowi w naszym przykładzie. Proxy API. Pokazany poniżej kod XML przepływu mówi nam wiele o tym serwerze proxy, ich zastosowania i miejsca ich wywoływania.

W przykładowym pliku do pobrania znajdziesz ten kod XML w pliku 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>

Oto podsumowanie elementów przepływu.

  • &lt;Request&gt; – obiekt <Request> element składa się z kilku elementów. &lt;Step&gt; . W każdym kroku powstaje jedna z zasad, które utworzymy przy użyciu pozostałych na ten temat. Te zasady dotyczą tworzenia i wysyłania wiadomości z prośbą podczas analizowania odpowiedzi. Po ukończeniu tego tematu omówimy rolę .
  • &lt;Response&gt; – <Response> element zawiera również <Kroki>. Te kroki wywołują również zasady odpowiedzialne za przetwarzanie ostatecznej wersji odpowiedź z docelowego punktu końcowego (interfejs Google Elevation API).
  • &lt;HttpProxyConnection&gt; – ten element określa szczegóły na temat: jak aplikacje będą łączyć się z tym serwerem proxy interfejsu API, w tym ścieżkę <BasePath>, która określa, jak ten interfejs API jest wywoływany.
  • &lt;RouteRule&gt; – ten element określa, co stanie się natychmiast. po przetworzeniu wiadomości z żądaniami przychodzących. W tym przypadku wywoływany jest element TargetEndpoint. W dalszej części tego tematu poruszymy ten ważny krok bardziej szczegółowo.

Tworzenie zasad

W kolejnych sekcjach omawiamy wszystkie zasady składające się na tę strukturę zasad przykład.

Tworzenie pierwszej funkcji AssignMessage polityka

pierwszą zasadę AssignMessage, tworzy komunikat z żądaniem, który zostanie wysłany do zespołu posprzedażna.

Zacznijmy od kodu zasad, a potem bardziej szczegółowo omówimy jego elementy. W przykładowy plik do pobrania znajdziesz w pliku XML 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>

Oto krótki opis elementów tych zasad. Więcej informacji znajdziesz zasady w sekcji Przypisz Zasady dotyczące wiadomości.

  • <AssignMessage name> – nadaje tej zasadzie nazwę. Nazwa to używana, gdy do zasady odwołuje się przepływ.
  • &lt;AssignTo&gt; – tworzy zmienną nazwaną o nazwie GeocodingRequest. Ta zmienna zawiera obiekt żądania, który zostanie wysłany do backendu przez Zasady dotyczące wywołań usługi.
  • &lt;QueryParams&gt; – ustawia parametry zapytania wymagane przez wywołanie interfejsu API backendu. W tym przypadku interfejs Geocoding API musi znać lokalizację, która jest wyrażony za pomocą kodu pocztowego oraz identyfikatora kraju. użytkownik aplikacji poda te informacje, po prostu wyodrębnimy go tutaj. Parametr sensor jest wymagany przez interfejs API. czyli prawda lub fałsz, i zakodujemy go na stałe jako fałsz.
  • &lt;Verb&gt; – w tym przypadku wysyłamy proste żądanie GET do funkcji API.
  • &lt;AssignVariable&gt; – te zmienne przechowują wartości i przekazywać je do interfejsu API. W tym przykładzie dostęp do zmiennych uzyskamy później w odpowiedzi klientowi.

Wyślij żądanie z objaśnieniem usługi

Następnym krokiem w sekwencji kompozycji zasad jest utworzenie zasady ServiceCallout. Zasada ServiceCallout, wymieniona poniżej, wysyła obiekt żądania utworzony w poprzednia zasada AssignMessage do usługi Google Geocoding, a wynik jest zapisywany w pliku o nazwie GeocodingResponse.

Tak jak poprzednio, przyjrzyjmy się kodowi. Poniżej znajduje się szczegółowe wyjaśnienie. Możesz przeczytać więcej informacji o tych zasadach znajdziesz w objaśnieniu dotyczącym usługi . W przykładowym pliku do pobrania znajdziesz ten kod XML w pliku 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>

Oto krótki opis tych zasad.

  • &lt;ServiceCallout&gt; – tak jak w poprzednich zasadach, w tym przypadku obowiązują imię i nazwisko.
  • <Request zmienna> – to zmienna utworzona w zasady AssignMessage. Obejmuje żądanie kierowane do interfejsu API backendu.
  • &lt;Response&gt; – ten element zawiera nazwę zmiennej, w której odpowiedź . Jak widać, dostęp do tej zmiennej będzie później uzyskiwać .
  • &lt;HTTPTargetConnection&gt; – określa docelowy adres URL backendu API. W tym przypadku określamy, że interfejs API zwraca odpowiedź JSON.

Mamy teraz dwie zasady. Pierwsza określa żądane informacje, które są niezbędne API backendu (interfejs Geocoding API Google) oraz drugi, który faktycznie wysyła żądanie do lub interfejs API backendu. Teraz zajmiemy się odpowiedziami.

Przeanalizuj odpowiedź za pomocą: ExtractVariables

Zasada Extractvariables zapewnia prosty mechanizm analizowania treści komunikat z odpowiedzią uzyskany przez zasadę ServiceCallout. Do analizy można użyć metody ExtractZmienne Plik JSON lub XML albo można go użyć do wyodrębnienia treści ze ścieżek URI, nagłówków HTTP, zapytań i parametry formularza.

Oto lista zasad dotyczących wyodrębniania zmiennych. Więcej informacji o tych zasadach znajdziesz tutaj: Wyodrębnij zmienne . W przykładowym pliku do pobrania znajdziesz ten kod XML w pliku 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>

Kluczowe elementy zasady Extractzmiennej to:

  • <Extractvariables name> – nazwa zasady służy też do tego, odwołują się do zasady, gdy jest ona używana w ramach przepływu.
  • &lt;Source&gt; – określa zmienną odpowiedzi, która została utworzona w zasad dotyczących wywołań usług. To jest zmienna, z której ta zasada wyodrębnia dane.
  • &lt;VariablePrefix&gt; – prefiks zmiennej określa przestrzeń nazw dla innych zmiennych utworzonych w tej zasadzie. Prefiks może być dowolną nazwą oprócz zarezerwowanego nazwy zdefiniowane przez Edge's wstępnie zdefiniowanych zmiennych.
  • &lt;JSONPayload&gt; – ten element pobiera dane odpowiedzi, które są i umieszcza je w nazwanych zmiennych. Interfejs Geocoding API zwraca ma więcej informacji niż szerokość i długość geograficzną. Są to jednak jedyne wartości, jakich potrzebujemy, dla tego przykładu. Możesz zobaczyć pełne wyrenderowanie kodu JSON zwróconego przez Geocoding API w interfejsie API dokumentacji. Wartości geometry.location.lat i geometry.location.lng to po prostu 2 z wielu pól w zwróconym obiekcie JSON.

Może to nie być oczywiste, ale ważne jest, aby zauważyć, że funkcja Extractvariables daje dwie wartości: zmiennych, których nazwy składają się z prefiksu zmiennej (odpowiedź geokodowa) i rzeczywistej wartości nazw zmiennych określonych w zasadzie. Te zmienne są przechowywane w sekcji API i będą dostępne dla innych zasad w procesie serwera proxy, podobnie jak zobaczyć. Zmienne to:

  • geocoderesponse.latitude
  • geocoderesponse.longitude

Większość pracy masz już za sobą. Utworzyliśmy zestaw trzech zasad, które tworzą żądania, wywołaj interfejs API backendu i przeanalizuj zwrócone dane JSON. Na koniec dodamy danych z tej części przepływu do innej zasady AssignMessage, wywołaj drugi backend API (Google Elevation API) i zwracają połączone dane deweloperowi aplikacji.

Generuj drugą wyślij prośbę za pomocą AssignMessage

Poniższa zasada AssignMessage używa zmiennych zwróconych z pierwszego backendu (Google geokodowanie), które przechowujemy, i umieszcza je w żądaniu przeznaczonym dla drugiego interfejsu API (Google wysokość). Jak już wspomnieliśmy, te zmienne to Georesponse.latitude oraz geocoderesponse.longitude.

W przykładowym pliku do pobrania znajdziesz ten kod XML w pliku 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>

Po zapoznaniu się z interfejsem Google Elevation API zauważysz, że wymaga on 2 parametrów zapytania. Pierwsza ma nazwę locations, a jej wartość to szerokość i długość geograficzna. (wartości rozdzielone przecinkami). Drugi parametr to sensor, który jest wymagany i musi być typu prawda lub fałsz. Najważniejszą rzeczą, o której należy pamiętać, jest to, że prośba utworzona przez nas wiadomość nie wymaga objaśnienia dotyczącego usługi. Nie musimy dzwonić do drugiej API z funkcji ServiceCallout w tym momencie, ponieważ możemy wywołać interfejs API backendu z serwera proxy Docelowy punkt końcowy. Mamy wszystkie dane potrzebne do nazywania Google Elevations. API Komunikat żądania wygenerowany w tym kroku nie wymaga objaśnienia Service, ponieważ dla głównego potoku żądań i są po prostu przekazywane przez ProxyEndpoint do docelowego punktu końcowego zgodnie z regułą trasy skonfigurowaną dla tego serwera proxy interfejsu API. Element TargetEndpoint zarządza połączeniem ze zdalnym interfejsem API. (Pamiętaj, że adres URL Interfejs API podniesienia uprawnień jest zdefiniowany w interfejsie HTTPConnection dla docelowego punktu końcowego. Interfejs API Elevation dokumentacji, jeśli chcesz uzyskać więcej informacji. Zapisane wcześniej parametry QueryParams country i postalcode nie są już potrzebne, dlatego je usuwamy tutaj.

Krótkie wstrzymanie: powrót do historii

W tym momencie możesz się zastanawiać, dlaczego nie tworzymy kolejnych zasad dotyczących wywołań usług. Po Utworzyliśmy kolejną wiadomość. W jaki sposób ta wiadomość jest wysyłana do grupy docelowej Interfejs Elevation API? Odpowiedź znajdziesz w tagu <RouteRule> pewnego elementu ścieżki. &lt;RouteRule&gt; określa, co zrobić z pozostałymi komunikatami żądania po żądaniu <Request>. część który wykonano w późniejszym czasie. Docelowy punkt końcowy określony przez tę regułę <RouteRule> informuje Serwer proxy interfejsu API dostarczający wiadomość do http://maps.googleapis.com/maps/api/elevation/xml.

Jeśli pobrałeś przykładowy serwer proxy interfejsu API, jego kod XML znajdziesz w pliku 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>

Teraz musimy tylko przetworzyć odpowiedź z interfejsu Google Elevation API gotowe.

Przekonwertuj odpowiedź z pliku XML na JSON

W tym przykładzie odpowiedź z interfejsu Google Elevation API jest zwracana jako XML. Słowo kluczowe „dodatkowe ”, dodajmy do zbioru danych jeszcze jedną zasadę, aby przekształcić odpowiedź z kodu XML na JSON.

W tym przykładzie użyto zasady JavaScript o nazwie GenerateResponse z plikiem zasobów który zawiera kod JavaScript. Widoczne poniżej to definicję zasady GenerateResponse:

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

Plik zasobów GenerateResponse.js zawiera kod JavaScript używany do wykonywania konwersji. Możesz zobaczyć ten kod w sekcji doc-samples/policy-mashup-cookbook/apiproxy/resources/JSC/GenerateResponse.js.

Apigee udostępnia też gotową do użycia zasadę XMLToJSON, która służy do konwertowania formatu XML na format JSON. Dostępne opcje zmień ProxyEndpoint tak, aby używał pokazanej poniżej zasady xmltojson .

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

Testowanie przykładu

Jeśli jeszcze nie zostało to zrobione, pobierz, wdróż i uruchom Przykładowy plik policy-mashup-cookbook. Znajdziesz go w folderze doc-samples w repozytorium przykładów Apigee Edge na GitHubie. Tylko postępuj zgodnie z instrukcjami zawartymi w pliku README w folderze policy-mashup-cookbook. Lub: postępuj zgodnie z poniższymi krótkimi instrukcjami: Korzystanie z funkcji z przykładowych serwerów proxy interfejsu API.

Podsumowując, możesz wywołać kompozytowy interfejs API w ten sposób. Zamień nazwę {myorg} na nazwa organizacji:

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

Odpowiedź zawiera geokodowaną lokalizację centrum kodu pocztowego podaną przez użytkownika aplikacji w połączeniu z wysokością w danej lokalizacji geograficznej. Dane były pobierane z 2 interfejsów API backendu, połączone z zasadami dołączonymi do serwera proxy API oraz zwracane klientowi w pojedynczej odpowiedzi.

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

Podsumowanie

Z tej książki kucharskiej dowiesz się, jak wykorzystać wzorzec kompozycji zasad do stworzenia mashupów danych z wielu źródeł zaplecza. Kompozycja zasad to typowy wzorzec używany w interfejsach API programowanie proxy w celu dodania funkcji kreacji do interfejsu API.