Партнерский сервер

Для интеграции информации о ценах и наличии товара партнёрам необходимо реализовать 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-дайджест-аутентификацию и аутентификацию по клиентскому сертификату. Все HTTP-вызовы API партнёра используют либо HTTP-дайджест-аутентификацию (с именем пользователя и паролем), либо аутентификацию по клиентскому сертификату. Партнёр должен предоставить Google имя пользователя и пароль (см. раздел «Конфигурация партнёра» ) или клиентский 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 отобразит пользователю общую стоимость с необязательной разбивкой стоимости.