Как использовать API асинхронных специальных отчетов

Вы просматриваете документацию по Apigee Edge.
Перейдите к документации по Apigee X.
Информация

Edge Analytics предоставляет широкий набор интерактивных сводок, генераторов специальных отчетов и других возможностей. Однако эти функции предназначены для интерактивного использования: вы отправляете запрос через API или пользовательский интерфейс, и он блокируется, пока сервер аналитики не предоставит ответ.

Однако время ожидания запросов к аналитике может истечь, если они выполняются слишком долго. Если запрос требует обработки большого объема данных (например, сотен гигабайт), он может завершиться с ошибкой из-за превышения времени ожидания.

Асинхронная обработка запросов позволяет запрашивать очень большие наборы данных и получать результаты позже. Если интерактивные запросы выполняются слишком долго, попробуйте использовать офлайн-запросы. Асинхронная обработка запросов может быть полезна в следующих ситуациях:

  • Анализ и создание отчетов за большие периоды времени.
  • Анализ данных с использованием различных параметров группировки и других ограничений, которые усложняют запрос.
  • Управление запросами, если вы обнаружили, что объем данных значительно увеличился для некоторых пользователей или организаций.

В этом документе рассказывается, как инициировать асинхронные запросы с помощью API. Вы также можете использовать интерфейс, как описано в разделе Как создать специальный отчет.

Сравнение API отчетов с интерфейсом

Как создавать специальные отчеты и управлять ими – статья о том, как создавать и запускать специальные отчеты с помощью интерфейса Edge. Вы можете запускать эти отчеты синхронно или асинхронно.

Большинство принципов создания специальных отчетов в интерфейсе применимы и к API. То есть при создании специальных отчетов с помощью API вы указываете показатели, параметры и фильтры, встроенные в Edge, а также любые специальные показатели, созданные с помощью правила StatisticsCollector.

Основное отличие между отчетами, созданными в интерфейсе и с помощью API, заключается в том, что отчеты, созданные с помощью API, записываются в файлы CSV или JSON (с разделителями строк), а не в визуальные отчеты, отображаемые в интерфейсе.

Ограничения в Apigee Hybrid

В Apigee hybrid действует ограничение на размер набора данных результатов в 30 МБ.

Как создать асинхронный запрос к аналитике

Асинхронные запросы к аналитическим данным выполняются в три этапа:

  1. Нажмите Отправить.

  2. Получить статус запроса.

  3. Получите результаты запроса.

Шаг 1. Отправка запроса

Вам нужно отправить запрос POST к API /queries. Этот API позволяет Edge обрабатывать ваш запрос в фоновом режиме. Если запрос отправлен успешно, API возвращает статус 201 и идентификатор, который вы будете использовать для ссылки на запрос на последующих этапах.

Пример:

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

Тело запроса представляет собой описание запроса в формате JSON. В теле JSON-запроса укажите показатели, параметры и фильтры, которые определяют отчет.

Ниже приведен пример файла json-query-file:

{ 
   "metrics":  [
     {
         "name": "message_count",
         "function": "sum",
         "alias": "sum_txn"
    }
        ],
    "dimensions": ["apiproxy"],
    "timeRange": "last24hours",
    "limit": 14400,
    "filter":"(message_count ge 0)"         
}

Полное описание синтаксиса тела запроса приведено в разделе О теле запроса ниже.

Пример ответа

Обратите внимание, что в ответе есть идентификатор запроса 9cfc0d85-0f30-46d6-ae6f-318d0cb961bd. Помимо кода статуса HTTP 201, успешное выполнение запроса подтверждает значение state в enqueued.

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

Шаг 2. Как узнать статус запроса

Чтобы запросить статус запроса, выполните вызов GET. Вы указываете идентификатор запроса, возвращенный вызовом POST. Пример:

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

Примеры ответов:

Если запрос ещё выполняется, вы получите ответ, в котором state будет заменено на 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"
}

После успешного выполнения запроса вы увидите ответ, в котором для параметра state задано значение 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"
}

Шаг 3. Как получить результаты запроса

Когда статус запроса изменится на completed, вы сможете получить результаты с помощью API get results, где идентификатор запроса снова будет 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

Чтобы получить скачанный файл, настройте инструмент, который вы используете, чтобы он сохранял скачанные файлы в вашей системе. Пример:

  • Если вы используете cURL, то можете использовать параметры -O -J, как показано выше.

  • Если вы используете Postman, нажмите кнопку Сохранить и скачать. В этом случае будет скачан ZIP-файл с названием response.

  • Если вы используете браузер Chrome, скачивание начнется автоматически.

