Delen via


Runtime

Configuratie-instellingen die het runtimegedrag bepalen.

Instellingen voor paginering

Property Default Description
runtime.pagination.max-paginaformaat Definieert maximumrecords per pagina
runtime.pagtion.default-page-size Hiermee stelt u standaardrecords per antwoord in

REST-instellingen

Property Default Description
runtime.rest.path "/api" Basispad voor REST-eindpunten
runtime.rest.enabled true Hiermee staat u het in- of uitschakelen van REST-aanvragen voor alle entiteiten toe
runtime.rest.request-body-strict true Niet-overbodige velden in aanvraagtekst wanneer waar is

GraphQL-instellingen

Property Default Description
runtime.graphql.allow-introspection true Hiermee kunt u query's uitvoeren op het onderliggende GraphQL-schema
runtime.graphql.path "/graphql" Basispad voor het GraphQL-eindpunt
runtime.graphql.enabled true Hiermee staat u het in- of uitschakelen van GraphQL-aanvragen voor alle entiteiten toe
runtime.graphql.depth-limit null Maximale toegestane diepte van een GraphQL-query
runtime.graphql.multiple-mutaties.create.enabled false Maakt meervoudige mutaties mogelijk voor alle entiteiten

Hostinstellingen

Property Default Description
runtime.host.max-response-size-mb 158 Maximale grootte (MB) van het databaseantwoord dat is toegestaan in één resultaat
runtime.host.mode "production" Actieve modus; "production" of "development"

CORS-instellingen

Property Default Description
runtime.host.cors.origins [] Toegestane CORS-oorsprongen
runtime.host.cors.allow-credentials false Hiermee stelt u de waarde in voor Access-Control-Allow-Credentials header

Verificatie-instellingen

Property Default Description
runtime.host.authentication.provider null Verificatieprovider
runtime.host.authentication.jwt.audience null JWT-doelgroep
runtime.host.authentication.jwt.issuer null JWT-uitgever

Cache-instellingen

Property Default Description
runtime.cache.enabled false Hiermee schakelt u het opslaan van antwoorden globaal in de cache in
runtime.cache.ttl-seconds 5 Time to live (seconden) voor globale cache

Telemetrie-instellingen

Property Default Description
runtime.telemetry.application-insights.connection-string null Application Insights-verbindingsreeks
runtime.telemetry.application-insights.enabled false Application Insights-telemetrie in- of uitschakelen
runtime.telemetry.open-telemetry.endpoint null Url van openTelemetry-collector
runtime.telemetry.open-telemetry.headers {} OpenTelemetry-exportheaders
runtime.telemetry.open-telemetry.service-name "dab" OpenTelemetry-servicenaam
runtime.telemetry.open-telemetry.exporter-protocol "grpc" OpenTelemetry-protocol ('grpc' of 'httpprotobuf')
runtime.telemetry.open-telemetry.enabled true OpenTelemetry in- of uitschakelen
runtime.telemetry.log-level.namespace null Naamruimtespecifieke overschrijving op logboekniveau
runtime.health.enabled true Hiermee schakelt u het eindpunt van de statuscontrole globaal in of uit
runtime.health.roles null Toegestane rollen voor het uitgebreide statuseindpunt
runtime.health.cache-ttl-seconds 5 Time to live (seconden) voor de cachevermelding voor statuscontrolerapport
runtime.health.max-queryparallelisme 4 Maximum aantal query's voor gelijktijdige statuscontrole (bereik: 1-8)

Overzicht van opmaak

{
  "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`)
  }
}

Modus (hostruntime)

Parent Property Type Required Default
runtime host enum (production | development) ❌ Nee production

Ontwikkelingsgedrag

  • Nitro (voorheen Banana Cake Pop) ingeschakeld voor GraphQL-tests
  • Swagger UI ingeschakeld voor REST-tests
  • Anonieme statuscontroles ingeschakeld
  • Uitgebreide logboekregistratie (foutopsporing)

Format

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

Maximale antwoordgrootte (hostruntime)

Parent Property Type Required Default
runtime.host max-response-size-mb integer ❌ Nee 158

Hiermee stelt u de maximale grootte (in megabytes) in voor elk gegeven resultaat. Omdat grote reacties het systeem kunnen belasten, max-response-size-mb wordt de totale grootte (afgezien van het aantal rijen) om overbelasting te voorkomen, wat vooral geldt voor grote kolommen, zoals tekst of JSON.

