Bagikan melalui


Data source

Bagian menentukan data-source detail akses database. Ini juga mendefinisikan opsi database.

Pengaturan sumber data

Property Description
data-source Objek yang berisi pengaturan konektivitas database
data-source.database-type Database yang digunakan di backend: mssql, , postgresql, mysql, cosmosdb_nosqlcosmosdb_postgresql
data-source.connection-string String koneksi untuk jenis database yang dipilih
data-source.options Properti khusus database (misalnya, opsi untuk SQL Server, Cosmos DB, dll.)
data-source.options.database Nama Azure Cosmos DB untuk database NoSQL (diperlukan saat database-type = cosmosdb_nosql)
data-source.options.container Nama kontainer Azure Cosmos DB for NoSQL (diperlukan saat database-type = cosmosdb_nosql)
data-source.options.schema Jalur ke file skema GraphQL (diperlukan saat database-type = cosmosdb_nosql)
data-source.options.set-session-context Memungkinkan pengiriman klaim JSON Web Token (JWT) sebagai konteks sesi (hanya SQL Server)
data-source.health Objek yang mengonfigurasi pemeriksaan kesehatan untuk sumber data
data-source.health.enabled Mengaktifkan titik akhir pemeriksaan kesehatan
data-source.health.name Pengidentifikasi yang digunakan dalam laporan kesehatan
data-source.health.threshold-ms Durasi maksimum dalam milidetik untuk kueri pemeriksaan kesehatan

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 objek ✔️ 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 objek ❌ Tidak None

Property values

database-type Description Min Version
mssql SQL in Fabric -
mssql Azure SQL Database -
mssql Azure SQL MI -
mssql SQL Server 2016
dwsql Azure Synapse Analytics -
dwsql Fabric Warehouse -
dwsql Titik akhir Fabric SQL Analytics -
postgresql PostgreSQL ver. 11
mysql MySQL ver. 8
cosmosdb_nosql Azure Cosmos DB for NoSQL -
cosmosdb_postgresql Azure Cosmos DB for PostgreSQL -

Format

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

Contoh: 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.

Mengkonsumsi SESSION_CONTEXT

Untuk Azure SQL dan SQL Server, penyusun API Data dapat menyertakan info Klaim di SQL 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;

Contoh: 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

"Opsi" yang ditentukan (database, container, dan schema) khusus untuk Azure Cosmos DB.

Environment variables

Gunakan variabel lingkungan untuk menyimpan rahasia teks biasa dari file konfigurasi Anda.

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

Connection resiliency

Pembuat API Data menggunakan Backoff Eksponensial untuk mencoba kembali permintaan database setelah kesalahan sementara.

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

Identitas Layanan Terkelola (MSI)

Identitas Layanan Terkelola (MSI) didukung dengan DefaultAzureCredential yang ditentukan dalam Azure.Identity pustaka. Pelajari selengkapnya tentang Identitas terkelola di Microsoft Entra untuk Azure SQL.

User-Assigned Identitas Terkelola (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>;.

identitas terkelola System-Assigned (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;.

Kesehatan (Sumber data)

Parent Property Type Required Default
data-source health objek No

Penyusun API Data mendukung beberapa file konfigurasi, masing-masing dengan sumber datanya sendiri. Blok konfigurasi ini memungkinkan setiap sumber data memiliki konfigurasi kesehatannya sendiri.

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

Karena beberapa file konfigurasi dapat menunjuk ke sumber data dengan jenis yang sama, sumber data tersebut tidak dapat dibedakan dalam laporan kesehatan. Gunakan name untuk menetapkan label unik yang dapat diidentifikasi yang hanya digunakan dalam laporan kesehatan.

Check behavior

Kueri paling sederhana—khusus untuk jenis database—dijalankan terhadap sumber data yang diberikan untuk memvalidasi bahwa koneksi dapat dibuka. threshold-ms Gunakan properti untuk mengonfigurasi durasi maksimum yang dapat diterima (dalam milidetik) agar kueri tersebut selesai.

Format

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