エンドポイントを選択する

Route Optimization API には次のエンドポイントがあります。

  • OptimizeTours: 単一リクエストのブロッキング エンドポイント。
  • OptimizeToursLongRunning: 解決に時間がかかる単一リクエストの非ブロッキング エンドポイント。
  • OptimizeToursUri: 大量のデータ要件を伴う単一リクエスト用の非ブロッキング エンドポイント。
  • BatchOptimizeTours: 複数のリクエストを同時に処理するための非ブロッキング エンドポイント。

選択するエンドポイントは、ユースケース、リクエスト サイズ、想定される解決時間、複数のリクエストを同時に処理する必要があるかどうかによって異なります。

エンドポイントを比較する

次の表を使用して、ニーズに合ったエンドポイントを確認してください。

エンドポイント OptimizeTours OptimizeToursLongRunning OptimizeToursUri BatchOptimizeTours
実行タイプ ブロック 非ブロック 非ブロック 非ブロック
Requests processed 独身 独身 独身 複数
最大リクエスト サイズ
解決時間 ショート Long Long Long
Google Cloud Storage が必要 いいえ いいえ

エンドポイントの特性を理解する

前の表に、適切なエンドポイントを選択するうえで役立つ次の特性を示します。

  • 実行タイプ: 応答を待機している間にアプリケーションがネットワーク接続を処理する方法を決定します。次の 2 種類があります。
    • ブロッキング エンドポイント: API がレスポンスを返すまで接続を開いたままにします。
    • 非ブロッキング エンドポイント: リクエストをバックグラウンドで処理します。API は、長時間実行オペレーション(LRO)ID をすぐに返します。この ID を後でポーリングして結果を取得します。
  • 処理されたリクエスト: エンドポイントが単一のルーティング リクエストを処理するか、複数のリクエストを同時に処理するかを決定します。
  • リクエストの最大サイズ: 小規模および中規模のリクエストはインラインで直接送信され、サーバーサイドの上限があります。大きなリクエストは、Google Cloud Storage を使用してこれらの上限を回避します。正確なリクエスト サイズの上限については、エンドポイントの詳細セクションをご覧ください。
  • 解決時間: 単純なリクエストは短時間で解決できますが、複雑なリクエストは解決に時間がかかります。解決時間は接続を開いたままにする必要がある時間を決定するため、エンドポイントの選択はタイムアウトの上限によって異なります。詳細については、タイムアウトと期限を構成するをご覧ください。
  • Google Cloud Storage が必要: 大規模なリクエストとレスポンスを処理するエンドポイントは、Google Cloud Storage にデータを直接読み書きします。HTTP リクエストでデータを送信する代わりに、リクエストを Cloud Storage バケットにアップロードして、URI を API に渡します。

エンドポイントの詳細

Route Optimization API には 4 つのエンドポイントがあります。以降のセクションでは、各エンドポイントの仕組みについて説明し、リクエストの例を示します。

OptimizeTours

OptimizeTours は、解決時間が短い単一のリクエストを対象としたブロッキング エンドポイントです。最適化されたルートをレスポンスで直接返します。これはブロッキング エンドポイントであるため、API がリクエストの処理を完了してレスポンスを返すまで、ネットワーク接続を開いたままにする必要があります。このエンドポイントは、約 4 MB までのインライン リクエストを受け入れます。

OptimizeTours リクエストの例をご覧ください

{
  "model": {
    "shipments":[
      {
        "pickups":[
          {
            "arrivalLocation": {
              "latitude": 37.425062,
              "longitude": -122.095355
            }
          }
        ],
        "deliveries":[
          {
            "arrivalLocation": {
              "latitude": 37.424215,
              "longitude": -122.095260
            }
          }
        ]
      }
    ],
    "vehicles":[
      {
        "travelMode": "DRIVING",
        "costPerKilometer": 1.0
      }
    ]
  }
}
    

OptimizeToursLongRunning

OptimizeToursLongRunning は、解決に時間がかかる単一リクエスト用の非ブロッキング エンドポイントです。長時間実行オペレーション(LRO)ID が返されます。GetOperation エンドポイントを使用してこの ID をポーリングすると、リクエストのステータスを確認し、最終的な最適化されたルートを取得できます。このエンドポイントは、最大約 8 MB のインライン リクエストを受け付けます。

OptimizeToursLongRunning リクエストの例をご覧ください

{
  "model": {
    "shipments":[
      {
        "pickups":[
          {
            "arrivalLocation": {
              "latitude": 37.425062,
              "longitude": -122.095355
            }
          }
        ]
      }
    ],
    "vehicles":[
      {
        "travelMode": "DRIVING",
        "costPerKilometer": 1.0
      }
    ]
  }
}
    

OptimizeToursUri

OptimizeToursUri は、解決に時間がかかり、データ要件が大きい(8 MB を超える)単一リクエストを対象としたノンブロッキング エンドポイントです。長時間実行オペレーション(LRO)ID が返されます。GetOperation エンドポイントを使用してこの ID をポーリングすると、リクエストのステータスを確認できます。

ペイロードをインラインで送信する代わりに、OptimizeToursRequest を Google Cloud Storage にアップロードします。次に、入力リクエストと出力先の両方の Cloud Storage URI を API に渡します。サーバーは入力 URI からデータを読み取り、最終的な OptimizeToursResponse を出力 URI に直接書き込みます。オペレーションが完了すると、この出力 URI から最適化されたルートを読み取ることができます。

OptimizeToursUri リクエストの例をご覧ください

{
  "input": {
    "uri": "gs://your-bucket/path/input/object.json"
  },
  "output": {
    "uri": "gs://your-bucket/path/output/object.json"
  }
}
    

BatchOptimizeTours

BatchOptimizeTours は、同時に処理される 複数の独立した最適化リクエストを対象としたノンブロッキング エンドポイントです。長時間実行オペレーション(LRO)ID が返されます。GetOperation エンドポイントを使用してこの ID をポーリングすると、リクエストのステータスを確認し、最終的な最適化されたルートを取得できます。

ペイロードをインラインで送信する代わりに、複数の OptimizeToursRequest を Google Cloud Storage にアップロードします。次に、Cloud Storage URI を API に渡します。サーバーは入力 URI からデータを読み取り、リクエストごとに OptimizeToursResponse を出力 URI に直接書き込みます。

BatchOptimizeTours リクエストの例を見る

{
  "modelConfigs": [
    {
      "inputConfig": {
        "gcsSource": {
          "uri": "gs://your-bucket/path/input/request_1.json"
        },
        "dataFormat": "JSON"
      },
      "outputConfig": {
        "gcsDestination": {
          "uri": "gs://your-bucket/path/output/response_1.json"
        },
        "dataFormat": "JSON"
      }
    },
    {
      "inputConfig": {
        "gcsSource": {
          "uri": "gs://your-bucket/path/input/request_2.json"
        },
        "dataFormat": "JSON"
      },
      "outputConfig": {
        "gcsDestination": {
          "uri": "gs://your-bucket/path/output/response_2.json"
        },
        "dataFormat": "JSON"
      }
    }
  ]
}