Konfigurowanie interfejsu Route Optimization API

W tym dokumencie opisano czynności, które musisz wykonać, aby zacząć korzystać z interfejsu Route Optimization API.

Wymagania wstępne

Ta procedura przeprowadzi Cię przez proces konfigurowania konta Google Cloud i projektu w chmurze Google Cloud z włączonymi płatnościami. Musisz też wiedzieć, jak naliczane są opłaty za korzystanie z interfejsu Route Optimization API.

  1. Sprawdź płatności i koszty użytkowania w artykule Użytkowanie i płatności Route Optimization API.
  2. Sprawdź, czy masz konto Google Cloud.

    Zaloguj się w konsoli Google Cloud
  3. Sprawdź, czy masz projekt Google Cloud z włączonymi płatnościami.

    Otwórz stronę Płatności
    1. Wybierz projekt, aby otworzyć stronę Płatności.
    2. Na stronie Płatności:

      • Jeśli w wybranym projekcie płatności są już włączone i masz tylko jedno konto rozliczeniowe, otworzy się strona Płatności.
      • Jeśli masz kilka kont rozliczeniowych, kliknij Przejdź do połączonego konta, aby wyświetlić szczegóły konta rozliczeniowego powiązanego z projektem.
      • Jeśli konto rozliczeniowe istnieje, ale nie jest powiązane z projektem, pojawi się prośba o połączenie konta rozliczeniowego z projektem.
      • Jeśli nie masz konta rozliczeniowego lub chcesz utworzyć nowe, wybierz Zarządzaj kontami rozliczeniowymi, aby utworzyć nowe konto rozliczeniowe. Więcej informacji znajdziesz w artykule o tworzeniu nowego samoobsługowego konta rozliczeniowego Cloud.

Włącz API

Zanim zaczniesz korzystać z Route Optimization API, musisz włączyć ten interfejs w projekcie w chmurze Google Cloud za pomocą konsoli Google Cloud lub polecenia gcloud.

Aby włączyć interfejs API:

Konsola

  1. Otwórz stronę produktu w konsoli Google Cloud:

    Włączanie Route Optimization API
  2. Kliknij przycisk Włącz.

gcloud

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

Więcej informacji o pakiecie SDK Google Cloud, instalacji pakietu SDK Cloud i tych poleceniach:

Usługi Google Maps Platform wymagają, aby wywołania interfejsu API zawierały token OAuth, co zapobiega nieautoryzowanemu użyciu.

Tworzenie tokena OAuth

Route Optimization API obsługuje uwierzytelnianie OAuth 2.0. Google obsługuje typowe scenariusze OAuth 2.0, takie jak scenariusze dotyczące serwera WWW.

Z tego dokumentu dowiesz się, jak przekazać token OAuth do wywołania interfejsu Route Optimization API w środowisku programistycznym. Więcej informacji o używaniu protokołu OAuth w środowisku produkcyjnym znajdziesz w artykule o metodach uwierzytelniania w Google.

Interfejsy API Map Google możesz wywoływać bezpośrednio, wysyłając żądania do interfejsu API do serwera, lub możesz używać bibliotek klienta, aby uprościć kod. Mapy Google udostępniają biblioteki klienta dla języków Go, Java, Node.js i Python. Więcej informacji znajdziesz w artykule Biblioteki klienta Route Optimization API.

Omówienie protokołu OAuth

Tokeny dostępu możesz tworzyć i zarządzać nimi za pomocą protokołu OAuth na kilka sposobów, w zależności od środowiska wdrażania.

Możesz używać protokołu OAuth 2.0 do interakcji między serwerami aplikacji i usługi Google. W tym scenariuszu używasz konta usługi powiązanego z aplikacją, a nie z konkretnym użytkownikiem. Możesz wysyłać żądania do interfejsu API za pomocą konta usługi bez bezpośredniego angażowania użytkowników. Więcej informacji o metodach uwierzytelniania znajdziesz w artykule o metodach uwierzytelniania w Google.

Możesz też zintegrować Route Optimization API z aplikacją mobilną na Androida lub iOS. Więcej informacji o używaniu protokołu OAuth i zarządzaniu tokenami dostępu w różnych środowiskach wdrażania znajdziesz w artykule Używanie OAuth 2.0 do korzystania z interfejsów API Google.

zakresów protokołu OAuth

Aby używać protokołu OAuth z interfejsem Route Optimization API, musisz przypisać tokenowi OAuth ten zakres:

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

Konfigurowanie ról

Ten dokument zawiera informacje o rolach i uprawnieniach Identity and Access Management (Uprawnienia) w przypadku optymalizacji trasy. Uprawnienia umożliwiają przyznawanie szczegółowego dostępu do określonych zasobów optymalizacji trasy i pomagają zapobiegać dostępowi do innych zasobów. Uprawnienia umożliwiają stosowanie zasady jak najmniejszych uprawnień, która mówi, że nikt nie powinien mieć więcej uprawnień, niż faktycznie potrzebuje.

Gdy podmiot zabezpieczeń (użytkownik, grupa lub konto usługi) wywołuje interfejs Google Cloud API, musi mieć odpowiednie uprawnienia, aby korzystać z zasobu. Aby przyznać podmiotowi zabezpieczeń wymagane uprawnienia, przypisz mu rolę uprawnień.

Aby zapoznać się z ogólnymi informacjami o zarządzaniu dostępem w Google Cloud, przeczytaj omówienie uprawnień.

Wstępnie zdefiniowane role uprawnień, które umożliwiają podmiotom zabezpieczeń dostęp do optymalizacji trasy, to:

  • Route Optimization Editor (roles/routeoptimization.editor): przyznaje użytkownikowi lub kontu usługi dostęp do odczytu i zapisu do zasobów Route Optimization w projekcie. Obejmuje to możliwość wywoływania metod OptimizeTours i BatchOptimizeTours, a także pobierania długotrwałych operacji za pomocą metody GetOperation.
  • Route Optimization Viewer (roles/routeoptimization.viewer): przyznaje dostęp tylko do odczytu do zasobów Route Optimization w projekcie. Ta rola umożliwia wywoływanie OptimizeTours i dostęp do długotrwałych operacji za pomocą GetOperation.
Możesz przypisać rolę, tworząc powiązanie dla podmiotu zabezpieczeń za pomocą Cloud SDK:
gcloud projects add-iam-policy-binding PROJECT \
  --member user:someone@example.com \
  --role roles/routeoptimization.editor

Więcej informacji znajdziesz w artykule o przyznawaniu ról uprawnień za pomocą konsoli Google Cloud.

Przykład: wypróbuj wywołania interfejsu API REST w lokalnym środowisku programistycznym

Jeśli nie masz środowiska, które generuje tokeny, i chcesz wypróbować Route Optimization API z tokenem OAuth, wykonaj czynności opisane w tej sekcji.

Ten przykład pokazuje, jak użyć tokena OAuth dostarczonego przez domyślne uwierzytelnianie aplikacji (ADC) do wykonania wywołania. Więcej informacji o używaniu ADC do wywoływania interfejsów API Google za pomocą bibliotek klienta znajdziesz w artykule na temat uwierzytelniania za pomocą bibliotek klienta.

Poniższej procedury REST używaj tylko do celów programistycznych lub testowych, a nie produkcyjnych.

Wymagania wstępne

Zanim wyślesz żądanie REST za pomocą domyślnych danych uwierzytelniających aplikacji, użyj interfejsu wiersza poleceń gcloud, aby przekazać dane uwierzytelniające do domyślnych danych uwierzytelniających aplikacji:

  1. Zainstaluj i zainicjuj interfejs wiersza poleceń gcloud. Więcej informacji znajdziesz w artykule o instalowaniu gcloud CLI.

  2. Uwierzytelnij się za pomocą interfejsu wiersza poleceń gcloud:

    gcloud auth application-default login
  3. Dokończ proces logowania, aby zapisać dane logowania w lokalnym pliku danych logowania używanym przez ADC.

Więcej informacji znajdziesz w artykule o konfigurowaniu ADC w lokalnym środowisku programistycznym.

Wysyłanie żądania REST

W tym przykładzie przekazujesz 2 nagłówki żądania:

  • Przekaż token OAuth w nagłówku Authorization, używając tego polecenia do wygenerowania tokena:

    gcloud auth application-default print-access-token

    Zwrócony token ma zakres https://www.googleapis.com/auth/cloud-platform.

  • W nagłówku X-Goog-User-Project podaj identyfikator lub nazwę projektu Google Cloud, który ma włączone rozliczenia.

Aby wywołać interfejs Route Optimization API za pomocą tokena OAuth, wykonaj te czynności:

  1. W tym przykładowym kodzie zastąp PROJECT_NUMBER_OR_ID numerem lub identyfikatorem projektu 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. Aby skopiować polecenie curl, kliknij Kopiuj w przykładowym kodzie.

  3. Wklej polecenie w oknie terminala, a następnie je uruchom.

Odpowiedzią jest obiekt 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"
  }
}

Rozwiązywanie problemów

Jeśli żądanie zwróci komunikat o błędzie informujący, że ten interfejs API nie obsługuje danych logowania użytkownika, zapoznaj się z artykułem Rozwiązywanie problemów z konfiguracją ADC.