Wyświetlasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X. Informacje
Edge Analytics udostępnia bogaty zestaw interaktywnych paneli, generatorów raportów niestandardowych i powiązanych funkcji. Te funkcje mają jednak charakter interaktywny: przesyłasz żądanie za pomocą interfejsu API lub interfejsu użytkownika, a żądanie jest blokowane, dopóki serwer Analytics nie odpowie.
Jednak żądania dotyczące funkcji analitycznych mogą zostać przerwane, jeśli ich realizacja potrwa zbyt długo. Jeśli żądanie zapytania wymaga przetworzenia dużej ilości danych (np. setek GB), może się nie udać z powodu limitu czasu.
Przetwarzanie zapytań asynchronicznie umożliwia wysyłanie zapytań dotyczących bardzo dużych zbiorów danych i pobieranie wyników w późniejszym czasie. Jeśli zauważysz, że Twoje interaktywne zapytania są przerywane, możesz rozważyć użycie zapytania offline. Oto kilka sytuacji, w których przetwarzanie zapytań asynchronicznie może być dobrą alternatywą:
- analizowanie i tworzenie raportów obejmujących długie przedziały czasu;
- analizowanie danych za pomocą różnych wymiarów grupowania i innych ograniczeń, które zwiększają złożoność zapytania;
- Zarządzanie zapytaniami, gdy zauważysz, że ilość danych znacznie wzrosła w przypadku niektórych użytkowników lub organizacji.
Z tego dokumentu dowiesz się, jak zainicjować zapytania asynchroniczne za pomocą interfejsu API. Możesz też użyć interfejsu użytkownika w sposób opisany w sekcji Uruchamianie raportu niestandardowego.
Porównanie interfejsu API do raportów z interfejsem użytkownika
W artykule Tworzenie raportów niestandardowych i zarządzanie nimi znajdziesz informacje o tym, jak używać interfejsu Edge do tworzenia i uruchamiania raportów niestandardowych. Możesz je uruchamiać synchronicznie lub asynchronicznie.
Większość koncepcji dotyczących generowania raportów niestandardowych za pomocą interfejsu użytkownika ma zastosowanie do korzystania z interfejsu API. Oznacza to, że podczas tworzenia raportów niestandardowych za pomocą interfejsu API możesz określać dane, wymiary i filtry wbudowane w Edge oraz wszelkie dane niestandardowe utworzone za pomocą reguły StatisticsCollector.
Najważniejsze różnice między raportami generowanymi w interfejsie a w interfejsie API polegają na tym, że raporty generowane za pomocą interfejsu API są zapisywane w plikach CSV lub JSON (oznaczonych znakami nowej linii) zamiast w raporcie wizualnym wyświetlanym w interfejsie.
Limity w wersji hybrydowej Apigee
Apigee hybrid nakłada limit rozmiaru 30 MB na zbiór danych z wynikiem.
Jak przesłać asynchroniczne zapytanie analityczne
Aby przesłać asynchroniczne zapytania analityczne, wykonaj 3 kroki:
Krok 1. Przesyłanie zapytania
Musisz wysłać żądanie POST do interfejsu API /queries. Ten interfejs API informuje Edge, aby przetwarzał Twoje żądanie w tle. Jeśli przesłanie zapytania się powiedzie, interfejs API zwróci kod stanu 201 i identyfikator, którego użyjesz do odwołania się do zapytania w kolejnych krokach.
Na przykład:
curl -X POST -H "Content-Type:application/json" https://api.enterprise.apigee.com/v1/organizations/myorg/environments/myenv/queries -d @json-query-file -u orgAdminEmail:password
Treść żądania to opis zapytania w formacie JSON. W treści pliku JSON określ dane, wymiary i filtry, które definiują raport.
Poniżej znajduje się przykładowy plik json-query-file
:
{
"metrics": [
{
"name": "message_count",
"function": "sum",
"alias": "sum_txn"
}
],
"dimensions": ["apiproxy"],
"timeRange": "last24hours",
"limit": 14400,
"filter":"(message_count ge 0)"
}
Pełny opis składni treści żądania znajdziesz w sekcji Informacje o treści żądania.
Przykładowa odpowiedź:
Zwróć uwagę, że identyfikator zapytania 9cfc0d85-0f30-46d6-ae6f-318d0cb961bd
jest uwzględniony w odpowiedzi. Oprócz stanu HTTP 201 wartość state
w atrybucie enqueued
oznacza, że żądanie zostało zrealizowane.
HTTP/1.1 201 Created
{
"self":"/organizations/myorg/environments/myenv/queries/9cfc0d85-0f30-46d6-ae6f-318d0cb961bd",
"created":"2018-05-10T07:11:10Z",
"state":"enqueued",
"error":"false",
}
Krok 2. Pobieranie stanu zapytania
Aby uzyskać stan zapytania, wyślij wywołanie GET. Musisz podać identyfikator zapytania zwrócony przez wywołanie metody POST. Na przykład:
curl -X GET -H "Content-Type:application/json" https://api.enterprise.apigee.com/v1/organizations/myorg/environments/myenv/queries/9cfc0d85-0f30-46d6-ae6f-318d0cb961bd -u email:password
Przykładowe odpowiedzi:
Jeśli zapytanie jest nadal w trakcie realizacji, otrzymasz taką odpowiedź, gdzie state
to running
:
{
"self": "/organizations/myorg/environments/myenv/queries/1577884c-4f48-4735-9728-5da4b05876ab",
"state": "running",
"created": "2018-02-23T14:07:27Z",
"updated": "2018-02-23T14:07:54Z"
}
Po pomyślnym zakończeniu działania zapytania zobaczysz odpowiedź podobną do tej, w której state
ma wartość completed
:
{
"self": "/organizations/myorg/environments/myenv/queries/9cfc0d85-0f30-46d6-ae6f-318d0cb961bd",
"state": "completed",
"result": {
"self": "/organizations/myorg/environments/myenv/queries/9cfc0d85-0f30-46d6-ae6f-318d0cb961bd/result",
"expires": "2017-05-22T14:56:31Z"
},
"resultRows": 1,
"resultFileSize": "922KB",
"executionTime": "11 sec",
"created": "2018-05-10T07:11:10Z",
"updated": "2018-05-10T07:13:22Z"
}
Krok 3. Pobieranie wyników zapytania
Gdy stan zapytania to completed
, możesz użyć interfejsu API get results, aby pobrać wyniki. Identyfikator zapytania to ponownie 9cfc0d85-0f30-46d6-ae6f-318d0cb961bd
.
curl -X GET -H "Content-Type:application/json" -O -J https://api.enterprise.apigee.com/v1/organizations/myorg/environments/myenv/queries/9cfc0d85-0f30-46d6-ae6f-318d0cb961bd/result -u email:password
Aby pobrać pobrany plik, musisz skonfigurować używane narzędzie, aby zapisywało pobrane pliki w Twoim systemie. Na przykład:
Jeśli używasz cURL, możesz użyć opcji
-O -J
, jak pokazano powyżej.Jeśli używasz Postmana, kliknij przycisk Zapisz i pobierz. W tym przypadku pobierany jest plik ZIP o nazwie
response
.Jeśli używasz przeglądarki Chrome, pobieranie jest akceptowane automatycznie.
Jeśli żądanie się powiedzie i jest niezerowy zbiór wyników, wynik zostanie pobrany na klienta jako skompresowany plik JSON (oddzielony znakami nowego wiersza). Nazwa pobranego pliku będzie następująca:
OfflineQueryResult-<query-id>.zip
Na przykład:
OfflineQueryResult-9cfc0d85-0f30-46d6-ae6f-318d0cb961bd.zip
Plik ZIP zawiera plik zarchiwum .gz z wynikami w formacie JSON. Aby uzyskać dostęp do pliku JSON, rozpakuj pobrany plik, a potem użyj polecenia gzip
, aby wyodrębnić plik JSON:
unzip OfflineQueryResult-9cfc0d85-0f30-46d6-ae6f-318d0cb961bd.zip
gzip -d QueryResult-9cfc0d85-0f30-46d6-ae6f-318d0cb961bd-000000000000.json.gz
Treść żądania
W tej sekcji opisaliśmy wszystkie parametry, których możesz używać w ciele żądania JSON dla zapytania. Szczegółowe informacje o danych i wymiarach, których możesz używać w zapytaniu, znajdziesz w artykule [GA4] Informacje referencyjne Analytics.
{ "metrics":[ { "name":"metric_name", "function":"aggregation_function", "alias":"metric_dispaly_name_in_results", "operator":"post_processing_operator", "value":"post_processing_operand" }, ... ], "dimensions":[ "dimension_name", ... ], "timeRange":"time_range", "limit":results_limit, "filter":"filter", "groupByTimeUnit": "grouping", "outputFormat": "format", "csvDelimiter": "delimiter" }
Właściwość | Opis | Wymagany? |
---|---|---|
metrics
|
Tablica danych. W zapytaniu możesz określić co najmniej 1 rodzaj danych, który zawiera: Wymagana jest tylko nazwa wskaźnika:
Właściwości "metrics":[ { "name":"response_processing_latency", "function":"avg", "alias":"average_response_time_in_seconds", "operator":"/", "value":"1000" } ] Więcej informacji znajdziesz w artykule [GA4] Dane, wymiary i filtry Analytics – informacje. |
Nie |
dimensions
|
Tablica wymiarów do grupowania danych. Więcej informacji znajdziesz na liście obsługiwanych wymiarów. Możesz podać większą liczbę wymiarów. | Nie |
timeRange
|
Przedział czasowy zapytania.
Do określenia zakresu czasowego możesz użyć tych wstępnie zdefiniowanych ciągów znaków:
Możesz też podać "timeRange": { "start": "2018-07-29T00:13:00Z", "end": "2018-08-01T00:18:00Z" } |
Tak |
limit
|
Maksymalna liczba wierszy, które mogą zostać zwrócone w wyniku. | Nie |
filter
|
Wyrażenie logiczne, którego można używać do filtrowania danych. Wyrażenia filtra można łączyć za pomocą operatorów AND/OR i aby uniknąć niejednoznaczności, należy je ująć w nawiasy. Więcej informacji o polach dostępnych do filtrowania znajdziesz w artykule [GA4] Dane, wymiary i filtry Analytics. Więcej informacji o tokenach używanych do tworzenia wyrażeń filtra znajdziesz w artykule Składnia wyrażeń filtra. | Nie |
groupByTimeUnit
|
Jednostka czasu używana do grupowania zbioru wyników. Prawidłowe wartości to: second , minute , hour , day , week lub month .
Jeśli zapytanie zawiera |
Nie |
outputFormat
|
Format wyjściowy. Prawidłowe wartości to: csv lub json . Domyślnie jest to json , co odpowiada formatowi JSON z rozdzielaniem znakami nowego wiersza.
Uwaga: użyj właściwości |
Nie |
csvDelimiter
|
Ogranicznik używany w pliku CSV, jeśli parametr outputFormat ma wartość csv . Domyślnie jest to znak , (przecinek). Obsługiwane znaki separatorów to przecinek (, ), linia pionowa (| ) i tabulacja (\t ).
|
Nie |
Składnia wyrażenia filtra
W tej sekcji znajdziesz opis tokenów, których możesz używać do tworzenia wyrażeń filtrujących w ciele żądania. Na przykład to wyrażenie używa tokena „ge” (większe lub równe):
"filter":"(message_count ge 0)"
Token | Opis | Przykłady |
---|---|---|
in
|
Uwzględnij na liście | (apiproxy in 'ethorapi','weather-api') (apiproxy in 'ethorapi') (apiproxy in 'Search','ViewItem') (response_status_code in 400,401,500,501) Uwaga: ciągi znaków muszą być ujęte w cudzysłowie. |
notin
|
Wyklucz z listy | (response_status_code notin 400,401,500,501) |
eq
|
Równe (==)
|
(response_status_code eq 504) (apiproxy eq 'non-prod') |
ne
|
Inne niż (!=)
|
(response_status_code ne 500) (apiproxy ne 'non-prod') |
gt
|
Większy niż (>)
|
(response_status_code gt 500) |
lt
|
Mniej niż (<)
|
(response_status_code lt 500) |
ge
|
Większe lub równe (>=)
|
(target_response_code ge 400) |
le
|
Mniejsze lub równe (<=)
|
(target_response_code le 300) |
like
|
Zwraca wartość „prawda”, jeśli wzór ciągu znaków pasuje do podanego wzorca.
Przykład po prawej stronie pokazuje dopasowania w ten sposób: – każda wartość zawierająca słowo „kup” – dowolna wartość kończąca się na „item” – dowolna wartość zaczynająca się od „Prod”. – dowolna wartość zaczynająca się od 4 (uwaga: response_status_code jest wartością liczbową);
|
(apiproxy like '%buy%') (apiproxy like '%item') (apiproxy like 'Prod%') |
not like
|
Zwraca wartość „false”, jeśli wzór ciągu odpowiada podanemu wzorowi. | (apiproxy not like '%buy%') (apiproxy not like '%item') (apiproxy not like 'Prod%') |
and
|
Umożliwia użycie operatora logicznego „i” do uwzględnienia więcej niż jednego wyrażenia filtra. Filtr obejmuje dane, które spełniają wszystkie warunki. | (target_response_code gt 399) and (response_status_code ge 400) |
or
|
Umożliwia użycie logiki „lub” do oceny różnych możliwych wyrażeń filtra. Filtr zawiera dane, które spełniają co najmniej 1 warunek. | (response_size ge 1000) or (response_status_code eq 500) |
Ograniczenia i wartości domyślne
Poniżej znajdziesz listę ograniczeń i wartości domyślnych funkcji asynchronicznego przetwarzania zapytań.
Ograniczenie | Domyślny | Opis |
---|---|---|
Limit połączeń zapytań | Zobacz opis | Aby zainicjować raport asynchroniczny, możesz wykonać maksymalnie 7 wywołań na godzinę interfejsu API zarządzania /queries. Jeśli przekroczysz limit wywołań, interfejs API zwróci kod odpowiedzi HTTP 429. |
Limit aktywnych zapytań | 10 | W przypadku organizacji lub środowiska możesz mieć maksymalnie 10 aktywnych zapytań. |
Próg czasu wykonywania zapytań | 6 godzin | Zapytania, które trwają dłużej niż 6 godzin, zostaną przerwane. |
Zakres czasowy zapytania | Zobacz opis | Maksymalny dozwolony zakres czasowy zapytania to 365 dni. |
Limit wymiarów i danych | 25 | Maksymalna liczba wymiarów i rodzajów danych, które możesz podać w pliku danych zapytania. |
Informacje o wynikach zapytania
Poniżej znajdziesz przykładowy wynik w formacie JSON. Dane wyjściowe to wiersze JSON rozdzielone znakiem nowego wiersza:
{"message_count":"10209","apiproxy":"guest-auth-v3","hour":"2018-08-07 19:26:00 UTC"}
{"message_count":"2462","apiproxy":"carts-v2","hour":"2018-08-06 13:16:00 UTC"}
…
Wyniki możesz pobierać z adresu URL do momentu wygaśnięcia danych w repozytorium. Zobacz Ograniczenia i wartości domyślne.
Przykłady
Przykład 1. Suma liczby wiadomości
Zapytanie o sumę liczby wiadomości w ciągu ostatnich 60 minut.
Zapytanie
curl -X POST -H "Content-Type: application/json" -H "Accept: application/json" https://api.enterprise.apigee.com/v1/organizations/myorg/environments/test/queries" -d @last60minutes.json -u orgAdminEmail:password
Treść żądania z last60minutes.json
{
"metrics":[
{
"name":"message_count",
"function":"sum"
}
],
"dimensions":[
"apiproxy"
],
"groupByTimeUnit":"minute",
"limit":1000,
"timeRange":"last60minutes"
}
Przykład 2. Niestandardowy zakres czasu
Zapytanie z użyciem niestandardowego zakresu czasowego.
Zapytanie
curl -X POST -H "Content-Type: application/json" -H "Accept: application/json" https://api.enterprise.apigee.com/v1 /organizations/myorg/environments/test/queries" -d @last60minutes.json -u orgAdminEmail:password
Treść żądania z last60minutes.json
{
"metrics":[
{
"name":"message_count",
"function":"sum"
},
{
"name":"total_response_time",
"function":"avg",
"alias":"average_response_time"
}
],
"dimensions":[
"apiproxy"
],
"groupByTimeUnit":"minute",
"limit":1000,
"timeRange":{
"start":"2018-11-01T11:00:00Z",
"end":"2018-11-30T11:00:00Z"
}
}
Przykład 3. Transakcje na minutę
Zapytanie dotyczące danych o transakcjach na minutę (tpm).
Zapytanie
curl -X POST -H "Content-Type: application/json" -H "Accept: application/json" https://api.enterprise.apigee.com/v1/organizations/myorg/environments/test/queries" -d @tpm.json -u orgAdminEmail:password
Treść żądania z tpm.json
{
"metrics":[
{
"name":"tpm"
}
],
"dimensions":[
"apiproxy"
],
"groupByTimeUnit":"minute",
"limit":1000,
"timeRange":{
"start":"2018-07-01T11:00:00Z",
"end":"2018-07-30T11:00:00Z"
}
}
Przykładowy wynik
Wycinek z pliku wyników:
{"tpm":149995.0,"apiproxy":"proxy_1","minute":"2018-07-06 12:16:00 UTC"} {"tpm":149998.0,"apiproxy":"proxy_1","minute":"2018-07-09 15:12:00 UTC"} {"tpm":3.0,"apiproxy":"proxy_2","minute":"2018-07-11 16:18:00 UTC"} {"tpm":148916.0,"apiproxy":"proxy_1","minute":"2018-07-15 17:14:00 UTC"} {"tpm":150002.0,"apiproxy":"proxy_1","minute":"2018-07-18 18:11:00 UTC"} ...
Przykład 4. Używanie wyrażenia filtra
Zapytanie z wyrażeniem filtra, które używa operatora logicznego.
Zapytanie
curl -X POST -H "Content-Type:application/json" https://api.enterprise.apigee.com/v1/organizations/myorg/environments/test/queries" -d @filterCombo.json -u orgAdminEmail:password
Treść żądania z pliku filterCombo.json
{
"metrics":[
{
"name":"message_count",
"function":"sum"
},
{
"name":"total_response_time",
"function":"avg",
"alias":"average_response_time"
}
],
"filter":"(apiproxy ne \u0027proxy_1\u0027) and (apiproxy ne \u0027proxy_2\u0027)",
"dimensions":[
"apiproxy"
],
"groupByTimeUnit":"minute",
"limit":1000,
"timeRange":{
"start":"2018-11-01T11:00:00Z",
"end":"2018-11-30T11:00:00Z"
}
}
Przykład 5. Przekazywanie wyrażenia w parametrze danych
Zapytanie z wyrażeniem przekazanym jako część parametru danych. Możesz używać tylko prostych wyrażeń z jednym operatorem.
Zapytanie
curl -X POST -H "Content-Type:application/json" https://api.enterprise.apigee.com/v1/organizations/myorg/environments/test/queries" -d @metricsExpression.json -u orgAdminEmail:password
Treść żądania z metricsExpression.json
{
"metrics":[
{
"name":"message_count",
"function":"sum",
"operator":"/",
"value":"7"
}
],
"dimensions":[
"apiproxy"
],
"groupByTimeUnit":"minute",
"limit":10,
"timeRange":"last60minutes"
}
Jak przesłać asynchroniczne zapytanie o raport o zarabianiu
Możesz rejestrować wszystkie transakcje z zarabianiem w danym zakresie czasowym zgodnie z określonym zestawem kryteriów, wykonując czynności opisane w tej sekcji.
Podobnie jak w przypadku asynchronicznych zapytań analitycznych, asynchroniczne zapytania dotyczące raportu o zarabianiu możesz wysyłać w 3 kroki: (1) prześlij zapytanie, (2) uzyskaj stan zapytania i (3) pobierz wyniki zapytania.
Krok 1, czyli przesyłanie zapytania, opisaliśmy poniżej.
Kroki 2 i 3 są takie same jak w przypadku asynchronicznych zapytań analitycznych. Więcej informacji znajdziesz w artykule Jak wysłać asynchroniczne zapytanie Analytics.
Aby przesłać zapytanie o raport zarabiania asynchronicznego, wyślij żądanie POST do adresu /mint/organizations/org_id/async-reports
.
Opcjonalnie możesz określić środowisko, podając parametr zapytania environment
. Jeśli nie podasz żadnej wartości, parametr zapytania zostanie domyślnie ustawiony na prod
. Na przykład:
/mint/organizations/org_id/async-reports?environment=prod
W treści żądania podaj te kryteria wyszukiwania:
Nazwa | Opis | Domyślna | Wymagany? |
appCriteria |
identyfikator i organizację, do której należy konkretna aplikacja, która ma być uwzględniona w raporcie. Jeśli ta właściwość nie jest określona, w raporcie uwzględnione są wszystkie aplikacje. | Nie dotyczy | Nie |
billingMonth |
Miesiąc rozliczeniowy raportu, np. LIPIEC. | Nie dotyczy | Tak |
billingYear |
Rok rozliczeniowy raportu, np. 2015 r. | Nie dotyczy | Tak |
currencyOption |
Waluta raportu. Prawidłowe wartości to:
Jeśli wybierzesz euro, funta szterlinga lub dolara amerykańskiego, raport będzie zawierał wszystkie transakcje w wybranej walucie, na podstawie kursu wymiany obowiązującego w dniu transakcji. |
Nie dotyczy | Nie |
devCriteria
|
identyfikator dewelopera lub adres e-mail oraz nazwę organizacji konkretnego dewelopera, aby uwzględnić je w raporcie; Jeśli ta właściwość nie jest określona, w raporcie uwzględnieni są wszyscy deweloperzy. Na przykład: "devCriteria":[{ "id":"RtHAeZ6LtkSbEH56", "orgId":"my_org"} ] |
Nie dotyczy | Nie |
fromDate
|
Data rozpoczęcia raportu według czasu UTC. | Nie dotyczy | Tak |
monetizationPakageIds |
Identyfikator co najmniej 1 pakietu interfejsu API do uwzględnienia w raporcie. Jeśli nie określisz tej właściwości, w raporcie zostaną uwzględnione wszystkie pakiety interfejsu API. | Nie dotyczy | Nie |
productIds
|
Identyfikator co najmniej 1 usługi interfejsu API, którą chcesz uwzględnić w raporcie. Jeśli ta właściwość nie jest określona, w raporcie uwzględnione są wszystkie usługi interfejsu API. | Nie dotyczy | Nie |
ratePlanLevels |
Typ planu cenowego, który ma być uwzględniony w raporcie. Prawidłowe wartości:
Jeśli ta usługa nie jest określona, w raporcie uwzględniane są zarówno plany cenowe dla deweloperów, jak i standardowe. |
Nie dotyczy | Nie |
toDate
|
Data zakończenia raportu w skali UTC. | Nie dotyczy | Tak |
Na przykład żądanie poniżej generuje asynchroniczny raport o zarabianiu za miesiąc czerwiec 2017 r. dla wskazanego produktu interfejsu API i identyfikatora dewelopera. Daty i godziny w raportach fromDate
i toDate
są podane w czasie UTC/GMT i mogą zawierać godziny.
curl -H "Content-Type:application/json" -X POST -d \ '{ "fromDate":"2017-06-01 00:00:00", "toDate":"2017-06-30 00:00:00", "productIds": [ "a_product" ], "devCriteria": [{ "id": "AbstTzpnZZMEDwjc", "orgId": "myorg" }] }' \ "https://api.enterprise.apigee.com/v1/mint/organizations/myorg/async-reports?environment=prod" \ -u orgAdminEmail:password