次の方法で共有


Runtime

ランタイムの動作を決定する構成設定。

ページ設定

Property Default Description
runtime.pagination.max ページ サイズ ページあたりの最大レコード数を定義します
runtime.pagination.default-page-size 応答ごとに既定のレコードを設定します

REST の設定

Property Default Description
runtime.rest.path "/api" REST エンドポイントのベース パス
runtime.rest.enabled true すべてのエンティティに対する REST 要求の有効化または無効化を許可します
runtime.rest.request-body-strict true true の場合、要求本文の余分なフィールドを許可しない

GraphQL の設定

Property Default Description
runtime.graphql.allow-introspection true 基になる GraphQL スキーマのクエリを実行できます
runtime.graphql.path "/graphql" GraphQL エンドポイントのベース パス
runtime.graphql.enabled true すべてのエンティティに対する GraphQL 要求の有効化または無効化を許可します
runtime.graphql.depth-limit null GraphQL クエリの最大許容深度
runtime.graphql.multiple-mutations.create.enabled false すべてのエンティティに対して複数の変更を作成できます

ホストの設定

Property Default Description
runtime.host.max-response-size-mb 158 1 つの結果で許容されるデータベース応答の最大サイズ (MB)
runtime.host.mode "production" 実行中のモード。 "production" または "development"

CORS の設定

Property Default Description
runtime.host.cors.origins [] 許可されている CORS の配信元
runtime.host.cors.allow-credentials false Access-Control-Allow-Credentials ヘッダーの値を設定します

認証設定

Property Default Description
runtime.host.authentication.provider null 認証プロバイダー
runtime.host.authentication.jwt.audience null JWT 対象ユーザー
runtime.host.authentication.jwt.issuer null JWT 発行者

キャッシュ設定

Property Default Description
runtime.cache.enabled false 応答をグローバルにキャッシュできるようにします
runtime.cache.ttl-seconds 5 グローバル キャッシュの有効期間 (秒)

テレメトリ設定

Property Default Description
runtime.telemetry.application-insights.connection-string null Application Insights 接続文字列
runtime.telemetry.application-insights.enabled false Application Insights テレメトリを有効または無効にする
runtime.telemetry.open-telemetry.endpoint null OpenTelemetry コレクターの URL
runtime.telemetry.open-telemetry.headers {} OpenTelemetry エクスポート ヘッダー
runtime.telemetry.open-telemetry.service-name "dab" OpenTelemetry サービス名
runtime.telemetry.open-telemetry.exporter-protocol "grpc" OpenTelemetry プロトコル ("grpc" または "httpprotobuf")
runtime.telemetry.open-telemetry.enabled true OpenTelemetry を有効または無効にします
runtime.telemetry.log-level.namespace null 名前空間固有のログ レベルのオーバーライド
runtime.health.enabled true 正常性チェック エンドポイントをグローバルに有効または無効にします
runtime.health.roles null 包括的な正常性エンドポイントに対して許可されているロール
runtime.health.cache-ttl-seconds 5 正常性チェック レポートのキャッシュ エントリの有効期間 (秒)
runtime.health.max-query-parallelism 4 最大同時正常性チェック クエリ (範囲: 1 から 8)

書式の概要

{
  "runtime": {
    "pagination": {
      "max-page-size": <integer|null> (default: `100000`),
      "default-page-size": <integer|null> (default: `100`)
    },
    "rest": {
      "path": <string> (default: "/api"),
      "enabled": <true>|<false>,
      "request-body-strict": <true>|<false> (default: `true`)
    },
    "graphql": {
      "path": <string> (default: "/graphql"),
      "enabled": <true>|<false>,
      "allow-introspection": <true>|<false>,
      "depth-limit": <integer|null> (default: `null`),
      "multiple-mutations": {
        "create": {
          "enabled": <true>|<false> (default: `false`)
        }
      }
    },
    "host": {
      "mode": <"production"> (default) | <"development">,
      "max-response-size-mb": <integer|null> (default: `158`),
      "cors": {
        "origins": [ "<string>" ],
        "allow-credentials": <true>|<false> (default: `false`)
      },
      "authentication": {
        "provider": <string> (default: "AppService"),
        "jwt": {
          "audience": "<string>",
          "issuer": "<string>"
        }
      }
    }
  },
  "cache": {
    "enabled": <true>|<false> (default: `false`),
    "ttl-seconds": <integer> (default: `5`)
  },
  "telemetry": {
    "application-insights": {
      "connection-string": "<string>",
      "enabled": <true>|<false> (default: `true`)
    },
    "open-telemetry": {
      "endpoint": "<string>",
      "headers": "<string>",
      "service-name": <string> (default: "dab"),
      "exporter-protocol": <"grpc"> (default) | <"httpprotobuf">,
      "enabled": <true>|<false> (default: `true`)
    },
    "log-level": {
      // namespace keys
      "<namespace>": <"trace"|"debug"|"information"|"warning"|"error"|"critical"|"none"|null>
    }
  },
  "health": {
    "enabled": <true>|<false> (default: `true`),
    "roles": [ "<string>" ],
    "cache-ttl-seconds": <integer> (default: `5`),
    "max-query-parallelism": <integer> (default: `4`)
  }
}