Если запрос выполнен успешно и набор результатов не пуст, результат скачивается на клиент в виде ZIP-архива с JSON-файлом (с символом перевода строки в качестве разделителя). Название скачанного файла будет выглядеть следующим образом:

OfflineQueryResult-<query-id>.zip

Пример:

OfflineQueryResult-9cfc0d85-0f30-46d6-ae6f-318d0cb961bd.zip

ZIP-файл содержит архив JSON-результатов в формате GZ. Чтобы получить доступ к файлу JSON, распакуйте скачанный файл, а затем используйте команду gzip, чтобы извлечь файл JSON:

unzip OfflineQueryResult-9cfc0d85-0f30-46d6-ae6f-318d0cb961bd.zip
gzip -d QueryResult-9cfc0d85-0f30-46d6-ae6f-318d0cb961bd-000000000000.json.gz

О теле запроса

В этом разделе описаны параметры, которые можно использовать в теле запроса JSON для запроса. Подробнее о показателях и параметрах, которые можно использовать в запросе, рассказывается в справочнике по Аналитике.

{  
   "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"
}
Свойство Описание Обязательно?
metrics

Массив показателей. Вы можете указать один или несколько показателей для запроса, в котором каждый показатель включает: Достаточно указать название показателя:

  • name (обязательный параметр) – название показателя, как оно определено в таблице metrics.
  • function – необязательная функция агрегирования: avg, min, max или sum.

    Не все показатели поддерживают все функции агрегирования. В документации по показателям есть таблица, в которой указаны названия показателей и функции (avg, min, max, sum), поддерживаемые каждым из них.

  • alias – необязательное название свойства, содержащего данные показателя в выходных данных. Если не указано, по умолчанию используется название показателя, объединенное с названием функции агрегирования.
  • operator – необязательный параметр, позволяющий выполнить операцию с показателем после того, как будет рассчитано его значение. Работает со свойством value. Поддерживаемые операции: + - / % *.
  • value – необязательное значение, которое применяется к вычисляемому показателю с помощью указанного параметра operator.

Свойства operator и value определяют операцию постобработки, выполняемую с показателем. Например, если вы укажете показатель response_processing_latency, он вернет среднюю задержку обработки ответа в миллисекундах. Чтобы преобразовать единицы измерения в секунды, задайте для атрибута operator значение "/", а для атрибута value – значение ”1000.0“:

"metrics":[  
  {  
    "name":"response_processing_latency",
    "function":"avg",
    "alias":"average_response_time_in_seconds",
    "operator":"/",
    "value":"1000"
  }
]

Подробнее о показателях, параметрах и фильтрах Аналитики…

Нет
dimensions Массив параметров, по которым нужно сгруппировать показатели. Подробнее о поддерживаемых параметрах… Можно указать несколько параметров. Нет
timeRange Временной диапазон для запроса.

Чтобы указать диапазон времени, можно использовать следующие стандартные строки:

  • last60minutes
  • last24hours
  • last7days

Или вы можете указать timeRange как структуру, описывающую временные метки начала и окончания в формате ISO: yyyy-mm-ddThh:mm:ssZ. Пример:

"timeRange": {
    "start": "2018-07-29T00:13:00Z",
    "end": "2018-08-01T00:18:00Z"
}
Да
limit Максимальное количество строк, которое может быть возвращено в результате. Нет
filter Логическое выражение, которое можно использовать для фильтрации данных. Выражения фильтра можно комбинировать с помощью операторов AND и OR. Чтобы избежать неоднозначности, их следует заключать в скобки. Подробнее о параметрах, показателях и фильтрах Аналитики… Подробнее о том, какие токены используются для создания выражений фильтра, рассказывается в статье Синтаксис выражений фильтра. Нет
groupByTimeUnit Единица измерения времени, используемая для группировки набора результатов. Допустимые значения: second, minute, hour, day, week или month.

Если запрос содержит groupByTimeUnit, то результат представляет собой агрегированные данные на основе указанной единицы времени, а результирующая временная метка не включает точность до миллисекунд. Если в запросе не указан параметр groupByTimeUnit, то временная метка будет содержать миллисекунды.

Нет
outputFormat Формат вывода. Допустимые значения: csv или json. По умолчанию используется значение json, соответствующее JSON с разделителями в виде символов перевода строки.

