設定 Route Optimization API

本文說明開始使用 Route Optimization API 的必要步驟。

必要條件

本程序將引導您設定 Google Cloud 帳戶和已啟用計費功能的 Google Cloud 專案。 您也應熟悉 Route Optimization API 的計費方式。

  1. 如要查看用量計費和費用,請前往「Route Optimization API 用量與計費」。
  2. 確認您有 Google Cloud 帳戶。

    登入 Google Cloud 控制台
  3. 確認您有已啟用計費功能的 Google Cloud 雲端專案。

    前往「帳單」頁面
    1. 選取專案,開啟「Billing」(帳單) 頁面。
    2. 在「帳單」頁面中:

      • 如果所選專案已啟用計費功能,且您只有一個帳單帳戶,系統會開啟「Billing」(帳單) 頁面。
      • 如果您有多個帳單帳戶,請選取「前往連結的帳單帳戶」,查看與專案相關聯的帳單帳戶詳細資料。
      • 如果已有帳單帳戶,但尚未與專案建立關聯,系統會提示您將帳單帳戶連結至專案。
      • 如果沒有帳單帳戶,或想建立新的帳單帳戶,請選取「Manage Billing Accounts」(管理帳單帳戶),建立新的帳單帳戶。詳情請參閱「建立新的自助式 Cloud Billing 帳戶」。

啟用 API

您必須先使用 Google Cloud 控制台或 gcloud 指令,在 Google Cloud 雲端專案中啟用 Route Optimization API,才能使用這項 API。

啟用 API:

控制台

  1. 在 Google Cloud 控制台中開啟產品頁面:

    啟用 Route Optimization API
  2. 點選「啟用」按鈕。

gcloud

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

進一步瞭解 Google Cloud SDK、Cloud SDK 安裝和下列指令:

Google Maps Platform 產品要求 API 呼叫必須包含 OAuth 權杖,以防未經授權的使用。

建立 OAuth 權杖

Route Optimization API 支援 OAuth 2.0 驗證。Google 支援常見的 OAuth 2.0 情境,例如網路伺服器情境。

本文說明如何在開發環境中,將 OAuth 權杖傳遞至 Route Optimization API 呼叫。如要進一步瞭解如何在正式環境中使用 OAuth,請參閱「Google 的驗證方式」。

您可以直接向伺服器發出 API 要求,呼叫 Google Maps 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 存取 Google API」。

OAuth 範圍

如要搭配使用 OAuth 和 Route Optimization API,您必須為 OAuth 權杖指派下列範圍:

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

設定角色

本文說明 Route Optimization 的 Identity and Access Management (IAM) 角色和權限。IAM 可讓您精細授予特定 Route Optimization 資源的存取權,並防止他人存取其他資源。IAM 可讓您套用最小權限安全原則,確保任何人都只擁有實際所需的權限。

當主體 (使用者、群組或服務帳戶) 呼叫 Google Cloud API 時,該主體必須具備適當的 IAM 權限,才能使用資源。如要授予主體必要權限,請將 IAM 角色授予主體。

如要熟悉 Google Cloud 的一般存取權管理方式,請參閱「IAM 總覽」。

如要允許主體存取 Route Optimization,請指派下列預先定義的 IAM 角色:

  • Route Optimization Editor (roles/routeoptimization.editor):授予使用者或服務帳戶專案中路線最佳化資源的讀取和寫入權限。包括呼叫 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

詳情請參閱「 使用 Google Cloud 控制台授予 IAM 角色」一文。

範例:在本機開發環境中試用 REST API 呼叫

如果您沒有會產生權杖的環境,但想使用 OAuth 權杖試用 Route Optimization API,請按照本節中的程序操作。

這個範例說明如何使用應用程式預設憑證 (ADC) 提供的 OAuth 權杖發出呼叫。如要進一步瞭解如何使用 ADC 搭配用戶端程式庫呼叫 Google API,請參閱「使用用戶端程式庫進行驗證」。

下列 REST 程序僅適用於開發或測試,不適用於正式環境。

必要條件

使用 ADC 發出 REST 要求前,請先透過 gcloud CLI 將憑證提供給 ADC:

  1. 安裝並初始化 gcloud CLI。詳情請參閱「安裝 gcloud CLI」。

  2. 使用 gcloud CLI 進行驗證:

    gcloud auth application-default login
  3. 完成登入程序,將憑證儲存在 ADC 使用的本機憑證檔案中。

詳情請參閱「為本機開發環境設定 ADC」。

提出 REST 要求

在這個範例中,您會傳遞兩個要求標頭:

  • 使用下列指令產生權杖,在 Authorization 標頭中傳遞 OAuth 權杖:

    gcloud auth application-default print-access-token

    傳回的權杖範圍為 https://www.googleapis.com/auth/cloud-platform。

  • 在 X-Goog-User-Project 標頭中,傳遞已啟用計費功能的 Google Cloud 雲端專案 ID 或名稱。

如要使用 OAuth 權杖呼叫 Route Optimization API,請完成下列步驟:

  1. 在下列程式碼範例中,將 PROJECT_NUMBER_OR_ID 替換為您的 Google Cloud 專案編號或 ID:

    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 指令,請按一下程式碼範例中的「Copy」(複製)。

  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 設定問題」。