Value Result
niet ingesteld Standaard gebruiken
null Standaard gebruiken
integer Een positief 32-bits geheel getal
<= 0 Niet ondersteund

Format

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

GraphQL (runtime)

Parent Property Type Required Default
runtime graphql object ❌ Nee -

Globale GraphQL-configuratie.

Geneste eigenschappen

Parent Property Type Required Default
runtime.graphql enabled boolean ❌ Nee None
runtime.graphql path string ❌ Nee "/graphql"
runtime.graphql depth-limit integer ❌ Nee Geen (onbeperkt)
runtime.graphql allow-introspection boolean ❌ Nee True
runtime.graphql multiple-mutations.create.enabled boolean ❌ Nee False

Opmerkingen bij eigenschappen

  • Subpaden zijn niet toegestaan voor de path eigenschap.
  • Gebruik depth-limit dit om geneste query's te beperken.
  • Ingesteld allow-introspection om false het GraphQL-schema te verbergen.
  • Gebruik multiple-mutations dit om meerdere entiteiten in één mutatie in te voegen.

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>
        }
    }
  }
}

Voorbeeld: meerdere mutaties

Configuration

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

GraphQL mutatie

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 (uitvoeringstijd)

Parent Property Type Required Default
runtime rest object ❌ Nee -

Globale REST-configuratie.

Geneste eigenschappen

Parent Property Type Required Default
runtime.rest enabled boolean ❌ Nee None
runtime.rest path string ❌ Nee "/api"
runtime.rest request-body-strict boolean ❌ Nee True

Opmerkingen bij eigenschappen

  • Als globaal enabled het geval is false, maakt het niet uit op het niveau van enabled afzonderlijke entiteiten.
  • De path eigenschap biedt geen ondersteuning voor subpadwaarden zoals /api/data.
  • request-body-strict is geïntroduceerd om .NET POCO-objecten te vereenvoudigen.
request-body-strict Behavior
true Extra velden in de hoofdtekst van de aanvraag veroorzaken een BadRequest uitzondering.
false Extra velden in de hoofdtekst van de aanvraag worden genegeerd.

Format

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

Voorbeeld: aanvraag-body-strict

  • Kolommen met een default() waarde worden alleen genegeerd INSERT wanneer hun waarde in de nettolading is null. Als gevolg hiervan INSERT kunnen bewerkingen in default() kolommen, wanneer request-body-strict dat wel is true, niet resulteren in expliciete null waarden. Om dit gedrag te bereiken, is een UPDATE bewerking vereist.
  • Kolommen met een default() kolom worden niet genegeerd, UPDATE ongeacht de nettoladingwaarde.
  • Berekende kolommen worden altijd genegeerd.
  • Automatisch gegenereerde kolommen worden altijd genegeerd.

Voorbeeldtabel

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
);

Nettolading aanvragen

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

Gedrag invoegen wanneer 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.

Antwoordlading

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

Gedrag bijwerken wanneer request-body-strict = false

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

Antwoordlading

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

CORS (hostruntime)

Parent Property Type Required Default
runtime.host cors object ❌ Nee -

Globale CORS-configuratie.

Tip

CORS staat voor Cross-Origin Resource Sharing. Het is een browserbeveiligingsfunctie waarmee wordt bepaald of webpagina's aanvragen kunnen indienen bij een ander domein dan het domein dat ze heeft geleverd.

Geneste eigenschappen

Parent Property Type Required Default
runtime.host.cors allow-credentials boolean ❌ Nee False
runtime.host.cors origins tekenreeksmatrix ❌ Nee None

Note

De allow-credentials eigenschap stelt de Access-Control-Allow-Credentials CORS-header in.

Format

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

Note

Het jokerteken * is geldig als een waarde voor origins.

Provider (verificatiehostruntime)

Parent Property Type Required Default
runtime.host.authentication provider enum (AppServiceSimulator | | EntraId | Custom) ❌ Nee AppService

Hiermee definieert u de verificatiemethode die wordt gebruikt door de Data API Builder.

Alleen anoniem (verificatieprovider)

{
 "host": {
    // omit the authentication section
 }
}

Wanneer de hele authentication sectie wordt weggelaten uit het bestand dab-config.json, wordt er geen verificatieprovider gebruikt. In dit geval werkt Data API Builder in de modus 'no-auth'. In deze modus zoekt DAB niet naar tokens of Authorization headers. De X-MS-API-ROLE header wordt ook genegeerd in deze configuratie.