Примечание. Настройте разделитель для вывода CSV-файла, используя свойство csvDelimiter.

Нет
csvDelimiter Разделитель, используемый в CSV-файле, если для параметра outputFormat задано значение csv. По умолчанию используется символ , (запятая). В качестве разделителей можно использовать запятую (,), вертикальную черту (|) и табуляцию (\t). Нет

Синтаксис выражений фильтра

В этом справочном разделе описаны токены, которые можно использовать для создания выражений фильтра в теле запроса. Например, в следующем выражении используется токен "ge" (больше или равно):

"filter":"(message_count ge 0)"
Токен Описание Примеры
in Включить в список
(apiproxy in 'ethorapi','weather-api')

(apiproxy in 'ethorapi')

(apiproxy in 'Search','ViewItem')

(response_status_code in 400,401,500,501)

Примечание. Строки должны быть заключены в кавычки.

notin Исключить из списка
(response_status_code notin 400,401,500,501)
eq Равно (==)
(response_status_code eq 504)

(apiproxy eq 'non-prod')
ne Не равно (!=)
(response_status_code ne 500)

(apiproxy ne 'non-prod')
gt Больше (>)
(response_status_code gt 500)
lt Меньше (<)
(response_status_code lt 500)
ge Больше или равно (>=)
(target_response_code ge 400)
le Меньше или равно (<=)
(target_response_code le 300)
like Возвращает значение true, если строка соответствует заданному шаблону.

Пример справа соответствует следующим критериям:

– любое значение, содержащее слово "купить";

– любое значение, заканчивающееся на "item";

– любое значение, начинающееся с Prod;

– любое значение, начинающееся с 4 (обратите внимание, что response_status_code – числовое значение);

(apiproxy like '%buy%')

(apiproxy like '%item')

(apiproxy like 'Prod%')
not like Возвращает значение false, если строка соответствует заданному шаблону.
(apiproxy not like '%buy%')

(apiproxy not like '%item')

(apiproxy not like 'Prod%')
and Позволяет использовать логический оператор "И", чтобы включить несколько выражений фильтра. Фильтр включает данные, соответствующие всем условиям.
(target_response_code gt 399) and (response_status_code ge 400)
or Позволяет использовать логику "или" для оценки различных возможных выражений фильтра. Фильтр включает данные, соответствующие хотя бы одному из условий.
(response_size ge 1000) or (response_status_code eq 500)

Ограничения и значения по умолчанию

Ниже приведены ограничения и значения по умолчанию для функции асинхронной обработки запросов.

Ограничение По умолчанию Описание
Ограничение на количество вызовов запросов Посмотреть описание Вы можете отправлять до семи запросов в час к API управления /queries, чтобы инициировать асинхронный отчет. Если вы превысите квоту на вызовы, API вернет HTTP-ответ 429.
Ограничение на количество активных запросов 10 Для организации или среды может быть активно до 10 запросов.
Порог времени выполнения запроса 6 часов Запросы, выполнение которых занимает более шести часов, будут прекращены.
Диапазон времени запроса Посмотреть описание Максимальный временной диапазон для запроса – 365 дней.
Ограничение на количество параметров и показателей 25 Максимальное количество параметров и показателей, которые можно указать в полезной нагрузке запроса.

О результатах запроса

Ниже приведен пример результата в формате JSON. Выходные данные состоят из строк JSON, разделенных символом новой строки:

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

Вы можете получать результаты по URL, пока не истечет срок хранения данных в репозитории. Подробнее об ограничениях и значениях по умолчанию…

Примеры

Пример 1. Сумма количества сообщений

Запрос на получение суммы количества сообщений за последние 60 минут.

Запрос

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

Тело запроса из файла last60minutes.json

{  
   "metrics":[  
      {  
         "name":"message_count",
         "function":"sum"
      }
   ],
   "dimensions":[  
      "apiproxy"
   ],
   "groupByTimeUnit":"minute",
   "limit":1000,
   "timeRange":"last60minutes"
}

Пример 2. Специальный диапазон дат

Запрос с использованием специального диапазона дат.

Запрос

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

Тело запроса из файла 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"
   }
}

Пример 3. Транзакции в минуту

Запрос показателя "Транзакции в минуту".

Запрос

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

Тело запроса из файла tpm.json