モード (ホスト ランタイム)

Parent Property タイプ Required Default
runtime host enum (production | development) ❌ いいえ production

開発動作

  • GraphQL テスト用に Nitro (以前のバナナ ケーキ ポップ) を有効にしました
  • REST テスト用に Swagger UI を有効にしました
  • 匿名の正常性チェックを有効にしました
  • ログの詳細度の向上 (デバッグ)

Format

{
  "runtime": {
    "host": {
      "mode": "production" (default) | "development"
    }
  }
}

最大応答サイズ (ホスト ランタイム)

Parent Property タイプ Required Default
runtime.host max-response-size-mb 整数 ❌ いいえ 158

特定の結果の最大サイズ (メガバイト単位) を設定します。 応答が大きくなるとシステムに負荷がかかる可能性があるため、 max-response-size-mb は合計サイズ (行数とは異なる) を大文字にしてオーバーロードを防ぎます。これは、特にテキストや JSON などの大きな列では発生します。

Value Result
設定されていません 既定値を使用する
null 既定値を使用する
integer 任意の正の 32 ビット整数
<= 0 サポートされていません

Format

{
  "runtime": {
    "host": {
      "max-response-size-mb": <integer; default: 158>
    }
  }
}

GraphQL (ランタイム)

Parent Property タイプ Required Default
runtime graphql オブジェクト ❌ いいえ -

グローバル GraphQL 構成。

入れ子になったプロパティ

Parent Property タイプ Required Default
runtime.graphql enabled boolean ❌ いいえ None
runtime.graphql path 文字列 ❌ いいえ "/graphql"
runtime.graphql depth-limit 整数 ❌ いいえ なし (無制限)
runtime.graphql allow-introspection boolean ❌ いいえ True
runtime.graphql multiple-mutations.create.enabled boolean ❌ いいえ False

プロパティのメモ

  • path プロパティのサブパスは使用できません。
  • depth-limitを使用して、入れ子になったクエリを制約します。
  • graphQL スキーマを非表示にするには、 allow-introspectionfalse に設定します。
  • multiple-mutationsを使用して、1 つの変更に複数のエンティティを挿入します。

Format

