Programowanie proxy interfejsu API za pomocą JavaScriptu

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

W tym temacie dowiesz się, jak używać JavaScriptu do dynamicznego dodawania nagłówków HTTP do oraz o tym, jak przeanalizować odpowiedź JSON i zwrócić podzbiór jej właściwości do funkcji aplikację, która wysłała żądanie.

Pobierz i wypróbuj przykładowy kod

Informacje o tej książce kucharskiej

Ten przykład z książki kucharskiej pokazuje wzorzec serwera proxy API, w którym zaimplementujesz działanie interfejsu API JavaScriptu. Przykłady kodu JavaScript mają pokazać, jak pracować z prostymi zmiennymi i treść wiadomości. Jeden przykład pokazuje, jak pobierać i ustawiać zmienne. Druga pokazujemy, jak przeanalizować plik JSON i utworzyć wiadomość na podstawie wyniku.

Na serwerze proxy API znajdują się 2 przykłady kodu JavaScript:

  • setHeaders.js: ten kod JavaScript pobiera wartości kilku zmiennych, które są ustawiane podczas wywoływania serwera proxy interfejsu API. JavaScript dodaje te zmienne do odpowiedzi dzięki czemu możesz zobaczyć ich wartości dla każdego przesłanego żądania.
  • minimize.js: ten kod JavaScript pokazuje, jak pracować z wiadomością treści. Według tego przykładu usługa często zwraca więcej danych, niż jest niezbędną. JavaScript analizuje wiadomość z odpowiedzią i wyodrębnia kilka interesujących informacji, a potem używa ich do tworzenia treści wiadomości z odpowiedzią.

Kod dla usługi 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"));

Kod dla usługi 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);

Dostęp do zmiennych przepływu w JavaScripcie możesz uzyskać przez obiekt kontekstu. Ten obiekt jest częścią: za pomocą modelu obiektowego Edge JavaScript. Szczegółowe informacje o modelu obiektowym znajdziesz w artykule Obiektowy model JavaScript.

Zanim zaczniesz

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 przepływu proxy, omówiona w sekcji 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 przepływu serwera proxy interfejsu API.
  • Organizacja serwera proxy interfejsu API w systemie plików, zgodnie z opisem na stronie Dokumentacja konfiguracji serwera proxy interfejsu API
  • Praktyczna znajomość języka XML, JSON i JavaScript. W tym przykładzie utworzysz interfejs API serwera proxy i jego zasad za pomocą 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 javascript-cookbook. W poniższych sekcjach znajdziesz omówienie zapoznaj się ze szczegółami przykładowego kodu.

Informacje o przepływie serwera proxy

Aby uruchomić JavaScript na serwerze proxy API, musisz dołączyć go do przepływu, używając zasady o nazwie „Step”. Zasada typu JavaScript (uwaga: wielkie litery) zawiera po prostu odwołanie do nazwy pliku JavaScript. Wskazujesz zasadę na plik JavaScript za pomocą tagu Element ResourceURL.

Na przykład ta zasada odwołuje się do pliku JavaScript o nazwie setHeader.js

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

Możesz dołączyć tę zasadę do przepływu serwera proxy interfejsu API tak samo jak każdego innego typu zasad. Według dołączając zasadę do przepływu interfejsu API serwera proxy, wskazujesz miejsce wykonywania JavaScriptu. Pozwala to uruchamiać kod JavaScript, który wchodzi w interakcję z komunikatami żądania lub odpowiedziami ponieważ „przepływają one” za pośrednictwem serwera proxy interfejsu API. W tym przykładzie oba skrypty JavaScript są wykonywane w ponieważ zasady spełniają 2 czynności: ustawiają nagłówki HTTP w wiadomości z odpowiedzią oraz „minimalizować” komunikat z odpowiedzią Apigee Edge zwracana do aplikacji wysyłającej żądanie.

Jeśli otworzysz tę konfigurację przepływu w interfejsie zarządzania, zobaczysz konfigurację przepływu poniżej.

Wybierz Proxy Endpoints > (Punkty końcowe serwera proxy) > domyślny > Postflow w Nawigatorze .