{  
   "metrics":[  
      {  
         "name":"tpm"
      }
   ],
   "dimensions":[  
      "apiproxy"
   ],
   "groupByTimeUnit":"minute",
   "limit":1000,
   "timeRange":{  
      "start":"2018-07-01T11:00:00Z",
      "end":"2018-07-30T11:00:00Z"
   }
}

Пример результата

Выдержка из файла результатов:

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

Пример 4. Использование выражения фильтра

Запрос с выражением фильтра, в котором используется логический оператор.

Запрос

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

Тело запроса из файла 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"
   }
}

Пример 5. Передача выражения в параметре metrics

Запрос с выражением, которое передается как часть параметра metrics. Можно использовать только простые выражения с одним оператором.

Запрос

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

Тело запроса из файла metricsExpression.json

{  
   "metrics":[  
      {  
         "name":"message_count",
         "function":"sum",
         "operator":"/",
         "value":"7"
      }
   ],
   "dimensions":[  
      "apiproxy"
   ],
   "groupByTimeUnit":"minute",
   "limit":10,
   "timeRange":"last60minutes"
}

Как создать асинхронный запрос для отчета о монетизации

Вы можете получить данные обо всех успешных транзакциях монетизации за определенный период времени, выполнив описанные ниже действия.

Как и в случае с асинхронными запросами аналитики, асинхронные запросы отчетов о монетизации выполняются в три этапа: 1) отправка запроса, 2) получение статуса запроса и 3) получение результатов запроса.

Шаг 1 – отправка запроса – описан ниже.

Шаги 2 и 3 точно такие же, как и для асинхронных аналитических запросов. Подробнее о том, как создать асинхронный аналитический запрос…

Чтобы отправить запрос на асинхронный отчет о монетизации, отправьте POST-запрос на адрес /mint/organizations/org_id/async-reports.

При необходимости вы можете указать среду, передав параметр запроса environment. Если параметр не указан, по умолчанию используется значение prod. Пример:

/mint/organizations/org_id/async-reports?environment=prod

В теле запроса укажите следующие критерии поиска:

Название Описание По умолчанию Обязательно?
appCriteria Идентификатор и организация определенного приложения, которые нужно включить в отчет. Если это свойство не указано, в отчет будут включены все приложения. Н/Д Нет
billingMonth Месяц оплаты для отчета, например "ИЮЛЬ". Н/Д Да
billingYear Год, за который создан отчет, например 2015. Н/Д Да
currencyOption Валюта для отчета. Допустимые значения:
  • LOCAL – каждая строка отчета отображается с учетом применимого тарифного плана. Это означает, что в одном отчете может быть несколько валют, если у разработчиков есть тарифные планы с разными валютами.
  • EUR – транзакции в местной валюте конвертируются и показываются в евро.
  • GPB – транзакции в местной валюте конвертируются и показываются в фунтах стерлингов.
  • USD – транзакции в местной валюте конвертируются и показываются в долларах США.

Если вы выберете EUR, GBP или USD, в отчете будут показаны все транзакции в этой валюте с учетом обменного курса на дату транзакции.

Н/Д Нет
devCriteria

Идентификатор разработчика или адрес электронной почты и название организации определенного разработчика, которые нужно включить в отчет. Если это свойство не указано, в отчет будут включены все разработчики.

Пример:

"devCriteria":[{
    "id":"RtHAeZ6LtkSbEH56",
    "orgId":"my_org"}
]
Н/Д Нет
fromDate Дата начала отчета по UTC. Н/Д Да
monetizationPakageIds Идентификатор одного или нескольких пакетов API, которые нужно включить в отчет. Если это свойство не указано, в отчет будут включены все пакеты API. Н/Д Нет
productIds Идентификатор одного или нескольких продуктов API, которые нужно включить в отчет. Если это свойство не указано, в отчет будут включены все продукты API. Н/Д Нет
ratePlanLevels

Тип тарифного плана, который нужно включить в отчет. Действительные значения:

  • DEVELOPER – тарифный план для разработчиков.
  • STANDARD – стандартный тарифный план.

Если это свойство не указано, в отчет будут включены как стандартные тарифные планы, так и тарифные планы, заданные разработчиком.

Н/Д Нет
toDate Конечная дата отчета по UTC. Н/Д Да

Например, следующий запрос создает асинхронный отчет о монетизации за июнь 2017 г. для указанного продукта API и идентификатора разработчика. Даты и время в отчетах fromDate и toDate указаны по всемирному координированному времени (UTC/GMT) и могут включать время.

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