のリクエスト ルーティングはapp.yaml
、URL のドメイン名に基づくルーティングには使用できません。Handlers 要素のドキュメント セクションのurl
表の行を参照してください。
url
そのため、リクエストをいずれかのスクリプトにルーティングするためにハンドラーの構成で現在使用している URL のファイルパス部分を同時に削除しながら、単一のモジュール/サービスでアプリを提供することはできません。
アプリを 2 つの個別のサービス/モジュールに分割し、それぞれが 1 つのスクリプトを処理することで、必要なものを取得できます。モジュールの 1 つをデフォルト モジュールにする必要があります。これをweb
デフォルトにします。dispatch.yaml
ファイルは、URL ホスト名に基づいてそれぞれのモジュールにリクエストをルーティングするために使用されます。
web.yaml
ファイルには次のものが含まれます。
module: default
handlers:
- url: /.*
script: web_server.app
rest.yaml
ファイルには次のものが含まれます。
module: rest
handlers:
- url: /.*
script: rest_server.app
デフォルト以外のモジュールのルートのみが必要なファイルでは、dispatch.yaml
ルートに一致しないリクエストは、デフォルトでデフォルト モジュールにルーティングされます。
- url: "api.example.com/*"
module: rest
ここでより完全な例を見つけることができます: https://stackoverflow.com/a/34111170/4495081
example.com
次に、ネイキッド ドメインとapi.example.com
サブドメインの両方をアプリにマップします。ネイキッド ドメインとサブドメインを構成するときにわずかに異なるセクションに特に注意して、アプリケーションのカスタム ドメインを追加する手順に従います。https://stackoverflow.com/a/36317462/4495081も参照してください。
問題が 1 つあります。ホスト名に基づくdispatch.yaml
ルーティングは、ローカルの開発サーバーでは機能しません。モジュール宛てのリクエストは、rest
実際にはモジュールに送られdefault
ます。
より簡単な回避策はrest
、ローカル devserver のrest
モジュールがリッスンする実際の localhost:PORT URL にモジュール クライアントを誘導することです (dev サーバーの起動時にターミナルに表示されます)。
これは、すべてのケースまたはすべてのアプリで可能であるとは限りません。たとえば、アプリが自動生成された URL を使用してクロスモジュール リクエストを行う場合は問題です。
このような場合、これを回避するために、rest.yaml
URL に小さなパス部分を一時的に挿入できます。これは、ローカルの開発サーバーでrest
モジュールをテストしている間のみです (クライアント側で変更を一致させたり、モジュール間の URL 生成を行う必要があります)。論理):
module: rest
handlers:
- url: /api/.*
script: rest_server.app
dispatch.yaml
次に、ホストベースではなく、ローカル開発サーバーにも適用されるルールを追加できます。rest.yaml
これは永久にそのままにしておくことができます。一時的な変更が元に戻されたときに本番環境にデプロイされた場合でも問題はありません。
- url: "api.example.com/*"
module: rest
- url: "*/api/*"
module: rest