Note

Elke aanvraag die in de engine binnenkomt, wordt automatisch en onmiddellijk de systeemrol van anonymous. Toegangsbeheer wordt vervolgens uitsluitend verwerkt door de machtigingen die u voor elke entiteit definieert.

Een voorbeeld van entiteitsmachtigingen.

{
  "entities": {
    "Book": {
      "source": "dbo.books",
      "permissions": [
        {
          "role": "anonymous",
          "actions": [ "read" ]
        }
      ]
    }
  }
}

Omdat er in dit voorbeeld geen authentication provider is geconfigureerd, worden alle binnenkomende aanvragen automatisch beschouwd als van een anonymous gebruiker. De permissions matrix voor de Book entiteit verleent expliciet de rol de anonymous mogelijkheid om bewerkingen uit te voeren read . Pogingen om andere acties (zoals create, update, delete) uit te voeren of toegang te krijgen tot andere entiteiten die niet zijn geconfigureerd voor anonymous toegang, wordt geweigerd.

AppService (verificatieprovider)

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

Deze provider is bedoeld voor toepassingen die worden gehost in Azure App Service, zoals Azure Container Apps. De Azure-hostingomgeving verwerkt verificatie en geeft vervolgens de identiteitsgegevens van de gebruiker door aan de toepassing via aanvraagheaders. Het is bedoeld voor ontwikkelaars die een eenvoudige, standaardverificatieoplossing willen die wordt beheerd door het Azure-platform.

Deze provider gebruikt geen JWT-token uit de Authorization header. Het is afhankelijk van een speciale header, X-MS-CLIENT-PRINCIPALgeïnjecteerd door het App Service-platform. Deze header bevat een met base64 gecodeerd JSON-object met de identiteitsgegevens van de gebruiker.

Anoniem: Als de AppService provider is geconfigureerd maar een aanvraag binnenkomt zonder de X-MS-CLIENT-PRINCIPAL header, wordt de aanvraag toegewezen aan de systeemrol van anonymous.

De gedecodeerde JSON uit de X-MS-CLIENT-PRINCIPAL header ziet er doorgaans als volgt uit:

{
  "auth_typ": "aad",
  "claims": [
    {"typ": "roles", "val": "admin"},
    {"typ": "roles", "val": "contributor"}
  ],
  "name_typ": "...",
  "role_typ": "..."
}

De rollen bevinden zich in de claims matrix.

Over de X-MS-API-ROLE-header

  • Rol en gedrag: De X-MS-API-ROLE header wordt gebruikt om op te geven welke rol de gebruiker wil aannemen voor de huidige aanvraag. De waarde van deze header moet overeenkomen met een van de rolwaarden in de claims matrix van het X-MS-CLIENT-PRINCIPAL object.
  • Is het vereist?: Nee. Als de X-MS-API-ROLE header afwezig is, wordt de aanvraag verwerkt in de context van de authenticated systeemrol. Dit gedrag betekent dat de gebruiker wordt herkend als aangemeld, maar niet als een specifieke toepassingsgedefinieerde rol van het token.
  • Gedrag bij overeenkomst: als de header wordt opgegeven en de X-MS-API-ROLE waarde overeenkomt met een rol in de client-principals claims, neemt de gebruiker die rol voor de aanvraag aan.
  • Gedrag bij niet-overeenkomende: als de X-MS-API-ROLE header wordt opgegeven, maar de waarde niet overeenkomt met een rol in de client-principal, wordt de aanvraag geweigerd met een 403 Forbidden statuscode. Deze validatie zorgt ervoor dat een gebruiker geen rol kan claimen die niet is toegewezen.

EntraId (verificatieprovider)

{
 "host": {
  "authentication": {
   "provider": "EntraId", // previously AzureAd
   "jwt": {
    "audience": "00001111-aaaa-2222-bbbb-3333cccc4444",
    "issuer": "https://login.microsoftonline.com/98765f43-21ba-400c-a5de-1f2a3d4e5f6a/v2.0"
   }
  }
 }
}

Deze provider beveiligt eindpunten met gebruikers- en toepassingsidentiteiten in Microsoft Entra. Het is ideaal voor elke service waarbij gebruikers of andere services beveiligde toegang nodig hebben binnen de Entra-tenant.

Note

