Wyświetlasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X. info
W tym temacie omawiamy model obiektów w JavaScripcie w Apigee Edge. Jeśli zamierzasz użyć zasady JavaScript do dodania niestandardowego kodu JavaScript do serwera proxy interfejsu API, musisz dobrze poznać ten model.
Informacje o modelu obiektów JavaScript na serwerach brzegowych
Model obiektów JavaScript Apigee Edge definiuje obiekty z powiązanymi właściwościami, które są dostępne dla kodu JavaScript wykonywanego w ramach przepływu proxy Apigee Edge. Aby dołączyć ten niestandardowy kod do przepływu proxy interfejsu API, użyj zasady JavaScript.
Obiekty zdefiniowane przez ten model mają zakres w przepływie proxy interfejsu API, co oznacza, że niektóre obiekty i właściwości są dostępne tylko w określonych punktach przepływu. Gdy wykonywany jest kod JavaScript, tworzony jest zakres wykonania. W tym zakresie tworzone są te odwołania do obiektów:
- context: obiekt, który zapewnia dostęp do kontekstu wiadomości;
- request: skrót umożliwiający dostęp do obiektu żądania.
- response: skrót umożliwiający dostęp do obiektu żądania.
- crypto: udostępnia różne funkcje szyfrowania.
- print: funkcja do emitowania danych wyjściowych.
- properties: umożliwia dostęp z możliwością odczytu do właściwości konfiguracji w zasadach.
Obiekt kontekstu
Obiekt context ma zakres globalny. Jest dostępny wszędzie w przepływie serwera proxy interfejsu API. Ma 4 obiekty podrzędne: proxyRequest, proxyResponse, targetRequest i targetResponse. Te obiekty podrzędne są ograniczone do żądania i odpowiedzi dotyczących środowiska, czyli żądania i odpowiedzi serwera proxy lub żądania i odpowiedzi docelowych. Jeśli na przykład zasady JavaScript są wykonywane w części przepływu punktu końcowego serwera proxy, obiekty context.proxyRequest i context.proxyResponse są w zakresie. Jeśli kod JavaScript jest uruchamiany w przepływie docelowym, obiekty context.targetRequest i context.targetResponse są w zakresie.
Obiekt context ma też właściwości i metody, które zostały szczegółowo opisane w tym temacie. Na przykład ten kod JavaScript używa właściwości context.flow i wywołuje metody get/setVariable() w context.
if (context.flow=="PROXY_REQ_FLOW") { var username = context.getVariable("request.formparam.user"); context.setVariable("USER.name", username); }
Te metody wchodzą w bezpośrednią interakcję ze zmiennymi przepływu.
Wartość właściwości context.flow to bieżący zakres przepływu. W przepływie żądania serwera proxy jest ustawiona na stałą wartość PROXY_REQ_FLOW. Jeśli w przepływie odpowiedzi docelowej jest ustawiona wartość TARGET_RESP_FLOW. Ta stała jest przydatna do wykonywania kodu w określonym zakresie. Funkcja pobierająca umożliwia uzyskiwanie zmiennych przepływu, a funkcja ustawiająca – ustawianie zmiennych przepływu. Te zmienne są zwykle dostępne w przepływie serwera proxy i mogą być używane przez inne zasady.
Więcej informacji i przykłady znajdziesz w dokumentacji referencyjnej dotyczącej obiektu kontekstu poniżej.
Obiekt crypto
Obiekt crypto dodaje do modelu obiektów w JavaScripcie podstawową, wydajną obsługę kryptografii. Więcej informacji i przykładów znajdziesz w dokumentacji referencyjnej dotyczącej obiektów kryptograficznych poniżej.
Obiekty żądania i odpowiedzi
Obiekty request i response to skrócone odwołania do żądania i odpowiedzi w kontekście, czyli żądania i odpowiedzi serwera proxy lub żądania i odpowiedzi docelowej. Obiekty, do których odwołują się te zmienne, zależą od kontekstu, w którym wykonywana jest zasada JavaScript. Jeśli JavaScript jest uruchamiany w przepływie punktu końcowego proxy, zmienne żądania i odpowiedzi odnoszą się do context.proxyRequest i context.proxyResponse. Jeśli JavaScript jest uruchamiany w przepływie docelowym, zmienne odnoszą się do context.targetRequest i context.targetResponse.
Funkcja print()
Model obiektów JavaScript zawiera funkcję print(), której możesz użyć do wyświetlania informacji debugowania w narzędziu Edge Trace. Zobacz Debugowanie za pomocą instrukcji JavaScript print().
Obiekt właściwości
Jeśli w konfiguracji zasad używasz elementu properties.
Jeśli na przykład konfiguracja JavaScriptu zawiera:
<Javascript name='JS-1' > <Properties> <Property name="number">8675309</Property> <Property name="firstname">Jenny</Property> </Properties> <ResourceURL>jsc://my-code.js</ResourceURL> </Javascript>
Następnie w my-code.js możesz:
print(properties.firstname); // prints Jenny print(properties.number); // 8675309
W praktyce konfiguracja może sprawić, że kod będzie działać inaczej w różnych środowiskach, w różnych momentach lub z dowolnego innego powodu.
Na przykład poniższy kod określa „nazwę zmiennej” i styl danych wyjściowych, do których JavaScript ma przesyłać informacje:
<Javascript name='JS-2' > <Properties> <Property name="output">my_output_variable</Property> <Property name="prettyPrint">true</Property> </Properties> <ResourceURL>jsc://emit-results.js</ResourceURL> </Javascript>
emit-results.js kod może wykonać te czynności:
var result = { prop1: "something", prop2 : "something else" } ; if (properties.prettyPrint == "true") { context.setVariable(properties.output, JSON.stringify(result, null, 2)); } else { context.setVariable(properties.output, JSON.stringify(result)); }
Dokumentacja obiektu crypto
Obiekt crypto umożliwia wykonywanie podstawowych funkcji kryptograficznego haszowania w JavaScript.
Obiekt crypto ma zakres globalny. Jest dostępny wszędzie w przepływie serwera proxy interfejsu API. Moduł Crypto umożliwia pracę z tymi obiektami skrótu:
- SHA-1
- SHA256
- SHA512
- MD5
Praca z obiektami SHA-1
Możesz tworzyć obiekty SHA-1, aktualizować je i konwertować na wartości szesnastkowe i base64.
Tworzenie nowego obiektu SHA-1
var _sha1 = crypto.getSHA1();
Aktualizowanie obiektu SHA-1
Składnia
_sha1.update(value);
Parametry
- value – (String) dowolna wartość w formie ciągu znaków.
Przykład
Aktualizowanie obiektu SHA-1:
_sha1.update("salt_value"); _sha1.update("some text");
Zwróć obiekt SHA-1 jako ciąg szesnastkowy
var _hashed_token = _sha1.digest();
Zwróć obiekt SHA-1 jako ciąg tekstowy w formacie base64
var _hashed_token = _sha1.digest64();
Praca z obiektami SHA-256
Możesz tworzyć obiekty SHA-256, aktualizować je i przekształcać w wartości szesnastkowe i base64.
Tworzenie nowego obiektu SHA-256
var _sha256 = crypto.getSHA256();
Aktualizowanie obiektu SHA-256
Składnia
_sha256.update(value);
Parametry
- value – (String) dowolna wartość w formie ciągu znaków.
Przykład
Aktualizowanie obiektu SHA-256:
_sha256.update("salt_value"); _sha256.update("some text");
Zwróć obiekt SHA-256 jako ciąg szesnastkowy
var _hashed_token = _sha256.digest();
Zwróć obiekt SHA-256 jako ciąg znaków base64
var _hashed_token = _sha256.digest64();
Praca z obiektami SHA-512
Możesz tworzyć obiekty SHA-512, aktualizować je i konwertować na wartości szesnastkowe i base64.
Utwórz nowy obiekt SHA-512
var _sha512 = crypto.getSHA512();
Aktualizowanie obiektu SHA-512
Składnia
_sha512.update(value);
Parametry
- value – (String) dowolna wartość w formie ciągu znaków.
Przykład
Zaktualizuj obiekt SHA-512:
_sha512.update("salt_value"); _sha512.update("some text");
Zwracanie obiektu SHA-512 jako ciągu szesnastkowego
var _hashed_token = _sha512.digest();
Zwróć obiekt SHA-512 jako ciąg tekstowy w formacie base64
var _hashed_token = _sha512.digest64();
Praca z obiektami MD5
Możesz tworzyć obiekty MD5, aktualizować je i konwertować na wartości szesnastkowe i base64.
Utwórz nowy obiekt MD5
var _md5 = crypto.getMD5();
Aktualizowanie obiektu MD5
Składnia
_md5.update(value);
Parametry
- value – (String) dowolna wartość w formie ciągu znaków.
Przykład
Aby zaktualizować obiekt MD5:
_md5.update("salt_value"); _md5.update("some text");
Zwracanie obiektu MD5 jako ciągu szesnastkowego
var _hashed_token = _md5.digest();
Zwróć obiekt MD5 jako ciąg znaków base64
var _hashed_token = _md5.digest64();
Obsługa daty i godziny w kryptografii
Obiekt kryptograficzny obsługuje wzorce formatowania daty i godziny.
crypto.dateFormat()
Zwraca datę w formacie ciągu tekstowego.
Składnia
crypto.dateFormat(format, [timezone], [time])
Parametry
- format – (String) podstawowa implementacja tego parametru to java.text.SimpleDateFormat. Na przykład: „rrrr-MM-DD GG:mm:ss.SSS”
- timezone – (String, opcjonalny) Podstawowa implementacja tego parametru to java.util.TimeZone. Ten parametr jest taki sam. Wartość domyślna: UTC
- time – (liczba, opcjonalnie) wartość sygnatury czasowej w formacie czasu uniksowego do sformatowania. Domyślnie: bieżący czas
Przykłady
Pobierz bieżący czas z dokładnością do milisekund:
var _now = crypto.dateFormat('yyyy-MM-DD HH:mm:ss.SSS');
Sprawdź aktualną godzinę w strefie czasu pacyficznego:
var _pst = crypto.dateFormat('yyyy-MM-DD HH:mm:ss.SSS','PST');
Pobierz wartość za 10 sekund:
var _timeNow = Number(context.getVariable('system.timestamp')); var ten_seconds = crypto.dateFormat('yyyy-MM-DD HH:mm:ss.SSS','PST', _timeNow + 10 * 1000);
Dodatkowe przykłady. Zapoznaj się też z dokumentacją java.text.SimpleDateFormat.
var _pst = crypto.dateFormat('M');
var _pst = crypto.dateFormat('EEE, d MMM yyyy HH:mm:ss Z');
var _pst = crypto.dateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
Użyj funkcji getHash(), aby uzyskać dowolny z obsługiwanych obiektów skrótu.
Przykłady
var _hash1 = crypto.getHash('MD5'); var _hash2 = crypto.getHash('SHA-1'); var _hash3 = crypto.getHash('SHA-256'); var _hash4 = crypto.getHash('SHA-512');
Próbka z kryptowalutą
try { // get values to use with hash functions var salt = context.getVariable("salt") || 'SomeHardCodedSalt'; var host = context.getVariable("request.header.Host"); var unhashed_token = ""; var _timeNow = Number(context.getVariable('system.timestamp')); var now = crypto.dateFormat('yyyy-MM-DD HH:mm:ss.SSS','PST', _timeNow); unhashed_token = "|" + now + "|" + host // generate a hash with the unhashedToken: var sha512 = crypto.getSHA512(); sha512.update(salt); sha512.update(unhashed_token); // convert to base64 var base64_token = sha512.digest64(); // set headers context.setVariable("request.header.now", now); context.setVariable("request.header.token", base64_token); } catch(e) { throw 'Error in Javascript'; }
Dokumentacja obiektu kontekstu
- podsumowanie obiektu kontekstu
- metody obiektu kontekstu,
- właściwości obiektu kontekstu
- węzły podrzędne obiektu kontekstu
Dla każdej transakcji żądania/odpowiedzi wykonywanej przez proxy interfejsu API tworzony jest obiekt context. Obiekt context udostępnia metody pobierania, ustawiania i usuwania zmiennych
związanych z każdą transakcją.
Zmienne definiują właściwości związane z transakcją. Pora dnia, lokalizacja klienta wysyłającego żądanie, ciąg tekstowy User-Agent klienta wysyłającego żądanie i adres URL usługi docelowej to przykłady zmiennych dostępnych w context. Dlatego warunek context jest przydatny do tworzenia logiki, która opiera się na tych właściwościach w celu wykonywania niestandardowych działań.
Zapoznaj się z dokumentacją zmiennych przepływu i zasadami dotyczącymi wyodrębniania zmiennych.
podsumowanie obiektu context
Ta tabela zawiera krótki opis obiektu kontekstu i jego elementów podrzędnych oraz listę właściwości powiązanych z każdym z nich.
| Nazwa | Opis | Właściwości |
|---|---|---|
context |
Obiekt opakowujący kontekst potoku przetwarzania wiadomości oraz żądanie i odpowiedź. Przepływy wykonywane przez ProxyEndpoint i TargetEndpoint. | przepływ, sesja |
context.proxyRequest |
Obiekt reprezentujący przychodzącą wiadomość żądania do ProxyEndpoint (z aplikacji wysyłającej żądanie do proxy interfejsu API). | nagłówki, parametry zapytania, metoda, treść, adres URL |
context.targetRequest |
Obiekt reprezentujący wychodzącą wiadomość żądania z elementu TargetEndpoint (z proxy interfejsu API do usługi backendu). | nagłówki, parametry zapytania, metoda, treść, adres URL |
context.targetResponse |
Obiekt reprezentujący przychodzącą wiadomość odpowiedzi docelowej (z usługi backendu do proxy interfejsu API). | nagłówki, treść, stan, |
context.proxyResponse |
Obiekt reprezentujący komunikat odpowiedzi proxy połączeń wychodzących (z proxy interfejsu API do aplikacji wysyłającej żądanie). | nagłówki, treść, stan, |
context.flow |
Nazwa bieżącej automatyzacji. | Zobacz context.flow poniżej. |
context.session |
Mapa par nazwa/wartość, której możesz używać do przekazywania obiektów między 2 różnymi krokami wykonywanymi w tym samym kontekście. Przykład: context.session['key'] = 123. |
Więcej informacji o tym, kiedy używać tego obiektu, a kiedy nie, znajdziesz w tej dyskusji na forum społeczności Apigee. |
metody obiektu context
context.getVariable()
Pobiera wartość wstępnie zdefiniowanej lub niestandardowej zmiennej.
Składnia
context.getVariable("variable-name");
Przykład
Aby uzyskać wartość za bieżący rok:
var year = context.getVariable('system.time.year');
context.setVariable()
Ustawia wartość zmiennej niestandardowej lub dowolnej zmiennej z możliwością zapisu zdefiniowanej wstępnie.
Składnia
context.setVariable("variable-name", value);
Przykład
Typowy scenariusz ustawiania zmiennej to sytuacja, w której proxy interfejsu API musi dynamicznie zapisywać docelowy adres URL. Poniższy kod JavaScript pobiera wartość zmiennej o nazwie USER.name, dołącza ją jako parametr zapytania do adresu URL http://mocktarget.apigee.net?user=, a następnie ustawia predefiniowaną zmienną target.url na tę wartość.
context.setVariable("target.url", "http://mocktarget.apigee.net/user?user="+context.getVariable("USER.name"));
context.removeVariable()
Usuwa zmienną z kontekstu.
Składnia
context.removeVariable('variable-name');
właściwości obiektu kontekstu,
Właściwość flow to ciąg tekstowy, który identyfikuje bieżący przepływ proxy interfejsu API. Ta właściwość służy do wskazywania przepływu, do którego jest dołączony kod JavaScript. Obsługiwane wartości to:
PROXY_REQ_FLOWPROXY_RESP_FLOWTARGET_REQ_FLOWTARGET_RESP_FLOW
Każda nazwa przepływu obejmuje przepływ wstępny, przepływ końcowy i wszystkie przepływy warunkowe zdefiniowane w punktach końcowych proxy lub punktach końcowych docelowych.
Ta opcjonalna właściwość jest przydatna, gdy wspólny kod JavaScript jest wykonywany w więcej niż 1 automatyzacji, ale może się różnić w zależności od automatyzacji, w której jest wykonywany. Użyj właściwości Flow w przypadku modułów JavaScript, które mają być ponownie używane w wielu serwerach proxy interfejsu API, w których kod musi sprawdzać bieżący przepływ przed wykonaniem logiki.
Przykład
Ustaw nagłówek HTTP tylko w przypadku przepływu targetRequest:
if (context.flow=="TARGET_REQ_FLOW") { context.targetRequest.headers['TARGET-HEADER-X']='foo'; }
Ustaw treść tylko w przepływie proxyResponse:
if (context.flow=="PROXY_RESP_FLOW") { context.proxyResponse.content='bar'; }
Mapa par nazwa/wartość, która może służyć do przekazywania obiektów między 2 zasadami wykonywanymi w tym samym kontekście wiadomości.
Przykład
Ustaw wartość w sesji:
context.session['key'] = 123;
Pobierz wartość z sesji:
var value = context.session['key']; // 123
węzły podrzędne obiektu kontekstu,
Jak widać poniżej, kompletny przepływ proxy interfejsu API obejmuje 4 różne fazy, z których każda ma powiązany obiekt wiadomości będący elementem podrzędnym obiektu kontekstu:
context.proxyRequest: Wiadomość z żądaniem przychodzącym otrzymana od klienta wysyłającego żądanie.context.targetRequest: wiadomość z żądaniem wychodzącym wysłana do usługi backendu.context.proxyResponse: wychodząca wiadomość z odpowiedzią zwrócona do klienta wysyłającego żądanie.context.targetResponse: Wiadomość z żądaniem przychodzącym otrzymana z usługi backendu.

W sekcjach poniżej opisujemy metody i właściwości tych obiektów:
context.*Request child objects
W przypadku każdej transakcji HTTP wykonywanej w proxy API tworzone są 2 obiekty wiadomości żądania: 1 przychodzący (żądanie od klienta) i 1 wychodzący (żądanie wygenerowane przez proxy API i przesłane do docelowego backendu).
Obiekt context ma obiekty podrzędne, które reprezentują te wiadomości z żądaniem: context.proxyRequest i context.targetRequest. Te obiekty umożliwiają dostęp do właściwości w przepływie żądania, który jest w zakresie, gdy wykonywany jest kod JavaScript.
Uwaga: w przepływie żądania możesz też użyć obiektu shorthand request, aby uzyskać dostęp do tych właściwości. Obiekt request odnosi się do context.proxyRequest lub context.targetRequest w zależności od tego, w którym miejscu przepływu wykonywany jest kod JavaScript.
context.*Request child object properties
| Nazwa usługi | Opis |
|---|---|
url |
Właściwość Pełny adres URL żądania składa się z tych właściwości:
Podczas pobierania
|
|
Przykłady: context.targetRequest.url = 'http://www.example.com/path?q1=1' context.targetRequest.protocol ='https'; |
|
headers |
Nagłówki żądań HTTP jako mapowanie |
|
Przykłady: W przypadku tego żądania HTTP: POST /v1/blogs HTTP/1.1 Host: api.example.com Content-Type: application/json Authorization: Bearer ylSkZIjbdWybfs4fUQe9BqP0LH5Z context.proxyRequest.headers['Content-Type']; context.proxyRequest.headers['Authorization']; zwróci te wartości: application/json Bearer ylSkZIjbdWybfs4fUQe9BqP0LH5Z |
|
queryParams |
Parametry zapytania wiadomości żądania jako mapowanie |
|
Przykłady: "?city=PaloAlto&city=NewYork"można uzyskać dostęp w postaci: context.proxyRequest.queryParams['city']; // == 'PaloAlto' context.proxyRequest.queryParams['city'][0] // == 'PaloAlto' context.proxyRequest.queryParams['city'][1]; // == 'NewYork' context.proxyRequest.queryParams['city'].length(); // == 2 |
|
method |
Czasownik HTTP ( |
|
Przykłady: W przypadku tej prośby: POST /v1/blogs HTTP/1.1 Host: api.example.com Content-Type: application/json Authorization: Bearer ylSkZIjbdWybfs4fUQe9BqP0LH5Z Ten kod JavaScript: context.proxyRequest.method; zwróci tę wartość: POST |
|
body |
Treść wiadomości (ładunek) żądania HTTP. Treść żądania zawiera te elementy:
|
|
Przykłady: W przypadku treści XML: <customer number='1'> <name>Fred<name/> <customer/> Aby uzyskać dostęp do elementów obiektu XML, wykonaj te czynności: var name = context.targetRequest.body.asXML.name; Aby uzyskać dostęp do atrybutów XML, użyj notacji var number = context.targetRequest.body.asXML.@number; W przypadku treści żądania w formacie JSON: { "a": 1 , "b" : "2" } var a = context.proxyRequest.body.asJSON.a; // == 1 var b = context.proxyRequest.body.asJSON.b; // == 2 Aby odczytać parametry formularza: "vehicle=Car&vehicle=Truck"v0 = context.proxyRequest.body.asForm['vehicle'][0]; v1 = context.proxyRequest.body.asForm['vehicle'][1]; |
context.*Response child objects
W przypadku każdej transakcji HTTP wykonywanej w serwerze proxy interfejsu API tworzone są 2 obiekty wiadomości odpowiedzi: 1 przychodzący (odpowiedź z usługi backendu) i 1 wychodzący (odpowiedź wysyłana z powrotem do klienta).
Obiekt kontekstu ma obiekty podrzędne, które reprezentują te wiadomości odpowiedzi: context.proxyResponse i context.targetResponse. Te obiekty umożliwiają dostęp do właściwości w przepływie odpowiedzi, który jest w zakresie, gdy wykonywany jest kod JavaScript.
Uwaga: możesz też użyć obiektu skróconego response, aby uzyskać dostęp do tych właściwości z poziomu przepływu odpowiedzi. Obiekt response odnosi się do context.proxyResponse lub context.targetResponse w zależności od tego, w którym miejscu przepływu wykonywany jest kod JavaScript.
context.*Właściwości obiektu odpowiedzi
| Nazwa usługi | Opis |
|---|---|
headers |
Nagłówki HTTP wiadomości odpowiedzi w postaci mapowania |
|
Przykład: var cookie = context.targetResponse.headers['Set-Cookie']; |
|
status |
Kod stanu z komunikatem o stanie jako właściwością. Zarówno kod stanu, jak i komunikat o stanie są dostępne jako właściwości. |
|
Przykład: var status = context.targetResponse.status.code; // 200 var msg = context.targetResponse.status.message; // "OK" |
|
content |
Treść HTTP (zawartość ładunku) komunikatu odpowiedzi. Treść odpowiedzi zawiera te elementy: context.targetResponse.content.asXML; context.targetResponse.content.asJSON; |
Używanie notacji .asXML
Istnieje wygodny sposób przeglądania dokumentu XML za pomocą notacji .asXML.
W tej sekcji opisujemy, jak używać tej notacji i czym różni się ona od request.content i context.proxyRequest.content.
Na przykład:
request.content.asXML
lub
context.proxyRequest.content.asXML
Zarówno format *.content, jak i *.content.asXML może być używany w kontekście ciągu znaków, a JavaScript przekształci je w ciągi znaków. W pierwszym przypadku (*.content) ciąg znaków zawiera wszystkie deklaracje oraz komentarze XML. W tym drugim przypadku (*.content.asXML) wartość ciągu wynikowego jest oczyszczana z deklaracji i komentarzy.
Przykład
msg.content:
<?xml version="1.0" encoding="UTF-8"?> <yahoo:error xmlns:yahoo="http://yahooapis.com/v1/base.rng" xml:lang="en-US"> <yahoo:description>Please provide valid credentials. OAuth oauth_problem="unable_to_determine_oauth_type", realm="yahooapis.com" </yahoo:description> </yahoo:error> <!-- mg023.mail.gq1.yahoo.com uncompressed/chunked Sat Dec 14 01:23:35 UTC 2013 -->
msg.content.asXML:
<?xml version="1.0" encoding="UTF-8"?> <yahoo:error xmlns:yahoo="http://yahooapis.com/v1/base.rng" xml:lang="en-US"> <yahoo:description>Please provide valid credentials. OAuth oauth_problem="unable_to_determine_oauth_type", realm="yahooapis.com" </yahoo:description> </yahoo:error>
Możesz też użyć formularza .asXML, aby przechodzić przez hierarchię XML, podając nazwy elementów i atrybutów. Nie można przechodzić przez hierarchię za pomocą innej składni.
Debugowanie za pomocą instrukcji JavaScript print()
Jeśli używasz zasady JavaScriptu do wykonywania niestandardowego kodu JavaScript, pamiętaj, że możesz użyć funkcji print(), aby wyświetlać informacje do debugowania w narzędziu do śledzenia. Ta funkcja jest dostępna bezpośrednio w modelu obiektów JavaScript. Na przykład:
if (context.flow=="PROXY_REQ_FLOW") { print("In proxy request flow"); var username = context.getVariable("request.queryparam.user"); print("Got query param: " + username); context.setVariable("USER.name", username); print("Set query param: " + context.getVariable("USER.name")); } if (context.flow=="TARGET_REQ_FLOW") { print("In target request flow"); var username = context.getVariable("USER.name"); var url = "http://mocktarget.apigee.net/user?" context.setVariable("target.url", url + "user=" + username); print("callout to URL: ", context.getVariable("target.url")); }
Aby zobaczyć dane wyjściowe, u dołu okna śledzenia kliknij Dane wyjściowe ze wszystkich transakcji. Dane wyjściowe znajdziesz też we właściwości śledzenia o nazwie stepExecution-stdout.
Wywoływanie JavaScriptu za pomocą httpClient
Użyj httpClient, aby wysyłać wiele równoległych, asynchronicznych żądań HTTP do dowolnego adresu URL z niestandardowego kodu JavaScript wykonywanego w przepływie serwera proxy interfejsu API.
Obiekt httpClient jest udostępniany przez model obiektu JavaScript Apigee Edge.
Informacje o httpClient
Obiekt httpClient jest udostępniany niestandardowemu kodowi JavaScript działającemu na platformie Apigee Edge za pomocą modelu obiektów JavaScript. Aby dołączyć niestandardowy kod JavaScript do serwera proxy interfejsu API, użyj zasady JavaScript. Gdy zasada jest uruchamiana, wykonywany jest niestandardowy kod JavaScript.
Obiekt httpClient jest przydatny do tworzenia usług złożonych lub mashupów. Możesz na przykład połączyć kilka wywołań backendu w jedną metodę interfejsu API.
Ten obiekt jest często używany jako alternatywa dla zasady ServiceCallout.
Oto podstawowy wzorzec użycia. Utwórz instancję obiektu Request, przypisz do niej adres URL (np. do usługi backendu, którą chcesz wywołać) i wywołaj funkcję httpClient.send z tym obiektem żądania.
var myRequest = new Request(); myRequest.url = "http://www.example.com"; var exchangeObj = httpClient.send(myRequest);
Dokumentacja httpClient
Klient HTTP udostępnia 2 metody: get() i send().
httpClient.get()
Wygodna metoda do prostych żądań HTTP GET bez obsługi nagłówków HTTP.
Wykorzystanie
var exchangeObj = httpClient.get(url);
Zwroty
Metoda zwraca obiekt exchange. Ten obiekt nie ma właściwości i udostępnia te metody:
isError(): (wartość logiczna) zwraca wartośćtrue, jeśli klient HTTP nie mógł połączyć się z serwerem. Kody stanu HTTP4xxi5xxpowodująisError()false, ponieważ połączenie zostało zakończone i zwrócono prawidłowy kod odpowiedzi. Jeśli funkcjaisError()zwróci wartośćtrue, wywołanie funkcjigetResponse()zwróci obiekt JavaScriptundefined.isSuccess(): (wartość logiczna) zwraca wartośćtrue, jeśli wysyłanie zostało zakończone i przebiegło pomyślnie.isComplete(): (wartość logiczna) zwraca wartośćtrue, jeśli żądanie zostało zrealizowane.waitForComplete(): wstrzymuje wątek do czasu zakończenia żądania (powodzeniem lub błędem).getResponse(): (object) Zwraca obiekt odpowiedzi, jeślihttpClient.send()zostało ukończone i zakończone sukcesem. Zwrócony obiekt ma identyczne metody i właściwości jak obiekt context.proxyResponse. Zobacz podsumowanie obiektu kontekstu.getError(): (string) jeśli wywołanie funkcjihttpClient.send()spowodowało błąd, zwraca komunikat o błędzie w postaci ciągu znaków.
Przykład
Wyślij w pełni skonfigurowany obiekt Request zawierający właściwości żądania HTTP. Użyj wywołania zwrotnego, które nie blokuje wątku, aby przetworzyć odpowiedź.
// Add the required the headers for making a specific API request var headers = {'X-SOME-HEADER' : 'some value' }; // Make a GET API request along with headers var myRequest = new Request("http://www.example.com","GET",headers); // Define the callback function and process the response from the GET API request function onComplete(response,error) { // Check if the HTTP request was successful if (response) { context.setVariable('example.status', response.status); } else { context.setVariable('example.error', 'Woops: ' + error); } } // Specify the callback Function as an argument httpClient.get(myRequest, onComplete);
Korzystanie z zasad JavaScript
Za pomocą zasady JavaScript możesz dołączyć niestandardowy kod JavaScript do przepływu proxy. Zapoznaj się z zasadami dotyczącymi JavaScriptu.
Powiązane artykuły
- Zasady dotyczące JavaScriptu
- Obiekt JavaScript model
- Podstawowe przykłady i instrukcje znajdziesz w artykule Programowanie serwerów proxy interfejsu API za pomocą JavaScriptu.
- Przykłady działającego kodu JavaScript znajdziesz w przykładach Apigee Edge w GitHubie.
Artykuły na forum społeczności Apigee
Powiązane artykuły znajdziesz w społeczności Apigee: