Configura la API de Route Optimization

En este documento, se describen los pasos que debes seguir para comenzar a usar la API de Route Optimization.

Requisitos previos

Este procedimiento te guiará para configurar una cuenta de Google Cloud y un proyecto de Google Cloud con la facturación habilitada. También debes conocer cómo se te cobra por usar la API de Route Optimization.

  1. Revisa la facturación y el costo por el uso en Uso y facturación de la API de Route Optimization.
  2. Verifica que tengas una Cuenta de Google Cloud.

    Accede a la consola de Google Cloud
  3. Verifica que tengas un proyecto de Google Cloud con la facturación habilitada.

    Ir a la página Facturación
    1. Selecciona tu proyecto para abrir la página Facturación.
    2. En la página Facturación, haz lo siguiente:

      • Si la facturación ya está habilitada para el proyecto seleccionado y solo tienes una cuenta de facturación, se abrirá la página Facturación.
      • Si tienes varias cuentas de facturación, selecciona Ir a la cuenta de facturación vinculada para ver los detalles de la cuenta de facturación asociada con el proyecto.
      • Si existe una cuenta de facturación, pero no está asociada al proyecto, se te solicitará que vincules una cuenta de facturación con el proyecto.
      • Si no existe una cuenta de facturación o quieres crear una nueva, selecciona Administrar cuentas de facturación para crear una nueva. Para obtener más información, consulta Crea una nueva cuenta de Facturación de Cloud de servicio automático.

Habilita la API

Antes de poder usar la API de Route Optimization, debes usar la consola de Google Cloud o el comando gcloud para habilitarla en tu proyecto de Google Cloud.

Para habilitar la API, sigue estos pasos:

Console

  1. Abre la página del producto en la consola de Google Cloud:

    Habilita la API de Route Optimization
  2. Haz clic en el botón Habilitar.

gcloud

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

Obtén más información sobre el SDK de Google Cloud, la instalación del SDK de Cloud y los siguientes comandos:

Los productos de Google Maps Platform requieren que las llamadas a la API incluyan un token de OAuth para evitar el uso no autorizado.

Crea un token de OAuth

La API de Route Optimization admite OAuth 2.0 para la autenticación. Google admite situaciones comunes de OAuth 2.0, como las de un servidor web.

En este documento, se describe cómo pasar un token de OAuth a una llamada a la API de Route Optimization en tu entorno de desarrollo. Para obtener más información sobre el uso de OAuth en un entorno de producción, consulta Métodos de autenticación en Google.

Puedes llamar a las APIs de Google Maps directamente realizando solicitudes a la API al servidor, o bien puedes usar bibliotecas cliente para simplificar tu código. Google Maps proporciona bibliotecas cliente para Go, Java, Node.js y Python. Para obtener más información, consulta las bibliotecas cliente de la API de Route Optimization.

Descripción general de OAuth

Puedes crear y administrar tokens de acceso con OAuth de varias maneras, según tu entorno de implementación.

Puedes usar OAuth 2.0 para las interacciones de servidor a servidor entre tu aplicación y un servicio de Google. En este caso, usarás una cuenta de servicio asociada con tu aplicación, en lugar de un usuario individual. Puedes realizar solicitudes a la API con la cuenta de servicio sin involucrar a los usuarios directamente. Para obtener más información sobre los métodos de autenticación, consulta Métodos de autenticación en Google.

Como alternativa, puedes integrar la API de Route Optimization en una app para dispositivos móviles iOS o Android. Para obtener más información sobre cómo usar OAuth y administrar tokens de acceso para diferentes entornos de implementación, consulta Usa OAuth 2.0 para acceder a las APIs de Google.

Alcances de OAuth

Para usar OAuth con la API de Route Optimization, debes asignar al token de OAuth el siguiente permiso:

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

Configura los roles

En este documento, se proporciona información sobre los permisos y los roles de Identity and Access Management (IAM) para Route Optimization. IAM te permite otorgar acceso detallado a recursos específicos de Route Optimization y ayuda a evitar el acceso a otros recursos. IAM te permite aplicar el principio de seguridad de privilegio mínimo, que indica que nadie debe tener más permisos de los que realmente necesita.

Cuando una principal (un usuario, un grupo o una cuenta de servicio) llama a una API de Google Cloud, esa principal debe tener los permisos de IAM adecuados para usar el recurso. Para otorgar los permisos necesarios a una principal, debes otorgarle un rol de IAM.

Para familiarizarte con la administración del acceso en Google Cloud en general, consulta Descripción general de IAM.

Los roles de IAM predefinidos para permitir que las principales accedan a Route Optimization son los siguientes:

  • Route Optimization Editor (roles/routeoptimization.editor): Otorga al usuario o a la cuenta de servicio acceso de lectura y escritura a los recursos de Route Optimization en el proyecto. Esto incluye la capacidad de llamar a OptimizeTours y BatchOptimizeTours, así como recuperar operaciones de larga duración con GetOperation.
  • Route Optimization Viewer (roles/routeoptimization.viewer): Otorga acceso de solo lectura a los recursos de Route Optimization en el proyecto. Este rol permite llamar a OptimizeTours y acceder a operaciones de larga duración con GetOperation.
Puedes asignar un rol creando una vinculación para una principal con el SDK de Cloud:
gcloud projects add-iam-policy-binding PROJECT \
  --member user:someone@example.com \
  --role roles/routeoptimization.editor

Para obtener más información, consulta Otorga un rol de IAM con la consola de Google Cloud.

Ejemplo: Prueba las llamadas a la API de REST en tu entorno de desarrollo local

Si no tienes un entorno que genere tokens y quieres probar la API de Route Optimization con un token de OAuth, usa el procedimiento que se indica en esta sección.

En este ejemplo, se describe cómo usar el token de OAuth que proporcionan las credenciales predeterminadas de la aplicación (ADC) para realizar la llamada. Para obtener más información sobre el uso de ADC para llamar a las APIs de Google con bibliotecas cliente, consulta Autentícate con bibliotecas cliente.

Usa el siguiente procedimiento de REST solo para desarrollo o pruebas, no para producción.

Requisitos previos

Antes de realizar una solicitud REST con ADC, usa la CLI de gcloud para proporcionar credenciales a ADC:

  1. Instala e inicializa la CLI de gcloud Para obtener más información, consulta Instala gcloud CLI.

  2. Autentica con la CLI de gcloud:

    gcloud auth application-default login
  3. Completa el proceso de acceso para guardar tus credenciales en el archivo de credenciales local que usa ADC.

Para obtener más información, consulta Configura ADC para un entorno de desarrollo local.

Realiza una solicitud de REST

En este ejemplo, pasas dos encabezados de solicitud:

  • Pasa el token de OAuth en el encabezado Authorization con el siguiente comando para generar el token:

    gcloud auth application-default print-access-token

    El token que se muestra tiene un alcance de https://www.googleapis.com/auth/cloud-platform.

  • Pasa el ID o el nombre de tu proyecto de Google Cloud que tiene habilitada la facturación en el encabezado X-Goog-User-Project.

Para llamar a la API de Route Optimization con un token de OAuth, completa los siguientes pasos:

  1. En la siguiente muestra de código, reemplaza PROJECT_NUMBER_OR_ID por el número o ID de tu proyecto de 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. Para copiar el comando curl, haz clic en Copiar en la muestra de código.

  3. Pega el comando en una ventana de terminal y, luego, ejecútalo.

La respuesta es un objeto 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"
  }
}

Solución de problemas

Si tu solicitud muestra un mensaje de error que indica que esta API no admite credenciales de usuario final, consulta Soluciona problemas de la configuración de ADC.