De provider had eerder de EntraId naam AzureAd. De oude naam werkt nog steeds, maar ontwikkelaars worden aangemoedigd om hun configuraties van AzureAd naar .EntraId

Deze provider verwacht een standaard JWT Bearer-token in de Authorization header, uitgegeven door Microsoft Entra. Het token moet worden geconfigureerd voor de specifieke toepassing (met behulp van de audience claim). De rollen voor de gebruiker of service-principal bevinden zich naar verwachting in een claim binnen het token. De code zoekt standaard naar een roles claim.

Anoniem: Als de EntraId provider is geconfigureerd maar een aanvraag binnenkomt zonder de Authorization header, wordt de aanvraag toegewezen aan de systeemrol van anonymous.

Een gedecodeerde JWT-nettolading kan er als volgt uitzien:

{
  "aud": "...", // Audience - your API
  "iss": "https://login.microsoftonline.com/{tenant-id}/v2.0", // Issuer
  "oid": "...", // User or principal object ID
  "roles": [
    "reader",
    "writer"
  ],
  // ... other claims
}

Over de X-MS-API-ROLE-header

  • Rol en gedrag: De X-MS-API-ROLE header wordt gebruikt om een rol op te geven die de gebruiker voor de aanvraag wil aannemen. De waarde van deze header moet overeenkomen met een van de rolwaarden in de roles claim van het JWT-token.
  • Is het vereist?: Nee. Als de X-MS-API-ROLE header afwezig is, wordt de aanvraag verwerkt in de context van de authenticated systeemrol. Dit gedrag betekent dat de gebruiker wordt herkend als aangemeld, maar niet als een specifieke toepassingsgedefinieerde rol van het token.
  • Gedrag bij overeenkomst: als de X-MS-API-ROLE header wordt opgegeven en deze overeenkomt met een rol in de roles claim, wordt de context van de gebruiker ingesteld op die rol.
  • Gedrag bij niet-overeenkomende: als de X-MS-API-ROLE header wordt opgegeven, maar de waarde ervan niet overeenkomt met een rol in de roles claim, wordt de aanvraag geweigerd met een 403 Forbidden statuscode. Deze validatie zorgt ervoor dat een gebruiker geen rol kan claimen die niet is toegewezen.

Aangepast (verificatieprovider)

{
 "host": {
  "authentication": {
   "provider": "Custom",
   "jwt": {
    "audience": "<client-id-or-api-audience>",
    "issuer": "https://<your-domain>/oauth2/default"
   }
  }
 }
}

Deze provider is bedoeld voor ontwikkelaars die Data API Builder willen integreren met een externe id-provider (zoals Auth0, Okta of een aangepaste identiteitsserver) die JWT's uitgeeft. Het biedt de flexibiliteit om de verwachte audience en issuer van de tokens te configureren.

De Custom provider verwacht een standaard JWT Bearer-token in de Authorization header. Het belangrijkste verschil met de EntraId provider is dat u het geldige issuer en audience in het configuratiebestand van de Data API Builder configureert. De provider valideert het token door te controleren of de vertrouwde instantie het heeft uitgegeven. De rollen van de gebruiker bevinden zich naar verwachting in een roles claim binnen de JWT-nettolading.

Note

In sommige gevallen moeten ontwikkelaars, afhankelijk van de id-provider van derden, de structuur van hun JWT dwingen om overeen te komen met de structuur die door Data API Builder wordt verwacht (weergegeven in het volgende voorbeeld).

Anoniem: Als de Custom provider is geconfigureerd maar een aanvraag binnenkomt zonder de Authorization header, wordt de aanvraag toegewezen aan de systeemrol van anonymous.

Een gedecodeerde JWT-nettolading voor een custom provider kan er als volgt uitzien:

{
  "aud": "my-api-audience", // Must match configuration
  "iss": "https://my-custom-issuer.com/", // Must match configuration
  "sub": "user-id",
  "roles": [
    "editor",
    "viewer"
  ],
  // ... other claims
}

