Data source

Avsnittet data-source definierar information om databasåtkomst. Den definierar även databasalternativ.

Inställningar för datakälla

Property Description
data-source Objekt som innehåller inställningar för databasanslutning
data-source.database-type Databas som används i serverdelen: mssql, postgresql, mysql, , cosmosdb_nosqlcosmosdb_postgresql
data-source.connection-string Anslutningssträng för den valda databastypen
data-source.options Databasspecifika egenskaper (till exempel alternativ för SQL Server, Cosmos DB osv.)
data-source.options.database Namnet på Azure Cosmos DB för NoSQL-databasen (krävs när database-type = cosmosdb_nosql)
data-source.options.container Namnet på Azure Cosmos DB för NoSQL-containern (krävs när database-type = cosmosdb_nosql)
data-source.options.schema Sökväg till GraphQL-schemafilen (krävs när database-type = cosmosdb_nosql)
data-source.options.set-session-context Aktiverar sändning av JSON-webbtokenanspråk (JWT) som sessionskontext (endast SQL Server)
data-source.health Objekt som konfigurerar hälsokontroller för datakällan
data-source.health.enabled Aktiverar slutpunkten för hälsokontroll
data-source.health.name Identifierare som används i hälsorapporten
data-source.health.threshold-ms Maximal varaktighet i millisekunder för hälsokontrollfråga

Format overview

{
  "data-source": {
    "database-type": <string>,
    "connection-string": <string>,
    "options": {
      // mssql only
      "set-session-context": <true> (default) | <false>,
      // cosmosdb_nosql only
      "database": <string>,
      "container": <string>,
      "schema": <string>
    },
    "health": {
      "enabled": <true> (default) | <false>,
      "name": <string>,
      "threshold-ms": <integer; default: 1000>
    }
  },
  "data-source-files": ["<string>"]
}

Data source

Parent Property Type Required Default
$root database-source object ✔️ Yes -

Nested properties

Parent Property Type Required Default
data-source database-type enum ✔️ Yes None
data-source connection-string string ✔️ Yes None
data-source options object ❌ Nej None

Property values

database-type Description Min Version
mssql SQL i infrastrukturresurser -
mssql Azure SQL Database -
mssql Azure SQL MI -
mssql SQL Server 2016
dwsql Azure Synapse Analytics -
dwsql Fabric Warehouse -
dwsql Sql Analytics-slutpunkt för infrastrukturresurser -
postgresql PostgreSQL ver. 11
mysql MySQL ver. 8
cosmosdb_nosql Azure Cosmos DB för NoSQL -
cosmosdb_postgresql Azure Cosmos DB för PostgreSQL -

Format

{
  "data-source": {
    "database-type": <string>,
    "connection-string": <string>,
    "options": {
      "<key-name>": <string>
    }
  }
}

Exempel: Azure SQL & SQL Server

"data-source": {
  "database-type": "mssql",
  "connection-string": "Server=tcp:myserver.database.windows.net,1433;Initial Catalog=MyDatabase;User ID=MyUser;Password=MyPassword;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;",
    "options": {
      "set-session-context": true
    }
}

Note

We use SqlClient for Azure SQL and SQL Server, which supports these connection strings variants.

Konsumera SESSION_CONTEXT

För Azure SQL och SQL Server kan Data API-byggare inkludera anspråksinformation i SQL:s SESSION_CONTEXT.

CREATE PROC GetUser @userId INT AS
BEGIN
    -- Use claims
    IF SESSION_CONTEXT(N'user_role') = 'admin' 
    BEGIN
        RAISERROR('Unauthorized access', 16, 1);
    END

    SELECT Id, Name, Age, IsAdmin
    FROM Users
    WHERE Id = @userId;
END;

Exempel: Azure Cosmos DB

"data-source": {
  "database-type": "cosmosdb_nosql",
  "connection-string": "@env('SQL_CONNECTION_STRING')",
  "options": {
    "database": "Your_CosmosDB_Database_Name",
    "container": "Your_CosmosDB_Container_Name",
    "schema": "Path_to_Your_GraphQL_Schema_File"
  }
}

Note

De "alternativ" som anges (database, containeroch schema) är specifika för Azure Cosmos DB.

Environment variables

Använd miljövariabler för att hålla oformaterade texthemligheter borta från konfigurationsfilen.

"data-source": {
  "database-type": "mssql",
  "connection-string": "@env('SQL_CONNECTION_STRING')"
}

Connection resiliency

Data API Builder använder exponentiell backoff för att försöka databasbegäranden igen efter tillfälliga fel.

Attempts First Second Third Fourth Fifth
Seconds 2s 4s 8s 16s 32s

Hanterade tjänstidentiteter (MSI)

Hanterade tjänstidentiteter (MSI) stöds med DefaultAzureCredential definierade i Azure.Identity biblioteket. Läs mer om hanterade identiteter i Microsoft Entra för Azure SQL.

User-Assigned hanterade identiteter (UAMI)

For User Assigned Managed Identity, append the Authentication and User Id properties to your connection string while substituting in your User Assigned Managed Identity's client id: Authentication=Active Directory Managed Identity; User Id=<UMI_CLIENT_ID>;.

System-Assigned hanterad identitet (SAMI)

For System Assigned Managed Identity, append the Authentication property and exclude the UserId and Password arguments from your connection string: Authentication=Active Directory Managed Identity;.

Hälsa (datakälla)

Parent Property Type Required Default
data-source health object No

Data API Builder stöder flera konfigurationsfiler, var och en med sin egen datakälla. Med det här konfigurationsblocket kan varje datakälla ha en egen hälsokonfiguration.

Nested properties

Parent Property Type Required Default
data-source.health enabled boolean No true
data-source.health name string No database-type
data-source.health threshold-ms integer No 1000

Check name

Eftersom flera konfigurationsfiler kan peka på datakällor av samma typ kan dessa datakällor inte särskiljas i hälsorapporten. Använd name för att tilldela en unik, identifierbar etikett som endast används i hälsorapporten.

Check behavior

Den enklaste möjliga frågan – specifik för databastypen – körs mot den angivna datakällan för att verifiera att anslutningen kan öppnas. Använd egenskapen threshold-ms för att konfigurera den maximala acceptabla varaktigheten (i millisekunder) för att frågan ska slutföras.

Format

{
  "data-source": {
    "health": {
      "enabled": <true> (default) | <false>,
      "name": <string>,
      "threshold-ms": <integer; default: 1000>
    }
  }
}