Как настроить Route Optimization API

В этом документе описаны шаги, которые необходимо выполнить, чтобы начать использовать Route Optimization API.

Требования

В этом разделе рассказывается, как настроить аккаунт Google Cloud и облачный проект с включенными платежными функциями. Вы также должны знать, как взимается плата за использование Route Optimization API.

  1. Изучите информацию о ценах и оплате в статье Статистика использования и оплата Route Optimization API.
  2. Убедитесь, что у вас есть аккаунт Google Cloud.

    Войдите в консоль Google Cloud.
  3. Убедитесь, что у вас есть проект Google Cloud с включенными платежными функциями.

    Перейти на страницу "Оплата"
    1. Выберите проект, чтобы открыть страницу Billing (Оплата).
    2. На странице Оплата:

      • Если для выбранного проекта уже включена оплата и у вас только один платежный аккаунт, откроется страница Оплата.
      • Если у вас несколько платежных аккаунтов, нажмите Открыть этот аккаунт. Появится страница с информацией о платежном аккаунте, связанном с проектом.
      • Если у вас есть платежный аккаунт, но он не связан с проектом, вам будет предложено связать их.
      • Если у вас нет платежного аккаунта или вы хотите создать новый, выберите Manage Billing Accounts (Управление платежными аккаунтами). Подробнее о том, как создать платежный аккаунт Cloud для самостоятельного использования…

Включение API

Прежде чем использовать Route Optimization API, необходимо включить его в облачном проекте Google Cloud с помощью консоли Google Cloud или команды gcloud.

Чтобы включить API, выполните следующие действия:

Консоль

  1. Откройте страницу продукта в консоли Google Cloud:

    Как включить Route Optimization API
  2. Нажмите Включить.

gcloud

gcloud services enable \
    --project "PROJECT" \
    "routeoptimization.googleapis.com"

Прочитайте статьи о Google Cloud SDK, установке Cloud SDK и следующих командах:

Чтобы предотвратить несанкционированное использование продуктов платформы Google Карт, вызовы API должны содержать токен OAuth.

Как создать токен OAuth

Route Optimization API поддерживает аутентификацию OAuth 2.0. Google поддерживает распространенные сценарии OAuth 2.0, например для веб-сервера.

В этом документе описывается, как передать токен OAuth в вызов Route Optimization API в среде разработки. Дополнительную информацию об использовании OAuth в рабочей среде можно найти в статье Способы аутентификации в Google.

Вы можете вызывать Google Maps API напрямую, отправляя запросы к API на сервер, или использовать клиентские библиотеки, чтобы упростить код. Google Карты предоставляют клиентские библиотеки для Go, Java, Node.js и Python. Подробнее о клиентских библиотеках Route Optimization API…

Общая информация о протоколе OAuth

Создавать токены доступа и управлять ими с помощью OAuth можно несколькими способами в зависимости от среды развертывания.

Вы можете использовать OAuth 2.0 для межсерверного взаимодействия между вашим приложением и сервисом Google. В этом случае вы используете сервисный аккаунт, связанный с вашим приложением, а не с отдельным пользователем. Вы можете отправлять запросы к API, используя сервисный аккаунт, без непосредственного участия пользователей. Подробнее о способах аутентификации в Google…

Вы также можете интегрировать Route Optimization API в мобильное приложение для Android или iOS. Подробную информацию об использовании OAuth и управлении токенами доступа для разных сред развертывания можно найти в статье Использование OAuth 2.0 для доступа к API Google.

Области действия OAuth

Чтобы использовать OAuth с Route Optimization API, необходимо назначить токену OAuth следующую область действия:

https://www.googleapis.com/auth/cloud-platform

Роли пользователей

В этом документе содержится информация о ролях и разрешениях Identity and Access Management (IAM) для Route Optimization. IAM позволяет предоставлять детализированный доступ к определенным ресурсам Route Optimization и помогает предотвратить доступ к другим ресурсам. IAM позволяет применять принцип минимальных привилегий, согласно которому никто не должен иметь больше разрешений, чем ему действительно нужно.

Когда субъект (пользователь, группа или сервисный аккаунт) вызывает Google Cloud API, у него должны быть разрешения IAM, необходимые для использования ресурса. Чтобы предоставить субъекту необходимые разрешения, назначьте ему роль IAM.

Чтобы узнать больше об управлении доступом в Google Cloud, ознакомьтесь с обзором IAM.

Стандартные роли IAM, позволяющие агентам использовать Route Optimization API:

  • Route Optimization Editor (roles/routeoptimization.editor) – предоставляет пользователю или сервисному аккаунту доступ на чтение и запись к ресурсам Route Optimization в проекте. В частности, вы можете вызывать методы OptimizeTours и BatchOptimizeTours, а также получать информацию о продолжительных операциях с помощью метода GetOperation.
  • Route Optimization Viewer (roles/routeoptimization.viewer) – предоставляет доступ только для чтения к ресурсам Route Optimization в проекте. Эта роль позволяет вызывать OptimizeTours и получать доступ к продолжительным операциям с помощью GetOperation.