Over de X-MS-API-ROLE-header

  • Rol en gedrag: de X-MS-API-ROLE headerfuncties werken precies zoals bij de EntraId provider. Hiermee kan de gebruiker een van de toegewezen rollen selecteren. De waarde van deze header moet overeenkomen met een van de rollen van de roles claim in het aangepaste JWT-token.
  • Is het vereist?: Nee. Als de X-MS-API-ROLE header afwezig is, wordt de gebruiker behandeld als de authenticated systeemrol.
  • Gedrag bij overeenkomst: als de waarde van de X-MS-API-ROLE header overeenkomt met een rol in de claim van roles de JWT, wordt de context van de gebruiker ingesteld op die rol voor autorisatiedoeleinden.
  • Gedrag bij niet-overeenkomende waarden: als de waarde van de X-MS-API-ROLE header niet overeenkomt met een rol in de roles claim, wordt de aanvraag geweigerd met een 403 Forbidden statuscode. Deze validatie zorgt ervoor dat een gebruiker geen rol kan claimen die niet is toegewezen.

Simulator (verificatieprovider)

Deze provider is ontworpen om ontwikkelaars eenvoudig hun configuratie te testen, met name authorization beleidsregels, zonder dat ze een volledige verificatieprovider zoals Entra Identity of EasyAuth hoeven in te stellen. Hiermee wordt een authenticated gebruiker gesimuleerd.

De Simulator provider gebruikt geen JWT-tokens. Verificatie wordt gesimuleerd. Wanneer u deze provider gebruikt, behandelt Data API Builder alle aanvragen alsof deze afkomstig zijn van een geverifieerde gebruiker.

Over de X-MS-API-ROLE-header

  • Rol en gedrag: De X-MS-API-ROLE koptekst is de enige manier om een rol op te geven bij gebruik van de Simulator. Omdat er geen token is met een lijst met rollen, vertrouwt het systeem impliciet de rol die in deze header wordt verzonden.
  • Is het vereist?: Nee.
  • Gedrag bij afwezigheid: als de X-MS-API-ROLE header afwezig is, wordt de aanvraag verwerkt in de context van de authenticated systeemrol.
  • Gedrag bij aanwezigheid: als de header aanwezig is, wordt de X-MS-API-ROLE aanvraag verwerkt in de context van de rol die is opgegeven in de waarde van de header. Er is geen validatie voor een claimslijst, zodat de ontwikkelaar elke rol kan simuleren die ze nodig hebben om hun beleid te testen.

Simulator in productie

Als de authentication.provider optie is ingesteld op Simulator de runtime.host.mode status production, kan data-API-opbouwfunctie niet worden gestart.

"host": {
  "mode": "production", // or "development"
  "authentication": {
    "provider": "Simulator" 
  }
}

JWT (Runtime van verificatiehost)

Parent Property Type Required Default
runtime.host.authentication jwt object ❌ Nee -

Algemene JSON-webtokenconfiguratie (JWT).

Diagram van JSON-webtokens ondersteunen in Data API Builder.

Geneste eigenschappen

Parent Property Type Required Default
runtime.host.authentication.jwt audience string ❌ Nee None
runtime.host.authentication.jwt issuer string ❌ Nee None

Format

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

Paginering (runtime)

Parent Property Type Required Default
runtime pagination object ❌ Nee -

Globale pagineringslimieten voor REST- en GraphQL-eindpunten.

Geneste eigenschappen

Parent Property Type Required Default
runtime.pagination max-page-size int ❌ Nee 100,000
runtime.pagination default-page-size int ❌ Nee 100
runtime.pagination next-link-relative boolean ❌ Nee false

Ondersteunde waarden voor maximale paginagrootte

Value Result
integer Elk positief 32-bits geheel getal wordt ondersteund.
0 Wordt niet ondersteund.
-1 De standaardwaarde wordt ingesteld op de maximaal ondersteunde waarde.
< -1 Wordt niet ondersteund.

Ondersteunde waarden voor standaardpaginagrootte

Value Result
integer Een positief geheel getal kleiner dan de huidige max-page-size.
0 Wordt niet ondersteund.
-1 De standaardinstelling is ingesteld op de huidige max-page-size.
< -1 Wordt niet ondersteund.

Wanneer next-link-relative gebruiken truepagineringswaarden nextLink relatieve URL's in plaats van absolute URL's.

Value Example
false (standaard) "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

Wanneer de waarde groter is dan max-page-size, worden de resultaten beperkt tot max-page-size.

Voorbeeld: Paging in REST

Request

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

Antwoordlading

{
  "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=="
}

Volgende pagina aanvragen

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

Voorbeeld: Paging in GraphQL

Nettolading aanvragen (query)

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

Antwoordlading

{
  "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=="
    }
  }
}

