Для интеграции информации о ценах и наличии товаров партнерам потребуется внедрить Partner API. Этот интерфейс основан на REST и позволяет Google отправлять запросы в режиме реального времени по протоколу HTTP. Подробности об отдельных методах API описаны в разделе «Справочник» , а информацию о сквозных аспектах можно найти далее.
Формат запроса и ответа
Первоначально будут поддерживаться только форматы JSON. Если требуются дополнительные форматы запросов или ответов, обратитесь в команду Travel Transport по адресу transport-help@google.com, чтобы обсудить ваш случай.
Запросы будут отправляться с использованием HTTP-метода POST, при этом текст запроса будет содержаться в теле POST-запроса.
Обратите внимание, что для большей ясности структуры документация по интерфейсу API представлена в виде определений сообщений Protocol Buffer, а преобразование определения сообщения Protocol Buffer в объект JSON определяется каноническим сопоставлением JSON с использованием параметров для отправки полей со значениями по умолчанию и для использования имен полей proto вместо имен в нижнем регистре (lowerCamelCase) .
Аутентификация
Google поддерживает HTTP Digest Authentication, OAuth 2.0 и аутентификацию с помощью клиентских сертификатов (см. раздел «Конфигурация партнера» ). Партнеры должны предоставить Google правильные учетные данные во время тестирования API:
- Для доступа к дайджесту: имя пользователя и пароль.
- Для OAuth 2.0: client_id и client_secret.
- Для сертификата: клиентский SSL-сертификат.
Коды состояния и обработка ошибок
В общем случае, в HTTP-ответах могут возвращаться следующие коды состояния:
| HTTP-код | Описание HTTP | Примечания |
|---|---|---|
| 2xx | ХОРОШО | Это не ошибка; возвращается в случае успеха. Ожидается, что тело ответа будет содержать успешный результат (например, TripOptionsResult), а не сообщение об ошибке. |
| 400 | Неверный запрос | Полученный запрос недействителен. Для возврата дополнительных сведений об ошибке в теле ответа следует использовать ответы с ошибками, специфичными для конкретного метода. Код HTTP 400 следует использовать, как правило, только в том случае, если Google допустил техническую ошибку (например, неправильное имя поля в запросе). |
| 403 | Запрещенный | Разрешение отклонено/запрещено (вызывающий абонент известен и запрос отклонен). Этот ответ не следует использовать для отказов, вызванных исчерпанием ресурсов (в таких случаях используйте Too Many Requests). Ответ Forbidden не следует использовать, если вызывающего абонента невозможно идентифицировать (в таких случаях используйте Unauthorized). |
| 404 | Не найдено | Запрошенный ресурс не найден. Для возврата дополнительных сведений об ошибке в теле ответа следует использовать ответы, специфичные для конкретного метода. |
| 429 | Слишком много запросов | Часть ресурсов исчерпана, возможно, это квота для каждого пользователя. |
| 500 | Внутренняя ошибка сервера | Внутренние ошибки. Это означает, что некоторые инварианты, ожидаемые базовой системой, были нарушены. Этот код ошибки предназначен для серьезных ошибок и указывает на ошибку в реализации API-сервера партнера. |
| 503 | Сервис недоступен | Сервис недоступен. Вероятнее всего, это временная проблема, которую можно исправить, повторив попытку с задержкой. |
| 504 | Таймаут шлюза | Срок выполнения операции истёк до её завершения. Для операций, изменяющих состояние системы, эта ошибка может быть возвращена даже в случае успешного завершения операции. Например, успешный ответ от сервера мог быть задержан настолько, что истек срок выполнения операции. |
Обратите внимание, что для всех предварительных условий, недопустимых аргументов или ошибок "не найдено":
- Следует использовать ответы или сообщения об ошибках, специфичные для каждого метода и определенные в API.
- Следует использовать правильный HTTP-код, указанный в кодах, специфичных для данного метода (см., например,
TripOptionsErrorType).
Это позволяет предоставлять более подробную информацию об ошибках такого типа. Эта информация может быть использована для:
- Определите, можно ли повторить попытку при возникновении ошибки.
- Повторная попытка
SEGMENT_KEY_NOT_FOUNDневозможна.
- Повторная попытка
- Исправьте устаревшую информацию.
-
Unavailable.Reason.CANCELEDуказывает на то, что поездку следует удалить (обратите внимание, что это часть успешного ответа). - Коды ошибок
Unavailable.Reason.TEMPORARILY_UNAVAILABLE, а такжеSEGMENT_KEY_NOT_FOUND,SUBOPTIMAL_ITINERARY,BOOKING_WINDOW_NOT_SUPPORTEDиTICKETING_PROHIBITEDудаляют все цены, ранее полученные из кэша.
-
- Предоставьте пользователям соответствующие рекомендации.
Приведенный в TripOptionsError список ошибок, специфичных для каждого метода, является отправной точкой. Если вам потребуются дополнительные типы ошибок, обратитесь в команду Google Travel Transport.
QPS (запросов в секунду)
Уровень QPS, отправляемый Google, вероятно, будет варьироваться в зависимости от наличия товаров у партнеров и количества пользователей, просматривающих кэшированные данные или переходящих на веб-сайты партнеров для бронирования.
Задержка
Запросы будут завершаться по истечении 10 секунд. Для бета-версий интеграции с партнерами дополнительных ограничений по задержке не предусмотрено. Однако дополнительные показатели уровня обслуживания (SLO) по задержке будут определены в наших рекомендациях по качеству данных для партнеров.
Валюты, налоги и сборы
Все цены, отправляемые в Google, должны включать все налоги и сборы и быть указаны в поддерживаемой валюте.
Валюта
Валюта для указания цены задается с помощью поля currency_code , которое должно представлять собой допустимый код валюты по стандарту ISO 4217 .
Пример: 10,25 долларов США:
{
"price": {
"currency_code": "USD",
"units": 10,
"nanos": 250000000
}
}
Налоги и сборы
Указанная вами цена должна быть окончательной, общей суммой, которую заплатит пользователь, включая все налоги (например, НДС) и любые дополнительные сборы (например, комиссии за бронирование или использование платежной карты). Дополнительную детализацию стоимости можно добавить, используя повторяющееся поле line_items . Google отобразит пользователю общую цену с дополнительной детализацией стоимости.