構成¶
GraphQL サービスの構成は、 <DENODO_HOME>/resources/apache-tomcat/webapps/denodo-graphql-service/WEB-INF/classes/application.properties
ファイルにあります。
このファイルでは、以下のプロパティを変更できます。
cors.allowed-origins
: このサービスでは、オリジン間リソース共有 (CORS) が有効になっています。CORS の詳細については、「 オリジン間リソース共有 (CORS) 」 (公開されている REST Web サービスの設定) を参照してください。CORS をこのサービスで有効にする場合、「 CORS の初期設定 」の手順に従って設定を行います (CORS が有効な状態で Denodo REST Web サービスを公開している場合は、実施済みです)。デフォルトでは、
cors.allowed-origins
プロパティの値は*
です。ただし、この値は許可されていません 。CORS の仕様に反しており、セキュリティ上の問題を引き起こす可能性があるためです。GraphQL リクエストが許可される URL のリスト (各 URL をカンマで区切る) が含まれるように、 GraphQL サービスを使用する前に、プロパティを構成する必要があります 。
http://foo.com, https://foo.bar.com
のようになります。context.allowed-variables
:X-Context-Variables
ヘッダーに渡すことができる コンテキスト変数 名のリスト。このリストにない変数を渡すと、検証エラーが発生してクエリが失敗します。プロパティの 構文 を参照してください。graphql.enable.filtering
:true
である場合、データの並べ替え、複雑なフィルタの指定、結果のグループ化、および集計関数の計算を GraphQL クエリで実行できます。false の場合、GraphQL の標準機能のみを実行できます。デフォルトはtrue
です。graphql.field-naming.camel-case-conversion
:true
に設定すると、VDP メタデータ識別子から派生した GraphQL スキーマのフィールド名は自動的に snake-case 表記法から CamelCase 表記法に変換されます。ただし、このモードは一般的な使用では推奨されません。また、VDP サーバーが無制限モードの場合やメタデータ識別子に大文字を使用できる場合は、予期しないエラーや名前の重複が発生する可能性があるため、絶対に有効にしないでください。デフォルト値はfalse
です。graphql.max.query.complexity
: このプロパティで指定した値よりも複雑さが大きいクエリが実行されないようにします。複雑さは、式1 + childComplexity
で計算します。デフォルト値は200
です。graphql.max.query.depth
: このプロパティで指定した値よりも深さが大きいクエリが実行されないようにします。デフォルト値は5
です。graphql.endpoint
: デフォルト値は/graphql
です。graphql.authenticated-sessions.default
: GraphQL サービスには、認証済みセッションを維持するオプションが用意されています。詳細については、「 認証済みセッション 」を参照してください。この機能をデフォルトで使用するには、この値をtrue
に設定します。デフォルト値はfalse
です。graphql.authenticated-sessions.timeout
: 2 回のクライアントリクエスト間で、認証済みセッションがサービスによって無効化されるまでの時間を秒単位で指定します。0 以下の値を指定すると、セッションはタイムアウトしません。デフォルト値は、ファイル<DENODO_HOME>/resources/apache-tomcat/conf/web.xml
で設定されたセッションの Tomcat デフォルトタイムアウト値です。query.default-page-size
: クエリあたりで返す結果の数。-1
の場合、すべての結果が取得されます。デフォルト値は1000
です。vdp.datasource.driverClassName
: Denodo ドライバークラスの完全なパッケージ名。値はcom.denodo.vdp.jdbc.Driver
ですが、これは変更 しない ようにする必要があります。vdp.datasource.jdbcUrl
: GraphQL サービスが Virtual DataPort に接続する際に使用する URI。デフォルト値はjdbc:denodo://localhost:<PORT>/?noAuth=true
です。Virtual DataPort のポートを変更する場合 (デフォルトは 9999)、このプロパティを変更してください。
vdp.admin.allowed
: ユーザーアカウント admin による GraphQL サービスへのアクセスを許可しない場合はfalse
に設定します。サービスは、HTTP Basic 認証を使用している場合にのみ、このプロパティを考慮します。このプロパティは、他の管理者アカウントには影響を与えません。ユーザーアカウント admin のみに影響を与えます。デフォルト値は
true
です。
一般的なデータソースの構成プロパティである vdp.datasource.jdbcUrl
と vdp.datasource.driverClassName
に加えて、プールサイズやアイドル接続タイムアウトなどの コネクションプール のプロパティ (コネクションプールの実装によって定義される) を構成するには、そのプロパティの前に vdp.datasource
を付ける必要があります。
たとえば、デフォルトのコネクションプールの実装 (HikariCP) を使用する場合、その特定の構成プロパティ (HikariCP 構成セクションを参照) を次のように指定できます。
vdp.datasource.minimumIdle=5
vdp.datasource.maximumPoolSize=20
vdp.datasource.idleTimeout=30000
vdp.datasource.maxLifetime=2000000
vdp.datasource.connectionTimeout=30000
GZIP¶
GraphQL の Web サイト では、本番環境の GraphQL サービスは GZip 圧縮を有効にして、 Accept-Encoding: gzip
ヘッダーの送信をクライアントに促すことが推奨されています。
JSON 応答の圧縮によってパフォーマンスが向上するかどうかは、状況によります。
GraphQL サービスで GZip 圧縮を有効にするには、 <DENODO_HOME>/resources/apache-tomcat/webapps/denodo-graphql-service/WEB-INF/classes/application.properties
ファイルを次のように編集します。
# enable response compression
server.compression.enabled=true
# comma-separated list of mime types that should be compressed
server.compression.mime-types=application/json, application/graphql
認証済みセッション¶
GraphQL サービスには、長時間を要する認証方法を使用するクライアントのパフォーマンスを活かす方法が用意されています。これにより、このようなクライアントが認証済みセッションを維持できます。
このようなセッションにより、そこで実行するクエリの 遅延が大幅に減少します が、Virtual DataPort サーバーとのコネクションが長時間開いた状態になります。その結果、 利用可能なリソースが枯渇 して、クライアントから新たに受信するリクエストがブロックされることがあります。
この機能を有効にすると、セッションで最初の HTTP リクエストへの応答に、セッションを識別する Cookie が追加されます。以降の 同じクライアントからの のリクエストでは、認証が VDP サーバーに委任されず、GraphQL サービスに対してのみ実行されるのでパフォーマンスが向上します。
この機能は次の 2 つの方法で有効にすることができます。
すべてのリクエストに対して有効化 (デフォルト): 名前に接頭辞
graphql.authenticated-sessions.*
を持つ構成パラメータを上書きします (「 構成 」で説明しています)。リクエスト単位で有効化: 以下に挙げる 2 つのオプションのカスタム HTTP ヘッダーを送信します。この送信により、以前のプロパティで設定されていたデフォルトの動作がオーバーライドされます。
X-Authenticated-Session
: デフォルトの構成プロパティgraphql.authenticated-sessions.default
をオーバーライドします。この方法では、リクエストごとにサービスの動作を管理できます。この値としてtrue
またはfalse
を指定できます。X-Authenticated-Session-Timeout
: パラメータgraphql.authenticated-sessions.timeout
をオーバーライドします。2 回のクライアントリクエスト間で、このセッションがサービスによって無効化されるまでの時間を秒単位で指定します。0 以下の値を指定すると、セッションはタイムアウトしません。セッションに設定されていた以前のタイムアウトはオーバーライドされます。
注釈
パフォーマンスには優れるものの認証に長時間を要するクライアントでのみ使用することを意図した機能であり、 ほとんどの場合、使用はお勧めできません 。Virtual DataPort サーバーとのコネクションが長時間開いたままになることから、利用可能なリソースが枯渇して、クライアントからの新たなリクエストがブロックされることがあるからです。
パフォーマンス上の問題を避けるために、このオプションは必要な場合にのみ、その影響を明確に理解したうえで有効にしてください。
CONTEXT 句の変数を渡す¶
VQL SELECT ステートメントの CONTEXT 句 に記述する var
パラメータと同様に、GraphQL クエリに変数を記述できます。
Virtual DataPort の GETVAR を通じてこの変数を使用すると、さまざまな基本ビューとデータソース設定を動的に構成できます。
セキュリティ上の理由から、この機能はデフォルトで無効になっています。この機能を有効にするには、まず CONTEXT 句で使用できる変数名を表すリテラル (一重引用符 で囲んだ一連の文字) のコンマ区切りリストで context.allowed-variables
構成プロパティを設定する必要があります。
context.allowed-variables
プロパティの構文¶context.allowed-variables=[<variable name:literal> [, <variable name:literal>]*]
このプロパティを設定すると、使用できる変数の値を X-Context-Variables
HTTP ヘッダーに記述して GraphQL クエリで渡すことができます。
X-Context-Variables
HTTP ヘッダーの構文¶<variable definition> ::= <variable name:literal> = <value:literal>
X-Context-Variables: [<variable definition> [, <variable definition>]*]
注釈
この <literal>
トークンは、VQL 言語と同じ 構文 に従います。したがって、他の GraphQL の名前 のように ASCII 文字に制限されません。