Volgende pagina aanvragen

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

Voorbeeld: Toegang max-page-size tot aanvragen

Gebruik de max-page-size waarde door (REST) of $limit (GraphQL) in te stellen first op -1.

REST

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

GraphQL

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

Cache (runtime)

Parent Property Type Required Default
runtime cache object ❌ Nee -

Globale cacheconfiguratie.

Geneste eigenschappen

Parent Property Type Required Default
runtime.cache enabled boolean ❌ Nee False
runtime.cache ttl-seconds integer ❌ Nee 5

Tip

De eigenschap op entiteitsniveau cache.ttl-seconds is standaard ingesteld op deze globale waarde.

Format

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

Important

Als globaal enabled het geval is false, maakt het niet uit op het niveau van enabled afzonderlijke entiteiten.

Telemetrie (runtime)

Parent Property Type Required Default
runtime telemetry object ❌ Nee -

Globale telemetrieconfiguratie.

Geneste eigenschappen

Parent Property Type Required Default
runtime.telemetry log-level dictionary ❌ Nee None
runtime.telemetry application-insights object ❌ Nee -
runtime.telemetry open-telemetry object ❌ Nee -

Hiermee configureert u de uitgebreide logboekregistratie per naamruimte. Dit volgt standaard .NET-logboekregistratieconventies en maakt gedetailleerde controle mogelijk, hoewel er wordt uitgegaan van enige bekendheid met interne gegevens-API-opbouwfuncties voor Data API. Data API Builder is open source: https://aka.ms/dab

Format

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

Tip

log-level kan dynamisch opnieuw worden geladen in zowel ontwikkeling als productie. Dit is momenteel de enige eigenschap die ondersteuning biedt voor het opnieuw laden van hotloads in productie.

Example

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

Application Insights (telemetrie)

Parent Property Type Required Default
runtime.telemetry application-insights object ❌ Nee -

Hiermee configureert u logboekregistratie voor Application Insights.

Geneste eigenschappen

Parent Property Type Required Default
runtime.telemetry.application-insights enabled boolean ❌ Nee False
runtime.telemetry.application-insights connection-string string ✔️ Ja None

Format

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

OpenTelemetry (telemetrie)

Parent Property Type Required Default
runtime.telemetry open-telemetry object ❌ Nee -

Hiermee configureert u logboekregistratie voor het openen van telemetrie.

Geneste eigenschappen

Parent Property Type Required Default
runtime.telemetry.open-telemetry enabled boolean ❌ Nee true
runtime.telemetry.open-telemetry endpoint string ✔️ Ja None
runtime.telemetry.open-telemetry headers string ❌ Nee None
runtime.telemetry.open-telemetry service-name string ❌ Nee "dab"
runtime.telemetry.open-telemetry exporter-protocol enum (grpc | httpprotobuf) ❌ Nee grpc

Meerdere kopteksten worden , gescheiden (komma's).

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",
      }
    }
  }
}

Meer informatie over OTEL_EXPORTER_OTLP_HEADERS.

Note

gRPC (4317) is sneller en ondersteunt streaming, maar vereist meer installatiestappen. HTTP/protobuf (4318) is eenvoudiger en eenvoudiger om fouten op te sporen, maar minder efficiënt.

Status (runtime)

Parent Property Type Required Default
runtime health object ❌ Nee -

Globale configuratie van statuscontrole-eindpunt (/health).

Geneste eigenschappen

Parent Property Type Required Default Bereik/notities
runtime.health enabled boolean ❌ Nee true
runtime.health roles tekenreeksmatrix ✔️ Ja* null *Vereist in productiemodus
runtime.health cache-ttl-seconds integer ❌ Nee 5 Min. 0
runtime.health max-query-parallelism integer ❌ Nee 4 Min: 1, Max: 8 (klem)

Gedrag in ontwikkeling versus productie

Condition Ontwikkelingsgedrag Productiegedrag
health.enabled = onwaar 403 Status 403 Status
health.enabled = waar Afhankelijk van rol Afhankelijk van rol
roles weggelaten of null Status weergegeven 403 Status
huidige rol niet in roles 403 Status 403 Status
huidige rol in roles Status weergegeven Status weergegeven
roles Bevat anonymous Status weergegeven Status weergegeven

Format

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

Note

Als globaal enabled het geval is false, maakt het niet uit op het niveau van enabled afzonderlijke entiteiten.

Example

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