{
  "runtime": {
    "graphql": {
      "enabled": <true> (default) | <false>
      "depth-limit": <integer|null> (default: `null`),
      "path": <string> (default: /graphql),
      "allow-introspection": <true> (default) | <false>,
      "multiple-mutations": {
        "create": {
          "enabled": <true> (default) | <false>
        }
    }
  }
}

例: 複数の変異

Configuration

{
  "runtime": {
    "graphql": {
      "multiple-mutations": {
        "create": {
          "enabled": true
        }
      }
    }
  },
  "entities": {
    "User": {
      "source": "dbo.Users",
      "permissions": [
        {
          "role": "anonymous",
          "actions": ["create"] // entity permissions are required
        }
      ]
    }
  }
}

GraphQL の変更

mutation {
  createUsers(input: [
    { name: "Alice", age: 30, isAdmin: true },
    { name: "Bob", age: 25, isAdmin: false },
    { name: "Charlie", age: 35, isAdmin: true }
  ]) {
    id
    name
    age
    isAdmin
  }
}

REST (ランタイム)

Parent Property タイプ Required Default
runtime rest オブジェクト ❌ いいえ -

グローバル REST 構成。

入れ子になったプロパティ

Parent Property タイプ Required Default
runtime.rest enabled boolean ❌ いいえ None
runtime.rest path 文字列 ❌ いいえ "/api"
runtime.rest request-body-strict boolean ❌ いいえ True

プロパティのメモ

  • グローバル enabledfalseされている場合、個々のエンティティ レベルの enabled は関係ありません。
  • path プロパティは、/api/dataなどのサブパス値をサポートしていません。
  • request-body-strict は、.NET POCO オブジェクトを簡略化するために導入されました。
request-body-strict Behavior
true 要求本文に追加のフィールドを指定すると、 BadRequest 例外が発生します。
false 要求本文の追加のフィールドは無視されます。

Format

{
  "runtime": {
    "rest": {
      "enabled": <true> (default) | <false>,
      "path": <string> (default: /api),
      "request-body-strict": <true> (default) | <false>
    }
  }
}

例: request-body-strict

  • default()値を持つ列は、ペイロード内の値がINSERTされている場合にのみ、null中は無視されます。 その結果、INSERTdefault()されている場合、request-body-strict列に対する操作をtrueしても、明示的なnull値が得られません。 この動作を実現するには、 UPDATE 操作が必要です。
  • default()を持つ列は、ペイロード値に関係なく、UPDATE中は無視されません。
  • 計算列は常に無視されます。
  • 自動生成された列は常に無視されます。

サンプル テーブル

CREATE TABLE Users (
    Id INT PRIMARY KEY IDENTITY, -- auto-generated column
    Name NVARCHAR(50) NOT NULL,
    Age INT DEFAULT 18, -- column with default
    IsAdmin BIT DEFAULT 0, -- column with default
    IsMinor AS IIF(Age <= 18, 1, 0) -- computed column
);

要求ペイロード

{
  "Id": 999,
  "Name": "Alice",
  "Age": null,
  "IsAdmin": null,
  "IsMinor": false,
  "ExtraField": "ignored"
}

次の場合の挿入動作 request-body-strict = false

INSERT INTO Users (Name) VALUES ('Alice');
-- Default values for Age (18) and IsAdmin (0) are applied by the database.
-- IsMinor is ignored because it’s a computed column.
-- ExtraField is ignored.
-- The database generates the Id value.

応答ペイロード

{
  "Id": 1,          // Auto-generated by the database
  "Name": "Alice",
  "Age": 18,        // Default applied
  "IsAdmin": false, // Default applied
  "IsMinor": true   // Computed
}

更新時の動作 request-body-strict = false

UPDATE Users
SET Name = 'Alice Updated', Age = NULL
WHERE Id = 1;
-- IsMinor and ExtraField are ignored.

応答ペイロード

{
  "Id": 1,
  "Name": "Alice Updated",
  "Age": null,
  "IsAdmin": false,
  "IsMinor": false // Recomputed by the database (false when age is `null`)
}

CORS (ホスト ランタイム)

Parent Property タイプ Required Default
runtime.host cors オブジェクト ❌ いいえ -

グローバル CORS 構成。

Tip

CORS は、"クロスオリジン リソース共有" の略です。これは、Web ページが提供したドメインとは異なるドメインに対して要求を行うことができるかどうかを制御するブラウザー セキュリティ機能です。

入れ子になったプロパティ

Parent Property タイプ Required Default
runtime.host.cors allow-credentials boolean ❌ いいえ False
runtime.host.cors origins 文字列配列 ❌ いいえ None

Note

allow-credentials プロパティは、Access-Control-Allow-Credentials CORS ヘッダーを設定します。

Format

{
  "runtime": {
    "host": {
      "cors": {
        "allow-credentials": <true> (default) | <false>,
        "origins": ["<array-of-strings>"]
      }
    }
  }
}

Note

ワイルドカード * は、 originsの値として有効です。

プロバイダー (認証ホスト ランタイム)

Parent Property タイプ Required Default
runtime.host.authentication provider enum (AppService | EntraId | Custom | Simulator) ❌ いいえ None

認証方法を選択します。 各プロバイダーは、ID を異なる方法で検証します。 詳細な設定については、以下のリンク先のハウツー ガイドを参照してください。

プロバイダーの概要

プロバイダー 利用シーン ID ソース ハウツー ガイド
(省略) 匿名専用アクセス None
AppService Azure でホストされるアプリ (EasyAuth) X-MS-CLIENT-PRINCIPAL ヘッダー App Service 認証を構成する
EntraID Microsoft Entra ID (Azure AD) JWT ベアラー トークン Entra ID 認証を構成する
Custom サードパーティ IDP (Okta、Auth0) JWT ベアラー トークン カスタム JWT 認証を構成する
Simulator ローカル テストのみ シミュレート済み シミュレーター認証の構成

Note

EntraId プロバイダーは、以前は AzureAd という名前でした。 古い名前は互換性のために引き続き機能します。

匿名のみ (プロバイダーなし)

authentication セクションを省略すると、DAB は匿名専用モードで動作します。 すべての要求には、 Anonymous システム ロールが割り当てられます。

{
  "host": {
    // authentication section omitted
  }
}

AppService

Azure App Service EasyAuth によって挿入された ID ヘッダーを信頼します。

{
  "host": {
    "authentication": {
      "provider": "AppService"
    }
  }
}

EntraID

Microsoft Entra ID によって発行された JWT トークンを検証します。

{
  "host": {
    "authentication": {
      "provider": "EntraId",
      "jwt": {
        "audience": "<application-id>",
        "issuer": "https://login.microsoftonline.com/<tenant-id>/v2.0"
      }
    }
  }
}

Custom

サード パーティの ID プロバイダーからの JWT トークンを検証します。

{
  "host": {
    "authentication": {
      "provider": "Custom",
      "jwt": {
        "audience": "<api-audience>",
        "issuer": "https://<your-idp-domain>/"
      }
    }
  }
}

シミュレーター

ローカル開発とテストの認証をシミュレートします。

{
  "host": {
    "authentication": {
      "provider": "Simulator"
    }
  }
}

Important

Simulator プロバイダーは、runtime.host.modedevelopmentされている場合にのみ機能します。 シミュレーターが実稼働モードで構成されている場合、DAB の起動に失敗します。

ロールの選択

Simulator を除くすべてのプロバイダーについて、 X-MS-API-ROLE ヘッダーは、認証されたユーザーの要求から使用するロールを選択します。 省略した場合、要求は Authenticated システム ロールを使用します。 ロールの評価の詳細については、「 承認とロール」を参照してください。

JWT (認証ホスト ランタイム)

Parent Property タイプ Required Default
runtime.host.authentication jwt オブジェクト ❌ いいえ -

グローバル JSON Web トークン (JWT) の構成。

Data API Builder での JSON Web トークンのサポートの図。

入れ子になったプロパティ

Parent Property タイプ Required Default
runtime.host.authentication.jwt audience 文字列 ❌ いいえ None
runtime.host.authentication.jwt issuer 文字列 ❌ いいえ None

Format

{
  "runtime": {
    "host": {
      "authentication": {
        "jwt": {
          "audience": "<client-id>",
          "issuer": "<issuer-url>"
        }
      }
    }
  }
}

改ページ (ランタイム)

Parent Property タイプ Required Default
runtime pagination オブジェクト ❌ いいえ -

REST エンドポイントと GraphQL エンドポイントのグローバル改ページ制限。

入れ子になったプロパティ

Parent Property タイプ Required Default
runtime.pagination max-page-size int ❌ いいえ 100,000
runtime.pagination default-page-size int ❌ いいえ 100
runtime.pagination next-link-relative boolean ❌ いいえ false

サポートされる最大ページ サイズの値

Value Result
integer 任意の正の 32 ビット整数がサポートされます。
0 サポートされていません。
-1 既定値は、サポートされている最大値です。
< -1 サポートされていません。

既定のページ サイズでサポートされる値

Value Result
integer 現在の max-page-sizeより小さい任意の正の整数。
0 サポートされていません。
-1 既定値は現在の max-page-size 設定です。
< -1 サポートされていません。

next-link-relativetrueされている場合、改ページ位置nextLink値は絶対 URL ではなく相対 URL を使用します。

Value Example
false (既定値) "nextLink": "https://localhost:5001/api/users?$after=..."
true "nextLink": "/api/users?$after=..."

Format

{
  "runtime": {
    "pagination": {
      "max-page-size": <integer; default: 100000>,
      "default-page-size": <integer; default: 100>,
      "next-link-relative": <boolean; default: false>
    }
  }
}

Note

値が max-page-size より大きい場合、結果は max-page-size で上限が設定されます。

例: REST でのページング

Request

GET https://localhost:5001/api/users

応答ペイロード

{
  "value": [
    {
      "Id": 1,
      "Name": "Alice",
      "Age": 30,
      "IsAdmin": true,
      "IsMinor": false
    },
    {
      "Id": 2,
      "Name": "Bob",
      "Age": 17,
      "IsAdmin": false,
      "IsMinor": true
    }
  ],
  "nextLink": "https://localhost:5001/api/users?$after=W3siRW50aXR5TmFtZSI6InVzZXJzIiwiRmllbGROYW1lI=="
}

要求の次のページ

GET https://localhost:5001/api/users?$after=W3siRW50aXR5TmFtZSI6InVzZXJzIiwiRmllbGROYW1lI==

例: GraphQL でのページング

要求ペイロード (クエリ)

query {
  users {
    items {
      Id
      Name
      Age
      IsAdmin
      IsMinor
    }
    hasNextPage
    endCursor
  }
}

応答ペイロード

{
  "data": {
    "users": {
      "items": [
        {
          "Id": 1,
          "Name": "Alice",
          "Age": 30,
          "IsAdmin": true,
          "IsMinor": false
        },
        {
          "Id": 2,
          "Name": "Bob",
          "Age": 17,
          "IsAdmin": false,
          "IsMinor": true
        }
      ],
      "hasNextPage": true,
      "endCursor": "W3siRW50aXR5TmFtZSI6InVzZXJzIiwiRmllbGROYW1lI=="
    }
  }
}

要求の次のページ

query {
  users(after: "W3siRW50aXR5TmFtZSI6InVzZXJzIiwiRmllbGROYW1lI==") {
    items {
      Id
      Name
      Age
      IsAdmin
      IsMinor
    }
    hasNextPage
    endCursor
  }
}

例: 要求内の max-page-size にアクセスする

max-page-size (REST) または $limit (GraphQL) をfirstに設定して、-1値を使用します。

REST

GET https://localhost:5001/api/users?$limit=-1

GraphQL

query {
  users(first: -1) {
    items {
      ...
    }
  }
}

キャッシュ (ランタイム)

Parent Property タイプ Required Default
runtime cache オブジェクト ❌ いいえ -

グローバル キャッシュの構成。

入れ子になったプロパティ

Parent Property タイプ Required Default
runtime.cache enabled boolean ❌ いいえ False
runtime.cache ttl-seconds 整数 ❌ いいえ 5

Tip

エンティティ レベルの cache.ttl-seconds プロパティの既定値は、このグローバル値です。

Format

{
  "runtime": {
    "cache":  {
      "enabled": <boolean>,
      "ttl-seconds": <integer>
    }
  }
}

Important

グローバル enabledfalseされている場合、個々のエンティティ レベルの enabled は関係ありません。

テレメトリ (ランタイム)

Parent Property タイプ Required Default
runtime telemetry オブジェクト ❌ いいえ -

グローバル テレメトリの構成。

入れ子になったプロパティ

Parent Property タイプ Required Default
runtime.telemetry log-level 辞書 ❌ いいえ None
runtime.telemetry application-insights オブジェクト ❌ いいえ -
runtime.telemetry open-telemetry オブジェクト ❌ いいえ -

名前空間ごとのログの詳細度を構成します。 これは、標準の .NET ログ規則に従い、詳細な制御を可能にしますが、データ API ビルダーの内部に関する知識を前提としています。 データ API ビルダーはオープン ソースです。 https://aka.ms/dab

Format

{
  "runtime": {
    "telemetry": {
      "log-level": {
        "namespace": "log-level",
        "namespace": "log-level"
      }
    }
  }
}

Tip

log-level は、開発と運用の両方でホットリロードできます。 現在、運用環境でホット リロードをサポートする唯一のプロパティです。

Example

{
  "runtime": {
    "telemetry": {
      "log-level": {
        "Azure.DataApiBuilder.Core.Configurations.RuntimeConfigValidator": "debug",
        "Azure.DataApiBuilder.Core": "information",
        "default": "warning"
      }
    }
  }
}

Application Insights (テレメトリ)

Parent Property タイプ Required Default
runtime.telemetry application-insights オブジェクト ❌ いいえ -

Application Insights へのログ記録を構成します。

入れ子になったプロパティ

Parent Property タイプ Required Default
runtime.telemetry.application-insights enabled boolean ❌ いいえ False
runtime.telemetry.application-insights connection-string 文字列 ✔️ はい None

Format

{
  "runtime": {
    "telemetry": {
      "application-insights": {
        "enabled": <true; default: true> | <false>
        "connection-string": <string>
      }
    }
  }
}

OpenTelemetry (テレメトリ)

Parent Property タイプ Required Default
runtime.telemetry open-telemetry オブジェクト ❌ いいえ -

テレメトリを開くログ記録を構成します。

入れ子になったプロパティ

Parent Property タイプ Required Default
runtime.telemetry.open-telemetry enabled boolean ❌ いいえ true
runtime.telemetry.open-telemetry endpoint 文字列 ✔️ はい None
runtime.telemetry.open-telemetry headers 文字列 ❌ いいえ None
runtime.telemetry.open-telemetry service-name 文字列 ❌ いいえ "dab"
runtime.telemetry.open-telemetry exporter-protocol enum (grpc | httpprotobuf) ❌ いいえ grpc

複数のヘッダーは , (コンマ) で区切られます。

Format

{
  "runtime": {
    "telemetry": {
      "open-telemetry": {
        "enabled": <true> (default) | <false>,
        "endpoint": <string>,
        "headers": <string>,
        "service-name": <string> (default: "dab"),
        "exporter-protocol": <"grpc" (default) | "httpprotobuf">
      }
    }
  }
}

Example

{
  "runtime": {
    "telemetry": {
      "open-telemetry": {
        "enabled": true,
        // a gRPC endpoint example
        "endpoint": "http://localhost:4317",
        // an HTTP/protobuf endpoint example
        "endpoint": "http://localhost:4318/v1/metrics",
        "headers": "api-key=key,other-config-value=value",
        "service-name": "dab",
      }
    }
  }
}

詳細については、 OTEL_EXPORTER_OTLP_HEADERSを参照してください。

Note

gRPC (4317) は高速であり、ストリーミングをサポートしますが、より多くのセットアップ手順が必要です。 HTTP/protobuf (4318) は、デバッグが簡単で簡単ですが、効率は低くなります。

正常性 (ランタイム)

Parent Property タイプ Required Default
runtime health オブジェクト ❌ いいえ -

グローバル 正常性チェック エンドポイント (/health) の構成。

入れ子になったプロパティ

Parent Property タイプ Required Default 範囲/メモ
runtime.health enabled boolean ❌ いいえ true
runtime.health roles 文字列配列 ✔️ はい* null *実稼働モードで必須
runtime.health cache-ttl-seconds 整数 ❌ いいえ 5 最小: 0
runtime.health max-query-parallelism 整数 ❌ いいえ 4 最小: 1、最大: 8 (クランプ)

開発中と運用環境での動作

Condition 開発動作 運用環境の動作
health.enabled = 偽 403 地位 403 地位
health.enabled = 真 ロールに依存 ロールに依存
roles 省略または null 正常性が表示される 403 地位
現在のロールが roles 403 地位 403 地位
の現在のロール roles 正常性が表示される 正常性が表示される
roles 含む anonymous 正常性が表示される 正常性が表示される

Format

{
  "health": {
    "enabled": <true> (default) | <false>,
    "roles": [ <string> ], // required in production
    "cache-ttl-seconds": <integer; default: 5>,
    "max-query-parallelism": <integer; default: 4>
  }
}

Note

グローバル enabledfalseされている場合、個々のエンティティ レベルの enabled は関係ありません。

Example

{
  "health": {
    "enabled": true,
    "roles": ["admin", "support"],
    "cache-ttl-seconds": 10,
    "max-query-parallelism": 6
  }
}