Odpowiednia konfiguracja XML dla punktu końcowego serwera proxy o nazwie „default” (domyślna). jest wyświetlana poniżej.

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

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 wywoływana jest jedna z zasad utworzonych w pozostałej części w tym temacie. Te zasady dołączają kod JavaScript do procesu serwera proxy interfejsu API, a lokalizację określa czas wykonywania kodu JavaScript.
  • &lt;Response&gt; – <Response> element zawiera również <Kroki>. Te kroki wywołują również zasady odpowiedzialne za przetwarzanie ostatecznej wersji z celu (które w tym przykładzie jest przykładowym celem usługi Apigee – zwróć uwagę na HTTPTargetConnection w kolumnie /apiproxy/targets/default.xml.
  • &lt;HTTPProxyConnection&gt; – określa hosta i ścieżkę URI, określić adres sieciowy, który aplikacje wywołują w celu korzystania z tego interfejsu API.
  • &lt;RouteRule&gt; – ten element określa, który punkt końcowy jest wywoływana przez punkt końcowy serwera proxy.

Dodawanie kodu JavaScript do serwera proxy

Język JavaScript (np. skrypty Python, pliki JAR Java, pliki AutoML itp.) są przechowywane jako resources. Jeśli dopiero zaczynasz pracę z JavaScriptem, najłatwiej jest przechowywać pliki JavaScript na serwerze proxy API. W miarę postępów język JavaScript powinien być ogólny, wielokrotnego użytku, a następnie przechowywane na poziomie środowiska lub organizacji. Dzięki temu nie trzeba przechowywać tych samych plików JavaScript na wielu serwerach proxy interfejsu API, mogą szybko stać się nie do zarządzania.

Więcej informacji o przechowywaniu zasobów na poziomie organizacji i środowiska znajdziesz w sekcji Pliki zasobów.

Wypróbuj

Instrukcje wdrażania i wywoływania serwera proxy znajdziesz w dokumentacji Plik README do książki kucharskiej JavaScript

Importowanie i wdrażanie serwer proxy API

Po wprowadzeniu zmian możesz zapisać serwer proxy interfejsu API w kreatorze serwerów proxy interfejsów API w interfejsie zarządzania.

Możesz też uruchomić w katalogu to polecenie /api-platform-samples/doc-samples/javascript-cookbook

$ sh deploy.sh

Testowanie JavaScriptu

Uruchom w katalogu to polecenie /api-platform-samples/doc-samples/javascript-cookbook

$ sh invoke.sh

Flaga curl -v jest używana w skrypcie powłoki do wyświetlania nagłówków HTTP w odpowiedzi. zmodyfikowany przez JavaScript.

Prośbę możesz przesłać bezpośrednio w ten sposób:

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

Jeśli JavaScript zostanie wykonany prawidłowo, zobaczysz odpowiedź podobną do tej:

< 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"}

Teraz możesz modyfikować JavaScript, aby wypróbować nowe rozwiązania, ponownie wdrożyć serwer proxy API i zweryfikować , przesyłając to samo żądanie. Zawsze pamiętaj, aby wdrożyć serwer proxy interfejsu API, który zawiera JavaScript, by wprowadzić zmiany.

Błędy skryptu

Podczas pisania JavaScript nie unikniesz błędów. Format błędów JavaScriptu, które zostanie wyświetlony poniżej przez serwer proxy interfejsu API.

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

Kiedy używać JavaScriptu

W Apigee Edge istnieje zwykle więcej niż jeden sposób implementacji określonych funkcji. Używaj gotowe zasady w miarę możliwości i unikaj pokusy kodowania całego serwera proxy interfejsu API w języku JavaScript. Mimo że Apigee Edge wykorzystuje skompilowany JavaScript, aby ulepszać jest mało prawdopodobne, aby JavaScript działał tak samo jak Zasady. Skrypt JavaScript może być trudniejsze w utrzymaniu i debugowaniu. Zarezerwuj kod JavaScript, aby uzyskać funkcje charakterystyczne dla Twojej .

Jeśli wydajność ma znaczenie dla niestandardowych funkcji, w miarę możliwości używaj Javy.

Podsumowanie

Z tego tematu książki kucharskiej dowiesz się, jak uwzględnić JavaScript w serwerze proxy interfejsu API. co pozwala wdrożyć niestandardowe zachowanie. Niestandardowe zachowanie zaimplementowane przez przykłady jak pobierać zmienne oraz jak analizować kod JSON i tworzyć niestandardową odpowiedź wiadomości.