Вы можете назначить роль, создав привязку для субъекта с помощью Cloud SDK:
gcloud projects add-iam-policy-binding PROJECT \
  --member user:someone@example.com \
  --role roles/routeoptimization.editor

Подробную информацию вы найдете в статье о том, как назначить роль IAM в консоли Google Cloud.

Пример. Попробуйте вызовы REST API в локальной среде разработки

Если у вас нет среды, которая генерирует токены, и вы хотите попробовать Route Optimization API с токеном OAuth, следуйте инструкциям в этом разделе.

В этом примере показано, как использовать токен OAuth, предоставленный Application Default Credentials (ADC), для выполнения вызова. Подробнее о том, как выполнить аутентификацию с помощью клиентских библиотек с использованием ADC для вызова API Google…

Приведенную ниже процедуру REST следует использовать только для разработки или тестирования, но не для рабочей среды.

Требования

Прежде чем отправлять REST-запрос с помощью ADC, предоставьте ADC учетные данные, используя CLI gcloud:

  1. Установите и инициализируйте интерфейс командной строки gcloud. Подробнее о том, как установить gcloud CLI…

  2. Выполните аутентификацию с помощью интерфейса командной строки gcloud:

    gcloud auth application-default login
  3. Завершите процесс входа, чтобы сохранить учетные данные в локальном файле учетных данных, используемом ADC.

Подробнее о том, как настроить ADC для локальной среды разработки…

Как выполнить REST-запрос

В этом примере вы передаете два заголовка запроса:

  • Передайте токен OAuth в заголовке Authorization, используя следующую команду для создания токена:

    gcloud auth application-default print-access-token

    Возвращенный токен имеет область действия https://www.googleapis.com/auth/cloud-platform.

  • Передайте идентификатор или название проекта Google Cloud, для которого включена оплата, в заголовке X-Goog-User-Project.

Чтобы вызвать Route Optimization API с помощью токена OAuth, выполните следующие действия:

  1. В следующем примере кода замените PROJECT_NUMBER_OR_ID на номер или идентификатор облачного проекта Google Cloud:

    curl -X POST 'https://routeoptimization.googleapis.com/v1/projects/PROJECT_NUMBER_OR_ID:optimizeTours' \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    --data-binary @- << EOM
    {
    "model": {
    "shipments": [
      {
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.73881799999999,
              "longitude": -122.4161
            }
          }
        ],
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.79581,
              "longitude": -122.4218856
            }
          }
        ]
      }
    ],
    "vehicles": [
      {
        "startLocation": {
          "latitude": 37.73881799999999,
          "longitude": -122.4161
        },
        "endLocation": {
          "latitude": 37.73881799999999,
          "longitude": -122.4161
        }
      }
    ],
    "globalStartTime": "2023-01-13T16:00:00-08:00",
    "globalEndTime": "2023-01-14T16:00:00-08:00"
    }
    }
    EOM
    
  2. Чтобы скопировать команду curl, нажмите Копировать в примере кода.

  3. Вставьте команду в окно терминала и запустите ее.

Вы получите объект JSON:

{
  "routes": [
    {
      "vehicleStartTime": "2023-01-14T00:00:00Z",
      "vehicleEndTime": "2023-01-14T00:39:22Z",
      "visits": [
        {
          "isPickup": true,
          "startTime": "2023-01-14T00:00:00Z",
          "detour": "0s"
        },
        {
          "startTime": "2023-01-14T00:19:53Z",
          "detour": "0s"
        }
      ],
      "transitions": [
        {
          "travelDuration": "0s",
          "waitDuration": "0s",
          "totalDuration": "0s",
          "startTime": "2023-01-14T00:00:00Z"
        },
        {
          "travelDuration": "1193s",
          "travelDistanceMeters": 9007,
          "waitDuration": "0s",
          "totalDuration": "1193s",
          "startTime": "2023-01-14T00:00:00Z"
        },
        {
          "travelDuration": "1169s",
          "travelDistanceMeters": 9546,
          "waitDuration": "0s",
          "totalDuration": "1169s",
          "startTime": "2023-01-14T00:19:53Z"
        }
      ],
      "metrics": {
        "performedShipmentCount": 1,
        "travelDuration": "2362s",
        "waitDuration": "0s",
        "delayDuration": "0s",
        "breakDuration": "0s",
        "visitDuration": "0s",
        "totalDuration": "2362s",
        "travelDistanceMeters": 18553
      }
    }
  ],
  "metrics": {
    "aggregatedRouteMetrics": {
      "performedShipmentCount": 1,
      "travelDuration": "2362s",
      "waitDuration": "0s",
      "delayDuration": "0s",
      "breakDuration": "0s",
      "visitDuration": "0s",
      "totalDuration": "2362s",
      "travelDistanceMeters": 18553
    },
    "usedVehicleCount": 1,
    "earliestVehicleStartTime": "2023-01-14T00:00:00Z",
    "latestVehicleEndTime": "2023-01-14T00:39:22Z"
  }
}

Устранение неполадок

Если в ответ на запрос вы получаете сообщение об ошибке о том, что API не поддерживает учетные данные конечных пользователей, ознакомьтесь с разделом Устранение неполадок с настройкой ADC.