OpenAPI 3.x の機能の制限事項

このドキュメントでは、Endpoints で OpenAPI 3.x を使用する場合の機能の制限について説明します。

サポートされている OpenAPI 仕様のバージョンの詳細については、OpenAPI の概要をご覧ください。

OpenAPI 3.x の新しい制限事項

このセクションでは、OpenAPI 3.x のサポートで新たに導入された OpenAPI の制限事項について説明します。

サーバー

OpenAPI 3.x は、ホストとベースパスを定義する複数の server オブジェクトをサポートしています。ただし、Cloud Endpoints は、x-google-endpoint 拡張機能で識別されるホスト名とベースパスを構成するために、単一のサーバー オブジェクトのみを使用します。

OpenAPI 仕様では複数のサーバーを定義できますが、Cloud Endpoints は x-google-endpoint 拡張機能を持つサーバーのみを使用します。x-google-endpoint 拡張機能は 1 つのサーバーでのみ定義できます。

Cloud Endpoints の場合はホスト名が必要になるため、x-google-endpoint 拡張機能を持つサーバーは 1 つだけにする必要があります。

たとえば、次のサーバー定義は Cloud Endpoints で有効です。

servers:
  - url: https://my-api.endpoints.my-project-id.cloud.goog
    x-google-endpoint: {}
servers:
  - url: https://my-api.endpoints.my-project-id.cloud.goog
    x-google-endpoint: {}
  - url: https://example.com

次のサーバー定義は Endpoints では無効です。

servers:
  - url: https://my-api-1.endpoints.my-project-id.cloud.goog
    x-google-endpoint: {}
  - url: https://my-api-2.endpoints.my-project-id.cloud.goog
    x-google-endpoint: {}

次の定義も Cloud Endpoints では無効です。

servers:
  - url: https://my-api.endpoints.my-project-id.cloud.goog

複数のファイルにまたがるサーバー

複数の OpenAPI ファイルをアップロードする場合は、すべてのファイルが servers セクションの制限に準拠している必要があります。1 つのファイルに x-google-endpoint 拡張子のサーバーが含まれている場合、すべてのファイルで x-google-endpoint 拡張子のサーバーを定義する必要があります。

また、x-google-endpoint 拡張子を持つすべてのサーバーは、サーバー URL で同一のホストを使用する必要があり、x-google-endpoint 構成はすべてのファイルで同一である必要があります。サーバー URL のベースパスは異なる場合があります。

相対 URL

Cloud Endpoints にはホスト名が必要なため、相対 URL はサポートされていません。

サポートされていない拡張機能

OpenAPI 3.x は x-google-allow 拡張機能をサポートしていません。

既存の制限事項

このセクションでは、OpenAPI 2.0 に存在し、OpenAPI 3.x にも引き続き適用される制限について説明します。

スコープが無視される

セキュリティ スキーム オブジェクトでスコープを定義できますが、ESP または Cloud Endpoints Frameworks はスコープをチェックしません。

複数のセキュリティ要件

OpenAPI ドキュメントに複数のセキュリティ要件を指定できます。

  • API キーを使用したセキュリティ要件: スキームの 1 つが API キーである場合、Cloud Endpoints は択一的(論理 OR)セキュリティ要件をサポートしません。Cloud Endpoints は連結(論理 AND)をサポートしているため、API キーと OAuth2 認証の両方を必須にできます。

  • OAuth2 のセキュリティ要件: Cloud Endpoints は、さまざまな OAuth2 認証スキームの択一的(論理 OR)セキュリティ要件をサポートしています。追加のセキュリティ要件が API キーでない限り、Cloud Endpoints は連結(論理 AND)をサポートしていません。

  • 省略可能なセキュリティ要件: OpenAPI 3 は、空の要件({})を含めることで省略可能なセキュリティをサポートします。API キーはこれをサポートしますが、OAuth はサポートしません。

セキュリティ定義の検証

OpenAPI 3.x では、未定義のセキュリティ スキーマを使用するとエラーが発生し、Cloud Endpoints は仕様を拒否します。OpenAPI 2.0 では警告のみが生成されていましたが、この点が変更されています。

URL パス テンプレート

Cloud Endpoints は、パスセグメント全体(/ で区切られた部分)に対応する URL パス テンプレート パラメータのみをサポートします。Cloud Endpoints は、パスセグメントの一部に対応するパラメータをサポートしていません。

たとえば、Cloud Endpoints は /items/{itemId} をサポートしていますが、/items/overview.{format} はサポートしていません。

URL ルートパス「/」上のオペレーション

OpenAPI ドキュメントはルートパス / のオペレーションを受け入れますが、Extensible Service Proxy はルートパスへのリクエストを拒否します。この制限は、ルートパスをサポートする ESPv2 には適用されません。

パラメータ、スキーマ、リクエスト本文、型

Extensible Service Proxy と ESP は、ほとんどのパラメータ、スキーマ、リクエスト本文、型の定義を無視します。Extensible Service Proxy と ESP は、必要なパラメータと型の定義を適用せず、リクエストを API に転送します。

Extensible Service Proxy と ESP は、リクエスト パラメータのプリミティブ型のみをサポートします。

外部型参照

Cloud Endpoints は、OpenAPI ドキュメントの外部にある型への参照をサポートしていません。たとえば、外部 URL に $ref を使用することはできません。

サービスホスト アドレスのカスタムポート

servers オブジェクトの url でカスタムポートを使用することはできません。

YAML エイリアスの制限事項

OpenAPI ドキュメントには、最大 200 個の YAML エイリアス ノードを含めることができます。

繰り返しのないリクエスト本文

オペレーションごとに定義できる requestBody は 1 つだけで、繰り返し以外の型にする必要があります。